mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2c EEPROM


Autor: hubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen

kann mir einer sagen was ich falsch mache ich kriege vom EEPROM immer 
den wert FF zurück. Controller benutze ich den Mega 163 Compailer 
CodeVision. EEPORM ein 24C65 von Microchip.

while (1)
      {          char i,x,y;
      y=0xaa;
      i=10;
      schreiben(i,y);
      x=lesen(i);
      printf("%4x",x);
      delay_ms(2000);
      };
}
int lesen(char adresse)

{char data;
i2c_start();
i2c_write(EEPROM_Bauteil);
i2c_write(adresse);
i2c_start();
i2c_write(EEPROM_Bauteil | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

void schreiben(char adresse,char data)
{
i2c_start();
i2c_write(EEPROM_Bauteil);
i2c_write(adresse);
i2c_write(data);
i2c_stop();
delay_ms(10);
printf("%4x",data);
}


hoffe jemand kann mir helfen

mfg

Rolf

Autor: hubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ich hoffe noch immer auf eine Antwort von euch. Denn ich bin immer noch 
nicht weiter gekommen.
Ist ein unbeschriebenes EEPROM (leer) gefüllt mit 0xff ?

danke für eure Antworten.

mfg

Rolf

Autor: Andreas H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen!

Leider kann ich Dir auch nicht weiter helfen, da ich erstens noch nie 
was mit i2c gemacht habe (wird aber wohl noch kommen demnächst), und 
mich außerdem mit C nicht auskenne... zu Deiner letzten Frage 
allerdings: Ein unbeschriebenes EEprom hat, soviel ich weiß, alle Werte 
auf 0xFF.

ciao,
  Andi

Autor: hubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Andreas
damit ist der Fehler sicherlich schon auf das schreiben eingeschränkt 
und ich bin somit einen schritt weiter als vorher danke.
mfg

Rolf

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rolf,

Das 24C65 braucht drei Bytes zur Adressierung: 1. IIC-Adresse, 
2.High-Adresse, 3. Low-Adresse. Bitte passe Deine Routinen entsprechend 
an und probiere es aus.
Noch etwas: kontrolliere, ob die A0-A2 Pins am EEPROM auch verdrahtet 
sind und die richtige IIC-Bus-Adresse verwendet wird.

Ich bin immer wieder erstaunt, welch konstruktive Vorschläge Leute 
machen können, die von nichts 'ne Ahnung haben.

Viel Erfolg Michael

Autor: Andreas H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael:
Hat hier irgendjemand nen "Vorschlag" gemacht??? Bleib mal aufm Teppich 
und greife bitte keine anderen Leute an, die nur versuchen, zu helfen...

Autor: Sven Schnelle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Kannst du mal die i2c_write Funktion(und Subfunktionen) posten ?

Bye

 Sven

Autor: hubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
@Michael Danke für deine Hilfe mit den drei Adressen hat es nun 
geklappt.
Übrigens wahr ich auch für die Antwort von Andreas dankbar denn sonnst 
hat sich ja keiner gemeldet.
Ich hätte da noch eine weitere Frage, wie sind die Speicheradressen 
aufgeteilt.

@Sven wie oben geschrieben arbeite ich mit CodeVision. Diese Funktionen 
hab nicht ich geschrieben sondern werden vom Programm zur Verfügung 
gestellt. Konnte die Funktionen in den Lib leider nicht finden.

mfg

Rolf

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rolf,

bitte sieh Dir das Datenblatt zum 24C65 an. Ich empfehle Dir für dieses 
EEPROM die IIC-Bus-Adresse 0xA8. Dazu sind die Pins 1+2 mit 0V und Pin 3 
mit Vcc zu verbinden.

Die Adressierung sieht dann so aus:
i2c_write(0xA8);
i2c_write(adr/256);
i2c_write(adr%256);

Die Warteschleife delay_ms(10), wie sie von CodeVision als Beispiel 
gezeigt wird, ist sehr schlichte Programmierung. Da die heutigen EEPROMs 
sich in der Regel viel schneller programmieren lassen ist es besser, das 
EEPROM vor der Programmierung von Byte/Page zu testen, ob es sich 
ansprechen läßt. Falls nicht, muß gewartet werden, bis es bereit ist. 
Diese Warteschleife sollte nach 100 Versuchen abbrechen (timeout), damit 
der Prozessor nicht hängen bleibt, wenn das EEPROM nicht 
antwortet/vorhanden ist.

Gewarnt sei an dieser Stelle vor EEPROMs 24C02/04/08, falls noch andere 
IIC-Bus ICs den Adressraum 0xA0 belegen (z.B. Uhr PCF8583). Einige 
Hersteller beachten die A0-A2 Pins nicht, sodaß eines dieser Teile den 
gesamten Adressraum 0xAX blockiert (Microchip, Infineon). Atmel, ST und 
Rohm Teile funktionieren ordentlich. Dies nur nebenbei.

Gruß Michael

Autor: hubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Michael,
ich bin froh für deine tipps so bleiben mir Probleme mit blockierten 
Adressbereichen erspart. Ich brauche wirklich noch einen RTC. Doch ich 
habe auf dem Datenblatt nachgesehen zum glück ist er nicht im ax bereich 
sondern im dx, aber auch dieser blockiert den ganzen dx bereich. Doch 
für meine Anwendung reicht es.
mfg
Rolf

Autor: Keiler Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich habe ein Problem, ich soll den Baustein TDA9160 von Philips
ausprogrammieren. Doch ich hab keine Ahnung davon, wie ich das schaff.
Es sollte so ähnlich sein, wie der Dateianhang der bei meiner Nachricht
dabei ist.

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.