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
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
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
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
@Michael:
Hat hier irgendjemand nen "Vorschlag" gemacht??? Bleib mal aufm Teppich
und greife bitte keine anderen Leute an, die nur versuchen, zu helfen...
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
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
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
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.