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
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
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.
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.