So wieder mal einer der mit seinem EEPROM nicht klar kommt. Tut mir echt leid das ich mich damit melden muß, aber ich sitze nun schon den dritten Tag an der Sache und habe das Forum schon ein paarmal durchforstet aber keinen Anhaltspunkt gefunden. Mein Problem ist das ich beim auslesen des EEPROMs immer 0xFF zurückbekomme. Und das obwohl ich vorher etwas anderes Reingeschrieben habe (oder auch nicht ??). Bei der Kontrolle des Schreibevorgangs mit dem Oszi habe ich nach jeder Ooperation ein ACK bekommen! Auch beim lesen bekomme ich jdesmal ein ACK! Die gesendeten und empfangenen Signale habe ich auch jedesmal mit dem Oszi betrachtet und es stimmt mit dem an der seriellen überein. Er sendet die richtigen Daten bekommt aber jdesmal 0xFF zurück. Auch habe ich die selben Routinen zum auslesen eines Temp- Sensors benutzt und da stimmen die gelesenen Werte. Ich habe auch schon verschiedene EEPROMs probiert jedesmal mit demselben Ergebniss. Vieleicht findet ja einer meinen Fehler oder kann mir sonst einen Tipp geben...
Du must die Schreibroutine "Schleife_write" aber auch aufrufen. Außerdem funktioniert sie nicht. Schau mal ins Datenblatt, wann genau der EEPROM mit dem Schreiben beginnt. Und danach muß man erstmal testen, wann das Schreiben wieder beendet ist. Peter
Aufgerufen habe ich sie vorher schon ;-) habe dann den Code immer umgeschrieben... Entweder ist mein Englisch zu schlecht oder ich blicke nicht was du meinst? Vileicht noch ein kleiner Tipp? Bitte Bitte :-(
Ich habe eben noch mal im Datenblatt von Atmel nachgeschaut und da stand follgendes: "At this time the EEPROM enters an internally-timed write cycle, tWR, to the nonvolatile memory." Also wenn ich das richtig verstanden habe heißt das das er keinen zusätzlichen Takt zum schreiben benötigt. Eine Pause habe ich in der Schleife ja eingebaut. Habe die Pause eben auf über 10ms hochgesetzt hat auch nichts geholfen...
"Vileicht noch ein kleiner Tipp?" Das Schreiben beginnt immer erst nach dem Stop. D.h. mit einem Repeat-Start kann man das Schreiben kanzeln. Jedes neue Start ohne vorheriges Stop ist ein Repeat-Start. Und das ACK-Polling (Start + I2C-Adresse + ACK testen) ist solange erfolglos, wie das interne Schreiben dauert. Peter
Ich habe nun in der I2C_send ein 10ms wait angefügt bevor ich teste, aber wieder nichts. Aber vileicht kannst du mir mal ein funtionierenden Code posten. Ich habe in einem alten Thread ein Link zu einer Adresse von dir gefunden der leider TOT war. Ich würde auch genre ein hard TWI benutzen, wenigstens mal sehen das es klappen könnte ;-) Vielen Dank für dein Bemühen.. Gruß Ben
Ich hab nur nen Code in C bzw. 8051-Assembler: http://home.tiscali.de/peterd/appl/soft/c51/eeprom/index.htm Auch ist der nur für die kleinen (24C02..24C16). Die Großen brauche aber nur 1 Adreßbyte mehr und dann sollte es gehen. Teste doch einfach, ob das Schreiben gemacht wird, d.h. daß nach dem Stop mindestens einmal NACK gepollt wird. Peter
Danke für den Link werde mich Morgen mal darum kümmern muß noch auf Polterabend ;-)
Also ersteinmal vielen Dank für deine Hilfe, ohne dich hätte ich noch Tage probiert. Der Fehler waren da viele.... 1. Hatte ich ein Datenblatt ST anstatt von Atmel und da sind ein paar unterschiede.. 2. Hatte ich die Sache mit dem Stoppbit nicht in meiner Routine, wied du schon bemerkt hast, also vielen Dank!!! 3. Hatte ich meine Sub für das Stoppbit flasch geschrieben und TWINT auf 0 anstatt auf 1 gezogen, zu doof zum Abschreiben! Nun funktioniert alles bestens nochmal Besten Dank für deine Hilfe!! Nun kann ich beruhigt ins Bett gehen :-)
So das sind zwei Archive die ich zum Test meines EEPROMS genutzt habe. So da ich nun eine Anfrage nach einem Funktionierenden Code erhalten habe stelle ich meine Testcode mal rein vielleicht hilft es ja einem anderen weiter! Das eine Proggie beschreibt den kompletten EEprom mit 0xff, das andere liest mehrere EEproms aus und sendet sie über UART an den Rechner. Es überprüft alle EEproms im Bereich EEPROM_start_adresse - EEPROM_end_adresse . Eine Fehler abfrage habe ich noch nicht geschrieben aber für einen kleinen Test oder zum Verständnis sollte es reichen.
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.