erstellt 03.03.2014
PC Logger
Mit dem Datenlogger möchte ich Spannungsverläufe zum Beispiel beim Akku laden aufzeichnen.
Es wird also beim Atmega ein Analogeingang benutzt um Spannungen zu messen.
Die gemessenen Spannungen sollen zum einen im EEprom zu späteren Verwendung abgespeichert werden, und aber auch über Funk zum Pc gesandt werden .
Außerdem sollen vom PC aus gewisse Einstellungen getätigt werden , wie die Messfrequenz ändern oder das EEprom abrufen usw.
Die Hauptarbeit soll ein Atmega 8 verrichten, der zuerst mit einer Programmierschnittstelle ausgerüstet wird.
Zum Anfang der Seite
Programmierschnittstelle
Um Software in den Atmega zu hinterlegen benötigen wir eine Schnittstelle die uns die Verbindung zwischen PC und Atmega ermöglicht.
Dies ist je nach Programmiersoftware und PC ( Tablett, Laptop, usw.) der Serielle Anschluß COM  an der Seite des PC's, oder heute meist der USB Anschluß.
Auf Seite des Atmega ist es der sogenannte SPI Anschluss.

Zum Anfang der Seite
Led anschließen
Um zu erkennen ob der Atmega überhaupt eine Reaktion hat nach dem das erste Programm an den Atmega übermittelt wurde, schließen wir noch eine Leuchtdiode ( Rot )
mit Vorwiderstand an um ein Optisches Ergebnis zu erfahren.
Der Vorwiderstand berechnet sich folgendermaßen:
Laut Datenblatt benötigt die Rote Led eine Spannung von ca. 2,2 Volt, zur Verfügung stehen aber 5 Volt Betriebsspannung, also muss die Differenz von 2,8 Volt am Vorwiderstand abfallen.
Außerdem verträgt die Led einen Strom von maximal 20 mA.
Also berechnen wir nach dem Ohmschen Gesetz
R= U/I  ( Widerstand = Spannung / Strom)
2,8 Volt / 0,02 A = 140 Ohm
Es wird also der nächst höhere Wert der mir zu Verfügung steht eingesetzt , also  220 Ohm, somit kann die Led auf keinen Fall überlastet werden.

Nun kommen wir zum ersten Programm was eigentlich nichts anderes macht als eine Rote Leuchtdiode blinken lässt.
Das ist aber nur ein erster Test um zu sehen ob die Programmierschnittstelle und der Atmega inklusiver die Datenübertragung ihren Dienst tuen.
Programmcode Beschreibung
$regfile "m8def.dat"       Definiert den Atmega als Atmega 8
$crystal = 1000000   Gibt die Quarzfrequenz an in Herz
$hwstack = 32        Default use 32 Hardware reservierte Speicher
$swstack = 10      Default Software resvierter Speicher
$regfile"m8def.dat"
Ddrb.0 = 1    Portb.0 als Ausgang für Rote Betriebsled
Do
Waitms 500
Portb.0 = 1                                                                                                          Rote Betriebsled an
Waitms 500
Portb.0 = 0                                                                                                          Rote Betriebsled aus
Loop

Zum Anfang der Seite 
Systemtakt erhöhen
Um Daten über eine Funkverbindung auszugeben, wird der interne UART des Atmega verwendet, das ist quasi ein Art Modem mit einer Sende ( TXD)
und einer Empfangsleitung (RXD), diese Schnittstelle benötigt aber eine bestimmte Arbeitsfrequenz , die wiederum von Systemtakt des Atmega abgeleitet wird.
Dazu ist die aktuell benutzte Taktfrequenz des Atmega aber nicht sehr günstig so das die Frequenz durch einen externen Quarz von Standard 1 MHz auf 8 MHz erhöht wird ,
dadurch bleibt  die Frequenz auch relativ Temperatur stabil.
Der Quarz benötigt zusätzlich noch zwei  22 Pico Kondensatoren an Pin 9 und 10 .

Damit der Quarz auch aktiviert wird muss es dem Atmega über sogenannte Fuse Bits mitgeteilt werden, dazu ermächtige ich mich dem Programm MyAVR
und speichere folgende im Bild dargestellten Daten im Atmega ab.
Zum Anfang der Seite
Außerdem muss dem Programm auch mitgeteilt werden das sich der Systemtakt erhöht hat ,das geschieht durch ändern der Anweisung
$crystal = 1000000
auf
$crystal = 8000000
Zum Anfang der Seite
Schwingt mein Quarz ?
Am einfachsten , ich lass den Atmega mit seinen Standardeinstellungen laufen, das wäre beim Atmega 8 z.Beispiel  1 MHz.
Das kleine zuvor geschriebene Programm lässt die Rote Led mit ca. 1 Herz blinken.
Dann erst aktiviere ich den externen Quarz in dem ich die Fuse Bits einstelle.
Habe ich beispielsweise ein 8 MHz Quarz angeschlossen , sollte ab dann die Led mit 8 facher Geschwindigkeit blinken.
Damit ist sichergestellt das der Atmega auch den Quarz erkannt hat und diese auch schwingt.
Anschließend ändere ich die $Cristal Anweisung im Programm  von $crystal = 1000000 ( Standardwert- muss nicht zwingend angegeben sein) auf $crystal = 8000000
Danach sollte die Led wieder im Sekundentakt leuchten.
Zum Anfang der Seite
Analogeingang
Kommen wir zum Analogeingang , an diesem Eingang wird die Messspannung angelegt dessen Höhe dann später kontinuierlich mit geschrieben und abgespeichert wird.
Da der Atmega an allen seinen Pins nur eine Eingangsspannung von maximal 5 Volt verträgt  , wird die zu messende Spannung durch einen Spannungsteiler bestehend aus Widerstand R4 und R5 heruntergeteilt.
So kann man in diesem Fall ohne Probleme bis ca. 22 Volt messen.
Die Analogeingänge ADC0 bis ADC3 am Atmega haben einen eigene Spannungsversorgung deshalb wird noch der Anschluss AVCC mit Plus 5 Volt verbunden, wobei die Analogeingänge ADC4 und ADC5 ihre
Betriebsspannung mit über den Betriebsspannungseingang Vcc des Atmega versorgt werden.
Beim Atmega 8 gibt es 6 Analoge Eingänge, davon haben zwei Eingänge eine 8 Bit Auflösung( ADC4 und ADC5) , die restlichen Eingänge haben wahlweise 8 oder 10 Bit Auflösung.
Wir benutzen den Eingang ADC0 an Pin 23 und wählen eine 10 Bit Auflösung.
Somit haben wir bei max. 5 Volt am Analogeingang eine Auflösung von 1024 Werte , sind dann gleich 4,8 mVolt Auflösung
das sind bei einer Teilung durch die Spannungsteiler Widerstände eine Auflösung von ca. 22 mV.
Um den Eingang ADC0 zu konfigurieren und dazugehörige Einstellungen gibt es zwei Register, zum einen das Register ADMUX und zum anderen das ADCSRA Register.
Der Analogwert wird in zwei 8 Bit Register ADCH und ADCL gespeichert, und über ein Pseudo Register ADCD angesprochen.
In der folgenden Tabelle erkennt man die Bedeutungen der einzelnen zum Register gehörenden Bit's.
ADMUX
REFS1 REFS0 ADLAR -------- MUX3 MUX2 MUX1 MUX0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Bedeutung
1 1  




interne Referenzspannung von 2,56 Volt wird verwendet
0 1





Externe Referenzspannung an Anschluss AREF ( max. Betriebsspannung)
1 0





Ohne Funktion


1




8 Bit Auflösung


0




10 Bit Auflösung




0 0 0 Auswahl des ADC 0  Eingang




0 0 0 1 ADC 1




0 0 1 0 ADC 2




0 0 1 1 ADC 3




0 1 0 0 ADC 4




0 1 0 1 ADC 5




0 1 1 0 ADC 6




0 1 1 1 ADC 7
ADCSRA
ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Bedeutung
1






ADC Konverter einschalten Standard ist 0

1





Konvertierung starten


1




Freilauf



1



Interrupt Flag setzen




1


Interrupt Freigabe





0 0 0 Teilerfaktor 2





0 0 1 Teilerfaktor 2





0 1 0 Teilerfaktor 4





0 1 1 Teilerfaktor 8





1 0 0 Teilerfaktor 16





1 0 1 Teilerfraktor 32





1 1 0 Teilerfaktor 64





1 1 1 Teilerfaktor 128
Zum Anfang der Seite

Programmcode Beschreibung
Admux = &B11100000 Konfiguration Analogeingang
Dim Volt As Single Konfiguration Analogeingang
Adcsra = &B11100110 Konfiguration Analogeingang
Ddrc = &B00000000 Konfiguration Analogeingang




Volt = Adcd * 0.00082041


Print Volt;"Volt" Konfiguration Analogeingang

Uhrzeit
Um aber nicht nur die Spannungsdaten sondern auch noch die Uhrzeit ab zu speichern , sorgen wir noch dafür das die Uhrezeit eingegben werden kann ,
die Uhr dann aber selbständig weiterläuft solange die Schaltung mit Spannung versorgt wird.
Also erzeugen wir erst einmal einen Sekundentakt mittels Timer
Dim Takt As Long Variable für Uhrzeit
Dim Sekunde As Byte Variable für Uhrzeit
Dim Minute As Byte Variable für Uhrzeit
Dim Stunde As Byte Variable für Uhrzeit
On Timer1 Zeitbasis Legt fest das in Routine "Zeitbasis" gesprungen werden soll, wenn Timer1 einen Überlauf meldet
Tccr1a = &B00000000   Konfiguration des Timers
Tccr1b = &B00000100   Konfiguration des Timers
Timsk = &B00000100       Schaltet den Überlauf Interrupt ein
Sreg = &B10000000  Interrupt Freigabe Global
Timer1 = 34285
do
If Sekunde > 59 Then Incr Minute
If Sekunde > 59 Then Sekunde = 0
If Minute > 59 Then Incr Stunde
If Minute > 59 Then Minute = 0
If Stunde > 24 Then Stunde = 0
loop
Zeitbasis: Routine für Timer 1
Timer1 = 34285
Incr Sekunde
Toggle Portb.0      Rote Led
Return
Zum Anfang der Seite
Funkmodul anschließen !

Benutzt wird ein Funkmodul vom Typ RF7020 der Firma Oktamex,
davon werden allerdings 2 Stück benötigt, ein Sender und ein Empfänger.
Dieses Modul hat 7 Anschlüsse, davon werden aber nur 4 Stück benötigt.
Plus 5 Volt- GND- RXD und TXD.
Zum Anfang der Seite
Benutzt wird ein Funkmodul vom Typ RF7020 der Firma Oktamex,
davon werden allerdings 2 Stück benötigt, ein Sender und ein Empfänger.
Dieses Modul hat 7 Anschlüsse, davon werden aber nur 4 Stück benötigt.
Plus 5 Volt- GND- RXD und TXD.

Des weitern wird ein passender USB Adapter benötigt
um das Funkmodul mit dem PC zu verbinden.

Damit das Funkmodul auch vom PC erkannt wird, benötigt es einen Treiber zu bekommen bei Silicon Labs
USB to UART Bridge Treiber CP210x
Zum Anfang der Seite
Das ursprüngliche Programm wird etwas abgeändert und zwar wurde ja schon die Crystal Anweisung von 1 MHz auf 8 MHz abgeändert,
hinzu kommt noch die Anweisung
$baud = 9600
und
Print "Hallo Welt" die Anweisung Baud bewirkt das die interne UART Schnittstelle aktiviert wird und PIN 2 und 3 nun zur Datenübertragung bereit ist.
Die Zahl 9600 gibt die Übertragungsgeschwindigkeit an.
Und die Anweisung " Hallo Welt" veranlasst den Controller über den TXD Leitung ( Pin3) den Text "Hallo Welt " zum Funkmodul zu senden !
Um auch eine Optische Kontrolle beim aussenden der Daten zu haben, wird noch je eine Grüne und eine blaue Led in die Schaltung eingelötet,
die soll dann immer wenn Daten vom Atmega verschickt oder empfangen  werden kurz aufleuchten.


Programmcode Beschreibung
$regfile "m8def.dat"       Definiert den Atmega als Atmega 8
$crystal = 8000000   Gibt die Quarzfrequenz an in Herz
$hwstack = 32        Default use 32 Hardware reservierte Speicher
$swstack = 10      Default Software resvierter 
$regfile"m8def.dat"
$baud = 9600
Ddrb.0 = 1    Portb.0 als Ausgang für Rote Betriebsled
Do
Waitms 500
Print "Hallo Welt" 
Portb.0 = 1                                                                                                          Rote Betriebsled an
Waitms 500
Portb.0 = 0                                                                                                          Rote Betriebsled aus
Loop
Zum Anfang der Seite
Terminal Programm
Nun kann die Funkverbindung zum PC erfolgen:
Damit auch vom Terminal Programm aus Daten an den Atmega verschickt werden können wird das Programm noch wie folgt abgeändert:
Programmcode Beschreibung
$regfile "m8def.dat" Definiert den Atmega als Atmega 8
$crystal = 8000000 Gibt die Quarzfrequenz an in Herz
$hwstack = 32            Default use 32 Hardware reservierte Speicher
$swstack = 10             Default Software resvierter Spaeicher
$regfile "m8def.dat"
$baud = 9600
Enable Interrupts UART
On Urxc Datenempfang UART
Enable Urxc UART
Dim X As String * 6 UART
Ddrb.0 = 1 Ausgang für Rote Betriebsled
Ddrb.2 = 1       Ausgang für Grüne Led
Ddrb.1 = 1    Ausgang für Blaue Led
Dim Faktor As Integer
Faktor = 1
Do Programmschleife
If X = "1" Then Faktor = 1
If X = "2" Then Faktor = 5
If X = "3" Then Faktor = 10
Wait Faktor
Gosub Senden
Portb.0 = 1 
Waitms 500
Portb.0 = 0
Loop
Datenempfang: Daten Empfangen
Portb.1 = 1
X = Chr(udr)
Waitms 20
Portb.1 = 0
Return
Senden: Daten versenden
Portb.2 = 1
Waitms 100
Portb.2 = 0
Print "Hallo Welt"
Wait 1   
Return
Mit Print "Hallo Welt" oder Print "123" kann ohne weiters Text oder Zahlen an den PC Terminal übertragen werden.
Umgekehrt ist es aber nicht so, wenn ich vom PC aus einen Text , z. B  die Zahl 1  übertrage kommt am Atmega das Dezimalzeichen 49 an  und bei 2 die Dezimalzahl 50.
Damit auch am Atmega eine EINS ankommt muss das Zeichen mit folgender Anweisung ausgewertet werden X=chr (Variable).
Außerdem kann immer nur ein Zeichen empfangen werden, sollte man also Text mit dem Atmega ampfangen wollen, muss Buchstabe für Buchstabe empfangen werden
und diese dann zusammengesetzt werden.
Die Grüne Led sollte als Zeichen für eine Datenübetragung vom Atmega zum Funkmodul ca. jede Sekunde einmal kurz aufleuchten.
Außerdem sollte im Terminalprogramm jetzt der Text "Hallo Welt "ca. jede Sekunde einmal geschrieben werden.
Wird jetzt die Taste 2 im Terminal Programm mit anschließenden Return gedrückt , sollte sich die Pause zwischen den einzelnen Textübertragungen ungefähr auf 3 Sekunden verlängern, und bei
drücken der Taste 3 mit anschließenden Return sollte die Pause zwischen den Texten auf ungefähr 10 Sekunden ansteigen .
Mit Taste 1 und anschließenden Return kann wieder zurückgeschaltet werden auf ca. eine Sekunde Pause.
Zum Anfang der Seite
Funktion
  • Zum Betrieb der Schaltung wird eine Spannung von 5 Volt benötigt.
  • Nach anlegen der Betriebsspannung werden aus dem EEprom evtl abgespeicherte Variable  abgerufen.
  • Dann wird über das Terminal die Uhrzeit und das Datum der letzten Änderung angezeigt.
  • Es wird der gemessene Wert 0 bis 28 Volt über Funk ans Terminal ausgegeben - Grüne Led zeigt dieses an.






Mit einen passenden Terminalprogramm können so die Daten mitgelesen , und je nach Terminalprogramm sogar in einer Datei
abgespeichert werden.
Das Senden über Funk wird mit der grünen Led angezeigt.
Der Messintervall wird von der letzten Messung übernommen, und kann über ein Terminalprogramm mit folgenden Tasten geändert werden
Taste Funktion Zeit in  Aufnahmezeit
1 Logintervall 1 Sekunden 54 Minuten
2
2 Sekunden 1,8 Stunden
3
3 Sekunden 2,7 Stunden
4
4 Sekunden
5
5 Sekunden
6
6 Sekunden
7
7 Sekunden
8
8 Sekunden
9
9 Sekunden
0
10 Sekunden 9 Stunden
q
1 Minute 2,2 Tage
w
2 Minute
e
3 Minute
r
4 Minute
t
5 Minute
z
6 Minute
u
7 Minute
i
8 Minute 18 Tage
Der zuletzt eingegebene Messintervall wird dauerhaft abgespeichert und steht beim nächsten
Start wieder zu Verfügung.
So können je nach Intervall Messzeiten bis zu 18 Tage erreicht werden.
Die linke Taste auf der Platine dient zum Starten der Aufzeichnung mit welcher alle Messdaten
im EEprom dauerhaft abgespeichert werden, zu erkennnen ist das Abspeichern der Daten am
flackern der weißen Led, natürlich abhängig vom Messintervall.
Ein schnelles kontinuierliches aufblitzen der weißen Led signalisiert  eine volles Eprom , der Speicher ist also voll .
Zum Anfang der Seite
Speicher
Um die aufgenommen Daten ab zu speichern benötigen wir einen nicht flüchtigen Speicher was so viel heißt , das der Speicher seine Daten auch behält wenn die
Spannungsversorgung unterbrochen wird.
Der verwendete Atmega 8-16 PU  hat laut Datenblatt außer seinen Programmspeicherplatz (Flash Speicher) auch noch einen 512 Byte EEprom Datenspeicher den man dafür nutzen könnte. 
Um aber einen größeren Speicher zu Verfügung zu haben, wird ein zusätzlicher Speicherbaustein (
24C128)
und zwei für die Kommunikation benötigte Widerstände R9 und R10 eingelötet.
Im Schaltplan (unten) erkennt man das EEprom ganz rechts.

Der Baustein 24C128 hat eine Speichergröße von 128 Kilo Byte.
Da in der Informationstechnik Kilo aber nicht gleich 1000 ist sondern 1024 bedeutet 128 Kilobyte gleich 128 mal 1024 = 131072 Bit oder geteilt durch 8 = 16384 Byte.
Zum Speichern der Uhrzeit werden 3 Bytes benötigt jeweils ein Byte für Sekunden, 1 Byte für Minuten und ein Byte für die Stunden.
Außerdem werden zum speichern der Spannungswerte noch einmal zwei Byte benötigt.
Also insgesamt werden pro Datensatz 5 Byte benötigt.
Macht also 16384 durch 5= 3276 Datensätze.
Wenn wir beispielsweise jede Minute einen Datensatz speichern kommen wir auf eine Speicherzeit von über 2 Tage.
EEprom ansprechen !
Diese Verbindung zum EEprom ist eigentlich ein Bus System , was heißen soll das bis zu 4 Bausteine parallel an diese Leitung angeschlossen werden können.
Die einzelnen Bausteine werden anhand ihrer internen vom Hersteller vorgegebener Adresse ( Slave Adresse ) und von der Anwender Adresse die individuell vorgegeben werden kann
indem einige Anschlüsse auf Minus gelegt werden identifiziert.
Device Type Identifier Bausteinadresse Hex
Vom Hersteller fest vorgegeben gibt an das es sich um ein EEprom handelt Vom Anwender vorgegeben durch Anschluss auf Minus oder Plus

Bit 7 Bit 6 Bit 5 Bit 4 Bit3 Bit 2 Bit 1 Bit 0
Slave Adresse
zum schreiben
1 0 1 0 0 0 0 0 A0





? Hardware verdrahtet an Pin2 des EEprom
0 oder 1
Hardware verdrahtet an Pin1 des EEprom
0 oder 1
Gibt an ob Leseoperation (1) oder
Schreiboperation (0) eingeleitet wird

Slave Adresse zum lesen
1
0
1
0
0
0
0
1
A1
EEprom 24C128
Pin 1 Bausteinadresse A0 Die Anschlüsse A1 und A0  stellen die  Geräteadresse her.
Ohne feste Verdrahtung sind die Pins Standardmäßig auf Null.
Pin 2 Bausteinadresse A1
Pin 3 NC Nicht belegt
Pin4 Masse GND
Pin 5 SDA ( Seriell Data)
Pin 6 SCL (Seriell Clock )
Pin 7 WP ( Write Protect) Nur wenn  der Schreibschutzeingang mit Ground
verbunden ist kann das EEprom beschrieben werden.
Pin 8 Vcc Betriebsspannung 5 Volt
Um also ins EEprom zu schreiben werden folgende Anweisungen eingeleitet:
Speichern ins EEprom
I2cstart Start Signal erzeugen Speichervorgang einleiten
I2cwbyte &HA0 Slave Adresse 1010 0000
setzt sich zusammen aus
Hersteller Kennung für EEprom
10100
und Anwender Adressierung
durch auf Masse legen der Anschlüsse  A0 und A1
und noch durch eingabe des Schreib (0)oder Lesbit(1) .
ergibt als Hexadezimalzahl A0 oder Dezmal die 160
I2cwbyte High_Adresse
Das Obere Byte der Adresse senden Der I2C Baustein  24C128 hat ein Adressbereich von 16 Byte die notwendig sind um ein Speicherbereich dieser Größe abzudecken.
Um eine Speicherbereich anhand seiner Adresse an zusprechen muss diese 16 Bit Adresse in zwei Adressbereich geteilt werden einmal
in die untere 8 Bit Adresse und einmal in die obere 8 Bit Adresse.,

I2cwbyte Low_Adresse
Das untere Byte der Adresse senden
I2cwbyte Sekunde   Daten der Variable "Sekunde" senden Daten aus der Variable "Sekunde"zum EEprom schicken
I2cstop Stop Signal senden Mit disem Signal werden die anliegendenn Daten abgespeichert, weil dies aber bei einem EEprom nicht so schnell geschieht wie bei einen Programmspeicher , sollte durch eine kleine Pause sichergestellt werden das die Speicherung auch abgeschlossen ist.
Waitms 30 Kurze Pause um Zeit zum speichen zu haben Die dafür benötigte Zeit sollte dem Datenblatt des jeweiligen EEprom entnommen werden, in der Regel ca.5 ms
Warum aber werden bei der Adressenvergabe die Adressen in Hihg und Low angegeben?

Unser EEprom Baustein hat einen Speicher von 128 Kbit , das sind 128 X 1024 = 131072 Bit, im EEprom wird eine Adresse immer einem Byte zugeordnet also 131072 durch 8 Bit = 16384
Adressen die benötigt werden.
Die Adresse muss also als Word Variable angesprochen werden (Word=16bit)= 0...65535.
Die Adresse besteht also aus 16 bit und wird ab Speicherplatz 160 abgelegt.
Somit belegt die Adresse den Speicherplatz 160 mit dem niederwertigen Byte und die Adresse 161 mit dem höherwertigen Byte..
Zeilen Nr.
Programmanweisung
123 Dim Adresse As Word At $160
124 Dim Low_adresse As Byte At $160 Overlay
125 Dim High_adresse As Byte At $161 Overlay
Wenn zuerst die Anzahl der gemessen Bits in Spannung umgerechnet werden, ergeben sich Zahlen mit mehren Stellen hinter dem Komma, die so nicht in 2 Byte untergebracht werden können.
Also wird nicht die berechnete Spannung im EEprom abgelegt sondern nur die Bits, und die werden erst nach dem auslesen aus dem Eeprom wieder in einen Spannungswert umgerechnet.
Adresse


Datenspeicher jeweils ein Byte (8Bit)
Hex 160
Adresse High 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Hex 161
Adresse Low 0
1
1
0
0
0
0
0



























Folgende Anweisungen lesen das EEprom wieder aus !
Auslesen aus EEprom
I2cstart Start Signal erzeugen
I2cwbyte &HA0 1010 0000
setzt sich zusammen aus
Hersteller Kennung für EEprom
10100
und Anwender Adressierung
durch auf Masse legen der Anschlüsse  A0 und A1
und noch durch eingabe des Schreib (0)oder Lesbit(1) .
ergibt als Hexadezimalzahl A0 oder Dezmal die 160
I2cwbyte Low_Adresse
Niederwertige Adressbereich
I2cwbyte High_Adresse
Höherwertige Adressbereich
I2cstart Das Auslesen einleiten
I2cwbyte &HA1 1010 0000
setzt sich zusammen aus
Hersteller Kennung für EEprom
10100
und Anwender Adressierung
durch auf Masse legen der Anschlüsse  A0 und A1
und noch durch eingabe des Schreib (0)oder Lesbit(1)
Der Hexadezmaler Wert A1 beinhaltet das Lesebit
I2crbyte Sekunde , Nack
I2cstop



Zum Anfang der Seite 
Technische Daten
Betriebsspannung 3 -5 Volt
Stromaufnahme bis max 35 mA ( ohne Funkmodul 13 mA)
Speicherbare Datensätze= 3276
Zum Anfang der Seite
Foto

Der Messwert ( 2 Byte groß) wird in einer Word Variable gespeichert, da aber der Datenspeicher im EEprom nur 1 Byte  groß ist muss die variable in 2 Byte aufgeteilt werden um dann als High und als Low Wert im EEprom gespeichert zu werden
Das geschieht indem die Variable aber einer bestimmten Adresse im Programmspeicher  abgelegt wird und dann ein z
Zeiger auf diese Adressen zeigt um die Variable wieder aus zu lesen.
gemessenen
ACDC
high byte
low byte
1 Volt
36
149
234
7 Volt
255
255
218
8 Volt
292
149
234

Fuer jeden gewandelten Wert bekommt man ein High- und ein Lowbyte zurueck, da man ja einen 12bit –Wandler besitzt und 12bit nun mal nicht in ein 8bit-langes Byte hineinpassen.

Software
Hier die passende Software um die Daten am PC aus zu lesen
Aktualsisiert 03.02.2019