Hallo, ich versuche erste Schritte mit einem SPI Eeprom von Microchip (25LC1024) und einem Atmega 8 zu machen. Als Vorlage benutze ich diese Application Note: http://ww1.microchip.com/downloads/en/AppNotes/01193A.pdf Im Anhang befindet sich mein Code. Ich will am Anfang einfach eine Zahl (hier 2) ins Eeprom schreiben, die Zahl wieder zurücksenden und auf dem Display darstellen lassen. Leider funktioniert mein Programm nicht. Mit einem Oszi kann ich sehen, dass der µC sendet und auch der Clock anliegt (so wie auf den Bildern der AN). Auf der SO/MI Leitung kann ich aber nichts sinnvolles messen (hab grad leider kein Bild zur Verfügung, es kommt nur eine lange abfallende Flanke). Es wäre schön, wenn jemand den Fehler finden könnte. Herzlichen Dank! Viele Grüße Roland
Hi >SPI_MasterTransmit(0x03); // READ >SPI_MasterTransmit(0x00); // MSB Address >SPI_MasterTransmit(0x40); // LSB Address <-xxxxxxxxx >data = SPDR; Wo ist hier die Stelle, an der du das Byte ausliest? An der Stelle xxxxxxxxx muss noch ein Dummybyte gesendet werden. MfG Spess
danke für die Antwort. Ich habe jetzt noch das Dummybyte eingefügt. Es funktioniert aber dennoch nicht. >SPI_MasterTransmit(0x03); // READ >SPI_MasterTransmit(0x00); // MSB Address >SPI_MasterTransmit(0x40); // LSB Address >SPI_MasterTransmit(0x00); // Dummybyte >data = SPDR; Eigentlich lese ich das Byte doch hiermit aus oder? data = SPDR; In data müsste dann 0x02 stehen. data hat aber irgendwie immer nur den Wert 255. Außerdem wundert es mich das in der Application Note kein Dummybte gesendet wird. Laut application note sollte das Eeprom ja direkt nach der LSB Address antworten. Wobei das Senden und Empfangen bei SPI ja gleichzeitig passiert? Ich verstehe es leider noch nicht ganz.
Hi >Laut application note sollte das Eeprom ja direkt nach der LSB Address >antworten. Der EEPROM braucht aber einen Takt zum Senden. Und der wird durch das Dummybyte vom Master erzeugt. >Eigentlich lese ich das Byte doch hiermit aus oder? data = SPDR; Ja. Das darfst du aber erst machen, wenn SPIF in SPSR gesetzt ist. MfG Spess
Hi Vergiss den letzten Satz. Das ist schon in deiner SPI_MasterTransmit drin. MfG Spess
leider funktioniert es immer noch nicht. Ich bekomme hier >SPI_MasterTransmit(0x00); // Dummybyte >data = SPDR; immer den Wert 255 geliefert und nicht 2. MISO ist also quasi immer 1, hat noch jemand eine Idee?
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.