Hallo zusammen, ich habe ein Problem mit dem Beschreiben und Lesen eines I2C-EEPROMs. Im Anhang habe ich mal den Test-Code eingefügt. Ich schreibe zuerst die ersten 10 Speicher-Adressen des EEPROMs voll und möchte sie dann wieder auslesen und auf einem LCD-Display ausgeben. Das Ausgeben auf dem Display ist ja kein Problem. Leider wird dort immer die "Schreib-Adresse" (0xA1 bzw. 161d) ausgegeben wird. Kann mir jemand einen Tipp geben wo das Problem liegt? Danke schonmal, Gruß Tobias
Ist denn der EEPROM auf Adresse 0xA0 angeschlossen, dass heißt sind die Pins A0-A2 auf Masse gelegt? Sven
Ganz sicher. Habe es auch noch einmal nachgemessen. Mit einer Software-Variante (I2C-Emulation) konnte ich erfolgreich lesen und schreiben. Nun möchte ich aber gerne die Hardware-Variante nutzen (da der 16f877a das ja bietet ;-) Gruß, Tobias
Gast
#1012027
Hi, du liesst die Adresse zum Lesen zurück. Ich glaube der PIC lösst nen Interrupt sobald die Adresse gesendet wurde un vom EEPROM mit ACK bestätigt wurde. Du musst also auf den nächsten Interrupt warten.
Hallo, ich habe es gerade noch einmal getestet.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
im oberen Teil richte ich den PIC als Master ein. Im Unteren Teil warte ich nur darauf, dass der PIC den Bus übernimmt. Er bleibt aber immer in der while-schleife (while(!SSPIF)) hängen. Warum? Wenn ich anweise den Bus zu übernehmen (mit SEN=1) müsste dann nach der Übernahme das Flag SSPIF gesetzt werden. (GIE ist 1) Kann mir da jemand helfen? Hat jemand vielleicht ein Beispiel-Programm für Hardware-i2c mit Pic in C ? Ich versuche das nun seit 2 Wochen! Das ist echt deprimierend. Danke & Gruß, Tobias
PUSH!! (Ist lange her, aber das Problem besteht noch genauso wie oben beschrieben) ;-) Danke schonmal...
Ich habe den ganzen Quatsch schon länger in PicBasic laufen... Du erwähnst extra, daß GIE=1 ist. Hast Du den SSPIE auch enabled ? Hast Du noch eine Interrupt-Service-Routine, die den SSPIF löscht (bevor die While-Schleife es merkt) ? Hast Du die SDA- und SCK-Leitung mit einem Pull-Up-Widerstand versehen ? Sieh Dir mal das Status-Bit BCLIF an. Viel mehr kann bei einer Start-Condition nicht schief gehen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.