Hallo, ich möchte über das IC mit I2C eine Uhrzeit lesen / schreiben. Ich weiss aber nicht, wie ich den Slave parametrieren und auslesen kann. Ich habe einen AVR 32 Mega und arbeite mit Programmer's Notepad. Die Hardware habe ich erstellt (www.fernando-heitor.de), nur mit der Adressierung habe ich Probleme. Schonmal danke
Ziemlich allgemein gehalten, deine Frage. Ohne genaue Beschreibung, was bei dir denn nicht so recht klappt, wirst du kaum vernünftige Hilfe bekommen. Ich habe mal mit einem PCF8583 experimentiert, das Ergebnis hab' ich aber nicht mehr. Im Prinzip wird das Teil aber genauso wie ein I²C-EEPROM angesprochen, und für den hast du bei der avr-libc ja das twidemo dabei. In der Tat habe ich damals die dort vorhandenen Routinen benutzt, nur das main() war anders.
Hallo, ich habe das Programm angehangen. Die Leseadresse sollte laut Vorgabe 0xA1 sein, die Schreibadresse 0xA0. Als Rückgabewert bekomme ich aber beim i2c_start(Devclockwrite+I2C_WRITE) eine "1" zurück, also erreiche ich den Teilnehmer nicht. Ich habe SCA und SCL mit je 2,7KOhm Pull-up Widerständen versehen. Schonmal danke
Gurke wrote:
> ... oder kann das mit 7 oder 8-Bit-Adressierung zusammenhängen ?
Nein, I²C wird immer mit 7 Bits adressiert, weil Bit 0 zwischen
lesen und schreiben umschaltet.
Hallo, das Schreiben klappt jetzt mit Adresse 0xA0 (i2c_start(0xA0+I2C_WRITE);) über die angegebene Leseadresse 0xA1 erreiche ich den Teilnehmer nicht. (i2c_start(Devclockread+I2C_READ);) woran könnte das liegen ?
> Wo finde ich denn twidemo ? In der avr-libc-Doku. Online z. B. hier: http://www.nongnu.org/avr-libc/user-manual/group__twi__demo.html Wenn du ein WinAVR hast, müsste es aber auch auf deiner Platte sein.
Gurke wrote: > über die angegebene Leseadresse 0xA1 erreiche ich den Teilnehmer nicht. > (i2c_start(Devclockread+I2C_READ);) > woran könnte das liegen ? Daran, dass du Devclockread bereits zu 0xA1 definiert hast und dass du I2C_READ nicht etwa einfach noch ver-oderst (|) sondern addierst (+)? Du solltest dich wohl für eine von beiden Varianten entscheiden: das R/¬W-Bit entweder mit ins #define nehmen oder separat hinzufügen (und dann bitte mit "|").
Alles klar, kaum machst man es richtig, schon funktioniert's. Vielen Dank, echt super.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.