Forum: Mikrocontroller und Digitale Elektronik I2c EEPROM


von hubi (Gast)


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

von hubi (Gast)


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

von Andreas H (Gast)


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

von hubi (Gast)


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

von Michael (Gast)


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

von Andreas H (Gast)


Lesenswert?

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

von Sven Schnelle (Gast)


Lesenswert?

Hallo,

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

Bye

 Sven

von hubi (Gast)


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

von Michael (Gast)


Angehängte Dateien:

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

von hubi (Gast)


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

von Keiler Michael (Gast)


Angehängte Dateien:

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.

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
Noch kein Account? Hier anmelden.