+5V R13 2,46V IC3. Analog 2. I 2 C Bus und analoge Eingabe = Teil 2 Software (in) = by AS. playground.boxtec.ch/doku.

Ähnliche Dokumente
by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und analoge Eingabe = Teil 1 Hardware = Analog 1

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und analoge Eingabe = Teil 1 Hardware = Analog 2

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus Isolator Isolator

Graphik 1 - Hardware. by AS. Graphik Display ( 128x64 ) mit dem KS0108, 2 Ports und 2 x I 2 C Verbindung

Anzeige 2 - Teil 1. by AS. Anzeige 2 mit dem HT16K33, 3 x LED Matrix Anzeigen (8x8), 2 x I 2 C Bus = Teil 1 Hardware =

by AS playground.boxtec.ch/doku.php/tutorial I2C - Extender

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und Out 1 I2C - Out 1

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und Out 2 (16 Bit) I2C-Bus - Out 2

by AS playground.boxtec.ch/doku.php/tutorial Bus Modul I 2 C - Display 2 BM Display 2

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und IR - Melder I2C - IR 1

Board 1 - Teil 2. by AS. Prozessor Board 1 mit dem AT 1284 P, 3 x Ports, ISP und 2 x I 2 C Bus = Teil 2 Der erste Start =

by AS I 2 C Bus Modul, PCF 8574 Display 4x16, 4 Bit Modus I 2 C Bus- Display 1

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und E-Paper Teil 1 - Hardware I 2 C Bus und E-Paper


SAM D21 J17A. by AS. ARM Controller - SAM D21 J17A ( 32 Bit Controller ) Software 1 Atmel Studio einrichten

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und Schalter 1 Schalter 1

tutorials.bt.ch.to AVR Studio 6 / Teil 1 by AS Eine kleine Einführung in das AVR Studio 6 ( Installation und erste Schritte )

by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und Temperatur 2 I2C-Bus Temp 2

by AS playground.boxtec.ch/doku.php/tutorial Attiny 261 mit Servo und verschiedenen Anschlüssen = Teil 1 Hardware = Servo 3

by AS playground.boxtec.ch/doku.php/tutorial Ein Graphik Display edip128 am I 2 C Bus Teil 2 - Software I2C Bus + Graphik

Codeschloss 1 - Teil 1. by AS. Codeschloss 1 Matrixtastatur 3x4, ISP, Relais- Ausgang, I 2 C Bus oder NT Anschluss = Teil 1 Hardware =

Bauanleitung OLED-Shield 128x64 für WeMos mini

Board 1 - Teil 1. by AS. Prozessor Board 1 mit dem AT 1284 P, 3 x Ports, ISP und 2 x I 2 C Bus = Teil 1 Hardware =

WIFFI-pump Bauanleitung rev1 stall.biz

MICRO LED-KONSTANT- STROMQUELLE 10mA

Eigenschaften: MoMo I - Motorregler Betriebsanleitung - v

by AS playground.boxtec.ch/doku.php/tutorial Board 1 und Servo 1 Servo 1

CU-R-CONTROL². Autor: Christian Ulrich. Datum: Version: Seite 1 von 16. AddOn IO-Taster Dokumentation zur Schaltung

Bauanleitung der LED-Qube 5

Bauanleitung Impulsgeber mit S0-Schnittstelle

Bauanleitung Impulsgeber mit S0-Schnittstelle

Solaranlagen-Set 40 W

LED VORSCHALTPLATINE 230 VAC

Bauanleitung Unterputz Wohnraumsensor für Temperatur, Luftfeuchte und Lichtsensor für 1-Wire Bus

Step-Down Wandler. Artikelname. Pollin Electronic GmbH Tel. (08403) Stand , web, #1all, hka

Bedienungsanleitung. Rundumkennleuchte. Generation 2.0. Maßstab 1:16 1:12 1:8

Schaltnetzteil-Baustein SP 1500/01

GREETBoard Stepper L6208. Version 1.0

Temperaturgesteuerte Lüfterregelung

I2C-006 DATASHEET I2C-006 V1.00: 1K EEPROM MODUL MIT TWI (I 2 C) SCHNITTSTELLE. Dokument NR.: I2C-006_Datasheet

Regelbares Netzteil 1,25-30Volt

Funkübertragung im I2C-Bus HomeMatic Sende-/Empfangsmodul integriert

Bauanleitung der LED-Qube 5 V2

1. Allgemeine Hinweise. 1.1 Gewährleistung und Haftung. 2 Sicherheit 2.1 Bestimmungsgemäße Verwendung

i / ..: .._I.,.,.>;..,!..e,.,.., ,.,/ \ _~..I.?,

Headset-Adapter für Major-Bediengeräte. Bestellinformationen. Lageplan REL2 ST3 ST5 ST2 ST4 ST1 REL1 REL3 REL4

1.0 Wichtige Sicherheitshinweise

CU-R-CONTROL². Autor: Christian Ulrich Datum: Version: Seite 1 von 19. AddOn I2C-IO Dokumentation zur Schaltung

Bedienungsanleitung. Energiekosten Messgerät

PT1000 Messwandler. Best.Nr Pollin Electronic GmbH Tel. (08403) Stand , web, #all, hka

Pollin Spiel I. Best.Nr Pollin Electronic GmbH Tel. (08403) ohne Batterien. Stand , inhouse, #1000, hka

Zur Einarbeitung in die Arduino Welt reichen die Folgenden Komponenten aus.

Bedienungsanleitung LED-Arbeitslicht mit Bogenhaken Art.-Nr.:

WebFiber 4000 Lichtleiter-Netzteil. Installations- und Gebrauchsanleitung

LED Cube & Seat White PE

V cc. 1 k. 7 mal 150 Ohm

Bestellnummer Bezeichnung Tischmikrofon TKE, Ausführung mit zwei Tasten Tischmikrofon TKE, Ausführung mit einer Taste

ODROID-VU7 Multitouch TFT-Display Best.Nr

DMX-Servo-Control 2. Bedienungsanleitung

Bausatz Roulette. Best.Nr Sicherheitshinweise:

Bedienungsanleitung Automatik-Lader AL 1600 für V

Digitale - Einbau - Zeitschaltuhr

Bausatz Mikrocontrollermodul -Bauanleitung und Kurzinformation-

Eigenschaften: LD 14 Lauflichtdecoder Betriebsanleitung - v

Handbuch zum Energiekosten-Meßgerät energy control 400

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang :

PCI-Netzwerkkarte 10MBit "Micronet SP2082A"

Analog-Digital-Converter

Temperaturmessung mit dem ATmega8

Outdoor LED Par 9 x 3W

Bedienungsanleitung EDIP Display für xbee und RS232

Arduino - Einfacher Teiler

CU-R-CONTROL². Autor: Christian Ulrich Datum: Version: Seite 1 von 22. AddOn I2C-LCD Dokumentation zur Schaltung

LED Skalenbeleuchtung mit einem Arduino

Bedienungsanleitung. Controller. Technische Daten: Empfänger: (Art ) Anschlussdiagramm: (ohne Fernbedienung)

Grundlagen der Objektorientierung :

Bau- und Bedienungsanleitung Temperatur- und Luftfeuchtesensor für 1-Wire Bus

DMX-LED-DIMMER 4x 350/700mA

Beschaltung eines Mikrocontrollers. Jordi Blanch Sierra Steuerungsgruppe

SB-002 DATASHEET SB-002 V1.00: 8051 MIKROCONTROLLERBOARD MIT AT89C5131A-M OHNE NETZTEIL. Dokument NR.: SB-002_Datasheet

Zeitrelaismodul ZRM 1 Art. Nr

Serielle Schnittstelle, erstes Testprogramm (a)

Sicherheitsinformationen. BlueNet PDU BN3000/3500/5000/7000/7500

E.1 Einleitung. Teil E Pulsweitenmodulation (PWM) 1

GREETBoard I2C RTC. Version 1.0

Controller DMX SimpleDesk 24

Handbuch zum Energiekosten-Meßgerät energy control 230

i2c-bus.de I2C-001 KURZBESCHREIBUNG I 2 C Modul mit PCF Bit I/O Port-Expander Dokument NR.: I2C-001-D-01

MP3-Player. Sicherheit und Inbetriebnahme Tchibo GmbH D Hamburg 65391HB6XII

Automatisches Lademodul Best.-Nr.:

Bedienungsanleitung. Home Dimmer

Visitenkarten-Scanner Best.Nr

D.1 Vorbereitung. Teil D Analog-Digital-Wandler 1

BLUE line. Bedienungsanleitung zum M-Unit Experimentierboard. Innovative Technik. Tobias Regenhardt Grüner Weg Seulingen

Display-Set Best.Nr

Color Wheel with Motor for T-36

Version-D Bedienungsanleitung

Bedienungsanleitung ALCT 12-4 Pro

Mit dieser kleinen Adapter-Platine können HD44780 kompatible LCD-Displays am I2C-Bus betrieben werden.

Best.-Nr.: Bestimmungsgemässe Verwendung:

Transkript:

+5V R13 2,46V IC3 www.boxtec.ch by AS playground.boxtec.ch/doku.php/tutorial I 2 C Bus und analoge Eingabe = Teil 2 Software (in) = Analog 2

Copyright Sofern nicht anders angegeben, stehen die Inhalte dieser Dokumentation unter einer Creative Commons - Namensnennung- NichtKommerziell-Weitergabe unter gleichen Bedingungen 3.0 DE Lizenz Sicherheitshinweise Lesen Sie diese Gebrauchsanleitung, bevor Sie diesen Bausatz in Betrieb nehmen und bewahren Sie diese an einem für alle Benutzer jederzeit zugänglichen Platz auf. Bei Schäden, die durch Nichtbe-achtung dieser Bedienungsanleitung verursacht werden, erlischt die Gewährleistung/Garantie. Für Folgeschäden übernehmen wir keine Haftung! Bei allen Geräten, die zu ihrem Betrieb eine elektrische Spannung benötigen, müssen die gültigen VDE-Vorschriften beachtet werden. Besonders relevant sind für diesen Bausatz die VDE-Richtlinien VDE 0100, VDE 0550/0551, VDE 0700, VDE 0711 und VDE 0860. Bitte beachten Sie auch nachfolgende Sicherheitshinweise: Nehmen Sie diesen Bausatz nur dann in Betrieb, wenn er zuvor berührungssicher in ein Gehäuse eingebaut wurde. Erst danach darf dieser an eine Spannungsversorgung angeschlossen werden. Lassen Sie Geräte, die mit einer Versorgungsspannung größer als 24 V- betrieben werden, nur durch eine fachkundige Person anschließen. In Schulen, Ausbildungseinrichtungen, Hobby- und Selbsthilfewerkstätten ist das Betreiben die-ser Baugruppe durch geschultes Personal verantwortlich zu überwachen. In einer Umgebung in der brennbare Gase, Dämpfe oder Stäube vorhanden sind oder vorhanden sein können, darf diese Baugruppe nicht betrieben werden. Im Falle eine Reparatur dieser Baugruppe, dürfen nur Original-Ersatzteile verwendet werden! Die Verwendung abweichender Ersatzteile kann zu ernsthaften Sach- und Personenschäden führen. Eine Reparatur des Gerätes darf nur von fachkundigen Personen durchgeführt werden. Spannungsführende Teile an dieser Baugruppe dürfen nur dann berührt werden (gilt auch für Werkzeuge, Messinstrumente o.ä.), wenn sichergestellt ist, dass die Baugruppe von der Versorgungsspannung getrennt wurde und elektrische Ladungen, die in den in der Baugruppe befindlichen Bauteilen gespeichert sind, vorher entladen wurden. Sind Messungen bei geöffnetem Gehäuse unumgänglich, muss ein Trenntrafo zur Spannungsversorgung verwendet werden Spannungsführende Kabel oder Leitungen, mit denen die Baugruppe verbunden ist, müssen immer auf Isolationsfehler oder Bruchstellen kontrolliert werden. Bei einem Fehlers muss das Gerät unverzüglich ausser Betrieb genommen werden, bis die defekte Leitung ausgewechselt worden ist. Es ist auf die genaue Einhaltung der genannten Kenndaten der Baugruppe und der in der Baugrup-pe verwendeten Bauteile zu achten. Gehen diese aus der beiliegenden Beschreibung nicht hervor, so ist eine fachkundige Person hinzuzuziehen Bestimmungsgemäße Verwendung Auf keinen Fall darf 230 V~ Netzspannung angeschlossen werden. Es besteht dann Lebensgefahr! Dieser Bausatz ist nur zum Einsatz unter Lern- und Laborbedingungen konzipiert worden. Er ist nicht geeignet, reale Steuerungsaufgaben jeglicher Art zu übernehmen. Ein anderer Einsatz als angegeben ist nicht zulässig! Der Bausatz ist nur für den Gebrauch in trockenen und sauberen Räumen bestimmt. Wird dieser Bausatz nicht bestimmungsgemäß eingesetzt kann er beschädigt werden, was mit Gefahren, wie z.b. Kurzschluss, Brand, elektrischer Schlag etc. verbunden ist. Der Bausatz darf nicht geändert bzw. umgebaut werden! Für alle Personen- und Sachschäden, die aus nicht bestimmungsgemäßer Verwendung entstehen, ist nicht der Hersteller, sondern der Betreiber verantwortlich. Bitte beachten Sie, dass Bedien- und /oder Anschlussfehler außerhalb unseres Einflussbereiches liegen. Verständlicherweise können wir für Schäden, die daraus entstehen, keinerlei Haftung übernehmen. Der Autor dieses Tutorials übernimmt keine Haftung für Schäden. Die Nutzung der Hard- und Software erfolgt auf eigenes Risiko. BT Analog 2 2

I 2 C Bus und analoge Eingabe = Teil 2 Software (in)= Im zweiten Teil von Analog 2 wollen wir uns die Messung von 0 bis 10 V ansehen. Als Grundlage verwenden wir wieder diese Platine. Platine mit dem PCF 8591 und Zusätzlichen OPV, Spannungsteiler und Schraubklemmen Als Anzeige nutze ich ein Graphikdisplay, das über den ATmega 1284p angesteuert wird. Zum Betrieb sind zusätzliche Dateien notwendig. Graphikmodul 1 (P 35) zum Anschluss an den ATmega1284p Spannungsnormal 10,00V Prozessorplatine Board 1 mit dem ATmega 1284p BT Analog 2 3

Zur Spannungsversorgung nutze ich wieder mein NT2. Die Verbindung der Module erfolgt über den I 2 C Bus bzw. über die Verbindung Board1 und Graphikmodul. Bei diesem Aufbau verwende ich zusätzlich die Platine P25. Dabei handelt es sich um eine sehr genaue +10V Spannungsquelle. Durch den Anschluss mehrerer Potis kann ich die Eingangsspannung zwischen 0 und +10V verändern. Die Schaltung und Funktion habe ich bereits im ersten Teil erläutert. Sehen wir uns einige Berechnungen an: Referenzspannung +5V R13 2,46V IC3 R13 Widerstand 2,49 kohm IC3 LM 336 Z 2,5 Die Referenzspannung von 2,46V für den PCF 8591 wird aus +5V gewonnen. Dazu verwenden ich den IC LM 336-Z2,5 und einem Vorwiderstand von 2,49 kohm. Die Daten/Schaltung habe ich dem Datenblatt des Herstellers entnommen. Eingangspannungsteiler UE R3 R8 UA R3 Widerstand 31,6 kohm R8 Widerstand 10 kohm U E = max. 10V Die maximale Eingangsspannung kann +10V betragen. Da unsere Referenzspannung 2,46V beträgt, kann kein höherer Wert gelesen werden. Durch den Spannungsteiler wird die Eingangsspannung von max. +10V auf max. 2,40V geteilt. U A = U E R 8 R 8 + R 3 = 10 V 10 kω 10 kω + 31,6 kω = 2,404 V 2,40 V Die Eingangsspannung wird durch den Spannungsteiler mit 4,16 geteilt T = U E U A = 10 V 2,404 V = 4,16 Da die Software an vielen Stellen mit dem Programm aus Analog 1 - Software identisch ist, möchte ich nur das wichtigste und erfolgten Änderungen erläutern. BT Analog 2 4

Sehen wir uns als nächste das Programm in kleinen Schritten an: #include "ks0108.h" #include "arial_bold_14.h" #include "corsiva_12.h" #include "arial8.h" #include "small_font.h" // Bibliothek für den verwendeten Graphik IC // Zeichensätze für die Schriften Zum Betrieb des Graphikmoduls müssen diese Dateien/Bibliotheken zuzüglich den bereits vorhandenen geladen werden. #define PCF8591w 0x90 // Adressen PCF 8591 #define PCF8591r 0x91 Angabe der Bus Adressen für den PCF 8591 void startanzeige() ks0108clearscreen(); // Display löschen ks0108drawroundrect(1, 2, 125, 61, 8, BLACK); // Ausgabe Rand ks0108drawline(110, 32, 67, 60, BLACK); //Ausgabe Linie ks0108drawrect(12, 47, 10, 10, BLACK); //Ausgabe Viereck leer ks0108fillrect(40, 50, 10, 10, BLACK); //Ausgabe Viereck gefüllt ks0108circle(110, 50, 10, BLACK); // Ausgabe Kreis ks0108selectfont(arial_bold_14, ks0108readfontdata, BLACK); // Auswahl Schrift ks0108gotoxy(14,5); ks0108puts_p(pstr("display - Modul\nmit dem KS0108")); // Ausgabe Text _delay_ms(1000); // Pause ks0108selectfont(small_font, ks0108readfontdata, BLACK); ks0108gotoxy(14,35); //Angabe Position ks0108puts_p(pstr("spannungsmessung")); // Ausgabe Text Startbildschirm mit kurzer Angabe der Anwendung void anzeige1() ks0108clearscreen(); // Display löschen // Text 1 überschrift ks0108selectfont(arial_bold_14, ks0108readfontdata, BLACK); ks0108gotoxy(4,2); ks0108puts_p(pstr("anzeige Spannung")); // Ausgabe Text // Text 2 normale Anzeige ks0108gotoxy(8,20); ks0108puts_p(pstr("p1 =")); ks0108gotoxy(60,20); ks0108puts_p(pstr("u1 =")); ks0108gotoxy(117,20); ks0108gotoxy(92,20); // Text 3 normale Anzeige BT Analog 2 5

ks0108gotoxy(8,30); ks0108puts_p(pstr("p2 =")); ks0108gotoxy(60,30); ks0108puts_p(pstr("u2 =")); ks0108gotoxy(117,30); ks0108gotoxy(92,30); // Text 4 normale Anzeige ks0108gotoxy(8,40); ks0108puts_p(pstr("p3 =")); ks0108gotoxy(60,40); ks0108puts_p(pstr("u3 =")); ks0108gotoxy(117,40); ks0108gotoxy(92,40); // Text 5 normale Anzeige ks0108gotoxy(8,50); ks0108puts_p(pstr("p4 =")); ks0108gotoxy(60,50); ks0108puts_p(pstr("u4 =")); ks0108gotoxy(117,50); ks0108gotoxy(92,50); Mit diesem Code erzeuge ich eine Maske die einmalig auf das Graphikdisplay während des Startvorganges gelegt wird int main(void) DDRD=0b00001000; //PORTD &=~(1<<PD3); PORTD =(1<<PD3); ks0108init(0); _delay_ms(5); i2c_init(); startanzeige(); _delay_ms(2000); ks0108clearscreen(); anzeige1(); char Buffer[20]; // Angabe Pin am AT1284p // LED Licht aus // LED Licht an // Initialize GLCD // Pause // Starte I2C Bus // Pause // Display löschen Start des Programmes, Buffer definieren, Bus und LCD initiieren, LCD-Licht an, LCD Befehle senden, Aufruf Startbildschirm und anzeige1, Display löschen und 5 bzw. 2000 ms Pause BT Analog 2 6

// Zeile 2 Wert P1 itoa( results[0], Buffer, 10 ); ks0108fillrect(29, 20, 20, 8, WHITE); ks0108gotoxy(31,20); // Berechne Wert //Auswahl Schrift überschreibe Wert results[0] wird durch itoa gewandelt (itoa( results[0], Buffer, 10 );), eine Schriftart ausgewählt und eine Position zur Ausgabe angegeben. Vor Ausgabe des neuen Wertes wird der alte Wert durch überschreiben gelöscht. Das wiederholen wir für die nächsten 3 Zeilen. Dadurch wird die Maske nicht verändert. // Zeile 2 rechts int16_t adc1l, adc1a, adc1r1, adc1r2, adc1b; // notwendige Variablen adc1=((results[0]*398)/100); // 1. Schritt if (adc1>1025) adc1=1025; // Begrenzung adc1a=adc1; // 2. Schritt adc1r2=adc1a % 10; // 3. Schritt rechts 2 adc1b=adc1a/10; // 4. Schritt adc1r1=adc1b % 10; // 5. Schritt rechts 1 adc1l=adc1b/10; // 6. Schritt links ks0108fillrect(79, 20, 11, 8, WHITE); überschreibe Wert ks0108fillrect(94, 20, 14, 8, WHITE); überschreibe Wert //Auswahl Schrift itoa( adc1l, Buffer, 10 ); // Zeile 2 Zahl 1 ks0108gotoxy(85,20); itoa( adc1r1, Buffer, 10 ); // Zeile 2 Zahl 2 ks0108gotoxy(95,20); itoa( adc1r2, Buffer, 10 ); // Zeile 2 Zahl 3 ks0108gotoxy(100,20); adc1=((results[0]*398)/100); // 1. Schritt Mit dieser Zeile berechnen wir den adc1 Wert. Dazu wird results[0] mit dem Korrekturfaktor von 398 multipliziert. Den Korrekturfaktor errechnen wir mit (Berechnet 399, verwendet 398) K = Referensspannung 2 8 T = 2, 46 V 256 4, 16 = 0, 0399746 10000 399 Damit haben wir auch die Auflösung der Spannungsmessung berechnet. Diese beträgt bei 2 8 0,0399746 V oder rund 40 mv. Für die Berechnung wird K mit 10000 multipliziert. Dadurch führen wir nur Festkommaarithmetik durch. Das spart sehr viel Rechenzeit. Mit dem Korrekturfaktor K kann ein Abgleich der Eingangsspannung vorgenommen werden. BT Analog 2 7

Berechnung der möglichen maximalen Anzeige: Maximale Ausgabe des PCF 8591 = 255 Korrekturfaktor ( K ) = 399 Ausgabe max = (Ausgabe PCF8591 K) 100 = (255 399) 100 = 1018 if (adc1>1025) Sehen wir uns dazu ein Beispiel an: adc1 = (results[0] x K) / 100 adc1 = (188 x 399) / 100 adc1=1025; // Begrenzung adc1 = 750,12 Begrenzung der möglichen maximalen Anzeige Da adc1 ein int Wert ist, werden nur ganze Zahlen gespeichert adc1 = 750 adc1a=adc1; // 2. Schritt adc1a = 750 im zweiten Schritt speichern wir adc1 als adc1a adc1r2=adc1a % 10; im dritten Schritt wird adc1a durch Modulo 10 geteilt adc1r2 = 0 ( Modulo (%) bedeutet, Rest einer Division ) adc1b=adc1a/10; // 4. Schritt im vierten Schritt wird adc1a durch 10 dividiert adc1b = 75 und als adc1b gespeichert adc1r1=adc1b % 10; // 5. Schritt rechts 1 im fünften Schritt wird adc1b durch Modulo 10 geteilt adc1r1 = 5 und als adc1r1 gespeichert adc1l=adc1b/10; // 6. Schritt links im sechsten Schritt wird adc1b durch 10 dividiert adc1l = 7 und als adc1l gespeichert itoa( adc1l, Buffer, 10 ); // Zeile 2 Zahl 1 ks0108gotoxy(85,20); Anzeige 7 itoa( adc1r1, Buffer, 10 ); // Zeile 2 Zahl 2 ks0108gotoxy(95,20); Anzeige 5 itoa( adc1r2, Buffer, 10 ); // Zeile 2 Zahl 3 ks0108gotoxy(100,20); Anzeige 0 in diesem Teil des Programmes wird durch itoa die gespeicherten Werte adc1l, adc1r1 und adc1r2 gewandelt und an den gewünschten Stellen unserer Anzeige angezeigt. Die Zahl 750 wird angezeigt durch: 1. Zahl - adc1l - 7 2. Zahl - adc1r1-5 3. Zahl - adc1r2-0 BT Analog 2 8

Die Berechnung und Darstellung habe ich recht ausführlich dargestellt. Es können einige Schritte gekürzt oder zusammengefasst werden. Die Berechnung der anderen Zeilen erfolgt genauso. Achtet bitte genau auf die Bezeichnungen der Variablen. Auf Grund der Ähnlichkeit kommt man recht schnell durcheinander. Das ganze Programm: /* ATB_Ana_Prg_7.c Created: 13.12.2015 17:08:23 Author: AS */ // Hardware // P30 mit ATmega 1284p // P35 Grapfigdisplay // NT 2 Netzteil 5V + 12V // Eingabe der analogwerte mit P33 - Anschluss Wandler 0 bis 10V über Poti // Spannungsnormal 10V P25 ///////////////////////////////////////////////////////////////////////////////////////// // Achtung: Basis 10 V ///////////////////////////////////////////////////////////////////////////////////////// #define F_CPU 16000000UL #include <inttypes.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include <stdlib.h> #include "i2cmaster.h" #include "ks0108.h" #include "arial_bold_14.h" #include "corsiva_12.h" #include "arial8.h" #include "small_font.h" #define PCF8591w 0x90 #define PCF8591r 0x91 // Adresse analog Modul int8_t i; float results[5],adc1,adc2,adc3,adc4; void startanzeige() ks0108clearscreen(); // Display löschen ks0108drawroundrect(1, 2, 125, 61, 8, BLACK); // Ausgabe Rand ks0108drawline(110, 32, 67, 60, BLACK); //Ausgabe Linie ks0108drawrect(12, 47, 10, 10, BLACK); //Ausgabe Viereck leer ks0108fillrect(40, 50, 10, 10, BLACK); //Ausgabe Viereck gefüllt ks0108circle(110, 50, 10, BLACK); // Ausgabe Kreis ks0108selectfont(arial_bold_14, ks0108readfontdata, BLACK); // Auswahl Schrift ks0108gotoxy(14,5); ks0108puts_p(pstr("display - Modul\nmit dem KS0108")); // Ausgabe Text _delay_ms(1000); // Pause ks0108selectfont(small_font, ks0108readfontdata, BLACK); ks0108gotoxy(14,35); //Angabe Position ks0108puts_p(pstr("spannungsmessung")); // Ausgabe Text BT Analog 2 9

void anzeige1() ks0108clearscreen(); // Display löschen // Text 1 überschrift ks0108selectfont(arial_bold_14, ks0108readfontdata, BLACK); ks0108gotoxy(4,2); ks0108puts_p(pstr("anzeige Spannung")); // Ausgabe Text // Text 2 normale Anzeige ks0108gotoxy(8,20); ks0108puts_p(pstr("p1 =")); ks0108gotoxy(60,20); ks0108puts_p(pstr("u1 =")); ks0108gotoxy(117,20); ks0108gotoxy(92,20); // Text 3 normale Anzeige ks0108gotoxy(8,30); ks0108puts_p(pstr("p2 =")); ks0108gotoxy(60,30); ks0108puts_p(pstr("u2 =")); ks0108gotoxy(117,30); ks0108gotoxy(92,30); // Text 4 normale Anzeige ks0108gotoxy(8,40); ks0108puts_p(pstr("p3 =")); ks0108gotoxy(60,40); ks0108puts_p(pstr("u3 =")); ks0108gotoxy(117,40); ks0108gotoxy(92,40); // Text 5 normale Anzeige ks0108gotoxy(8,50); ks0108puts_p(pstr("p4 =")); ks0108gotoxy(60,50); ks0108puts_p(pstr("u4 =")); ks0108gotoxy(117,50); ks0108gotoxy(92,50); BT Analog 2 10

int main(void) DDRD=0b00001000; // Angabe Pin am AT1284p //PORTD &=~(1<<PD3); // LED Licht aus PORTD =(1<<PD3); // LED Licht an ks0108init(0); // Initialize GLCD _delay_ms(5); // Pause i2c_init(); // Starte I2C Bus startanzeige(); _delay_ms(2000); // Pause ks0108clearscreen(); // Display löschen anzeige1(); char Buffer[20]; while(1) i2c_start(pcf8591w); i2c_write(0x44); // Analog out enable, auto increment, channel 0 i2c_stop(); i2c_start(pcf8591r); i2c_readack(); // first data is old for (i=0; i<4; i++) results[i]=i2c_readack(); i2c_readnak(); i2c_stop(); _delay_ms(2); // Zeile 2 Wert P1 itoa( results[0], Buffer, 10 ); // Berechne Wert //Auswahl Schrift ks0108fillrect(29, 20, 20, 8, WHITE); überschreibe Wert ks0108gotoxy(31,20); // Zeile 3 Wert P2 itoa( results[1], Buffer, 10 ); // Berechne Wert //Auswahl Schrift ks0108fillrect(29, 30, 20, 8, WHITE); überschreibe Wert ks0108gotoxy(31,30); // Zeile 4 Wert P3 itoa( results[2], Buffer, 10 ); // Berechne Wert //Auswahl Schrift ks0108fillrect(29, 40, 20, 8, WHITE); überschreibe Wert ks0108gotoxy(31,40); // Zeile 5 Wert P4 itoa( results[3], Buffer, 10 ); // Berechne Wert //Auswahl Schrift ks0108fillrect(29, 50, 20, 8, WHITE); überschreibe Wert ks0108gotoxy(31,50); BT Analog 2 11

// Zeile 2 rechts int16_t adc1l, adc1a, adc1r1, adc1r2, adc1b; adc1=((results[0]*398)/100); // 1. Schritt if (adc1>1025) adc1=1025; // Begrenzung adc1a=adc1; // 2. Schritt adc1r2=adc1a % 10; // 3. Schritt rechts 2 adc1b=adc1a/10; // 4. Schritt adc1r1=adc1b % 10; // 5. Schritt rechts 1 adc1l=adc1b/10; // 6. Schritt links ks0108fillrect(79, 20, 11, 8, WHITE); überschreibe Wert ks0108fillrect(94, 20, 14, 8, WHITE); überschreibe Wert //Auswahl Schrift itoa( adc1l, Buffer, 10 ); // Zeile 2 Zahl 1 ks0108gotoxy(85,20); itoa( adc1r1, Buffer, 10 ); // Zeile 2 Zahl 2 ks0108gotoxy(95,20); itoa( adc1r2, Buffer, 10 ); // Zeile 2 Zahl 3 ks0108gotoxy(100,20); // Zeile 3 rechts int16_t adc2l, adc2a, adc2r1, adc2r2, adc2b; adc2=((results[1]*398)/100); // 1. Schritt if (adc2>1025) adc2=1025; // Begrenzung adc2a=adc2; // 2. Schritt adc2r2=adc2a % 10; // 3. Schritt rechts 2 adc2b=adc2a/10; // 4. Schritt adc2r1=adc2b % 10; // 5. Schritt rechts 1 adc2l=adc2b/10; // 6. Schritt links ks0108fillrect(79, 30, 11, 8, WHITE); überschreibe Wert ks0108fillrect(94, 30, 14, 8, WHITE); überschreibe Wert //Auswahl Schrift itoa( adc2l, Buffer, 10 ); // Zeile 3 Zahl 1 ks0108gotoxy(85,30); itoa( adc2r1, Buffer, 10 ); // Zeile 3 Zahl 2 ks0108gotoxy(95,30); itoa( adc2r2, Buffer, 10 ); // Zeile 3 Zahl 3 ks0108gotoxy(100,30); // Zeile 4 rechts int16_t adc3l, adc3a, adc3r1, adc3r2, adc3b; adc3=((results[2]*398)/100); // 1. Schritt BT Analog 2 12

if (adc3>1025) adc3=1025; // Begrenzung adc3a=adc3; // 2. Schritt adc3r2=adc3a % 10; // 3. Schritt rechts 2 adc3b=adc3a/10; // 4. Schritt adc3r1=adc3b % 10; // 5. Schritt rechts 1 adc3l=adc3b/10; // 6. Schritt links ks0108fillrect(79, 40, 11, 8, WHITE); überschreibe Wert ks0108fillrect(94, 40, 14, 8, WHITE); überschreibe Wert //Auswahl Schrift itoa( adc3l, Buffer, 10 ); // Zeile 2 Zahl 1 ks0108gotoxy(85,40); itoa( adc3r1, Buffer, 10 ); // Zeile 2 Zahl 2 ks0108gotoxy(95,40); itoa( adc3r2, Buffer, 10 ); // Zeile 2 Zahl 3 ks0108gotoxy(100,40); // Zeile 5 rechts int16_t adc4l, adc4a, adc4r1, adc4r2, adc4b; adc4=((results[3]*398)/100); // 1. Schritt if (adc4>1025) adc4=1025; // Begrenzung adc4a=adc4; // 2. Schritt adc4r2=adc4a % 10; // 3. Schritt rechts 2 adc4b=adc4a/10; // 4. Schritt adc4r1=adc4b % 10; // 5. Schritt rechts 1 adc4l=adc4b/10; // 6. Schritt links ks0108fillrect(79, 50, 11, 8, WHITE); überschreibe Wert ks0108fillrect(94, 50, 14, 8, WHITE); überschreibe Wert //Auswahl Schrift itoa( adc4l, Buffer, 10 ); // Zeile 2 Zahl 1 ks0108gotoxy(85,50); itoa( adc4r1, Buffer, 10 ); // Zeile 2 Zahl 2 ks0108gotoxy(95,50); itoa( adc4r2, Buffer, 10 ); // Zeile 2 Zahl 3 ks0108gotoxy(100,50); _delay_ms(20); BT Analog 2 13

So könnte das Ergebnis aussehen Anzeige von links nach rechts Angabe des analogen Kanals ( P1 bis P4 ) Werte das PCF 8591 Angabe der U1 bis U4 Umgerechnete Spannungen U1 bis U4 (Es sind nur 2 Potis angeschlossen) Einige Teile des Textes wurden zur besseren Übersicht farblich gestaltet. Die Nutzung erfolgt auf eigenes Risiko. Ich wünsche viel Spaß beim Bauen und programmieren Achim myroboter@web.de BT Analog 2 14