mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI- EEPROM- 24c64


Autor: Benjamin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups.. ich habe nen Mega8 mit Assembler...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-(

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Link werde mich Morgen mal darum kümmern muß noch auf
Polterabend ;-)

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Benjamin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Benjamin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nun noch das zweite..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.