Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: AVR32 und EEPROM_Write Kategorie: Programmierung C (von Tobias - 24.06.2016 21:33)
Als Antwort auf Re: AVR32 und EEPROM_Write von U. Koerner - 15.06.2016 0:10

> > > > Hallo,
> > > >
> > > > ich habe ein kleines Problem mit dem AVR32 und der EEPROM_Write-Funktion:
> > > >
> > > > Wenn ich zwei Byte in das EEPROM überschreibt anscheinend das Zweite das Erste:
> > > >
> > > >    EEPROM_Write(0,lcd_light);
> > > >    EEPROM_Write(1,touch_beep);
> > > >
> > > > In lcd_light schreibe ich Werte von 10-90, in touch_beep 0-1. Beides sind BYTE.
> > > > Der touch_beep wird gespeichert, lcd_light nicht.
> > > >
> > > > Wenn ich den Aufruf umdrehe
> > > >
> > > >    EEPROM_Write(1,touch_beep);
> > > >    EEPROM_Write(0,lcd_light);
> > > >
> > > > wird lcd_light gespeichert und dafür touch_beep nicht.
> > > > Wenn ich je eine Zeile auskommentiere klappt das Speichern auch.
> > > >
> > > > Ist beim AVR32 in der EEPROM_Write-Funktion ein Unterschied zum MEGA128?
> > > >
> > > > MfG, Tobias
> > > >
> > > > PS: IDE 2.40 (2.31 geht aber auch nicht)
> > >
> > > Hallo Tobias,
> > > ich habe gerade das Handbuch von ATMEL für den AVR32 noch mal angeschaut.
> > > Dort gibt es kein internes EEPROM, im Gegensatz zu den Mega32 und
> > > Mega128.
> > > Es befindet sich ein 64kByte-EEPROM auf der AVR32-Unit, jedoch ist das über
> > > den I2C-Bus mit der AVR32 verbunden.
> > > Ich denke da sind die Angaben im C-Control-Pro Handbuch irreführend.
> > >
> > > Mehr fällt mir auch nicht ein
> > > MfG
> > > U.K.
> > >
> >
> > Hallo U.K.,
> >
> > danke für Deine Mühe... Das Problem hat sich wie folgt gelöst:
> >
> > Ich bin davon ausgegangen, dass man das EEPROM auf der AVR32-Unit auch mit den
> > EEPROM_Write und _Read-Befehlen ansprechen kann. Und... das funktioniert auch so!
> >
> > Folgenden Fehler habe ich gemacht:
> > Ich habe eine Uhrenbaustein auf I²C-Adresse A0 am Bus. Leider habe ich nur in der
> > gesamten Hilfe keinen Hinweis auf die Adresse des EEPROMs gefunden. Lediglich in
> > einem Beispielprogramm zum I²C-Bus habe ich erkennen können was die EEPROM-Adresse
> > ist. Hier hatte ich erst im Online-Manual geschaut, wo die Adresse 0x50 angegeben ist
> > (siehe LINK).
> >
> > Erst der Blick in die Hilfe in der IDE selbst hat mich auf die richtige Fährte gebracht,
> > denn da steht im selben Beispiel die Adresse A0.
> >
> > Also Uhrenbaustein auf eine andere Adresse gesetzt und schon läuft es (auch mit dem
> > direkten Ansprechen über EEPROM_Write();
> >
> > Hier fehlt eindeutig der Hinweis in der Hilfe welche Adresse das EEPROM hat!
> >
> > MfG, Tobias
>
> Hallo Tobias,
> ich gratulier Dir zum Erfolg. Auf Deinen Post hin habe ich mir mein AVR32 Modul etwas
> genauer angeschaut. Da ist ein Serielles-EEPROM 24LC512 eingebaut,
> von Microchip,mit 64 kByte. Die Geräteadresse für Schreibzugriffe ist 0xA0, für Lesezugriffe 0xA1.
> Sehr unglüclicher Umstand, das der Uhrenbaustein die gleiche Geräteadresse hat, wie der
> EEPROM. Bitte schreib doch mal, um welchen Uhrenbaustein es sich handelt.
>
> Das Handbuch zur IDE ist da wirklich etwas schlecht aufgestellt, was die Beschreibung der
> Befehle und Syntax betrifft. Die Beispiele sind da auch nicht besonders hilfreich, zumal
> zwar die Geräteadresse von 0x50 auf 0xA0 angepasst wurde, aber für Schreiben und Lesen immer
> noch gleich ist. Kann so nicht funktionieren.
>
> Mittlerweile ist es hier im Forum auch recht ruhig geworden. Früher waren die Entwickler der
> IDE, z.B. Peter S.öfters im Forum unterwegs und konnten mit Tips weiterhelfen.
> Ich denke, das Conrad die C-Control Reihe zugunsten von Arduino& Co. langsam aussterben lässt.
> In Mannheim im Conrad-Shop gibt es nur noch Arduinos, wo vorher C-Control angeboten wurde.
> Arduinos bekommt man im Net billiger, alternativ gibt es mit AVR-Studio oder BasCom brauchbare
> IDE's und lebendige Foren, wie z.B. Microcontroller.Net.
> Möglicherweise ist es Zeit,sich neu zu orientieren.
>
> MfG
> U. Koerner
>

Hallo U. Koerner,

ich nutze den Uhrenbaustein PCF8583. Das die Adressen gleich sind passiert eher selten.
Aber durch die Wahl zweier Adressen beim PCF8583 ist das ja kein Problem.

Das die Adresse vorher auf 0x50 war rührt daher, dass diese in älteren IDE's noch in
7-Bit-Länge übergeben wurden. Die I²C-Write bzw. I²C-Read-Funktion hat dann automatisch das
achte Bit angehängt (0/1 für Lesen oder Schreiben). Das war sehr umständlich und hat bei
mir öfters für Verwirrung gesorgt. --> 0xA0 um ein Bit nach rechts geschoben ergibt genau 0x50.
Das wurde dann in einer der letzten IDEs auf 8-Bit I²C-Adresslänge geändert, wodurch aus 0x50
wieder 0xA0 wurde. Der Vorteil ist, dass man bei der 8-Bit-Adressvergabe direkt die Adressen
aus dem Datenblatt der Bausteine übernehmen kann und nicht erst noch umrechnen muss.
Die physische Adresse des Bausteins wurde also gar nicht verändert, nur die IDE. Das wurde
wohl halt in der Online-Hilfe noch nicht berücksichtigt.

Die Funktion I²C-Read addiert zu der Adresse immer automatisch eine "1" zum "Lesen" hinzu.
Dadurch kann man im gesamten Projekt immer mit einer Adresse arbeiten. Eigentlich finde ich
das gar icht schlecht gemacht.
Und wie gesagt, das Beschreiben und Auslesen des EEPROMs funktioniert ja nun auch einwandfrei mit
den angebotenen EEPROM_WRITE und _READ-Funktionen.

Diese Erkenntnisse haben mich leider viel Zeit gekostet. Allerdings ist der Lerneffekt dabei
immer um so höher ;-)

Ich hoffe es geht noch ein wenig weiter mit der C-Control, speziell mit der AVR32. Ich habe
jetzt schon soviel externe Bausteine angebunden (weitere serielle Schnittstellen, USB-Speicher,
3-Achsen Lagesensoren, Grafik-Touchpanel usw.) dass es für mich ein Haufen Arbeit wäre mal eben umzusteigen.

VG, Tobias


    Antwort schreiben


Antworten: