Re: Eeprom Modul u.a. Kategorie: I²C-Bus (von André H. - 18.07.2002 11:10) | |
Als Antwort auf Eeprom Modul u.a. von Günni - 18.07.2002 10:33
| |
Hallo Günni > zunächst mal Danke für Dein neues Eeprom Modul. Auch wenn ich die neue Adressierung nicht als gut finde aber sicherlich eine Alternative ist. > Ich finde da� diese Art der Adressierung einfacher ist. Man sich mu� nur nach dem Wert der Leitungen A2,A1,A0 richten, und braucht nicht die gesamte Baustein-Adresse. Wenn ein EEProm z.B. an A2,1,0= 0.1.0 liegt, braucht man nur 0b010 oder 2 übergeben > Leider ist wieder der gleiche Fehler in der Funktion readlong(...) vorhanden wie in der Vorgängerversion. Das i2c.stop() fehlt am Ende der Funktion. > Hab ich grad' behoben, danke für den Hinweis. > Bei der Implementierung einer Realtimeclock ist mir vor kurzem noch ein merkwürdiges Verhalten aufgefallen, welches meiner Meindung ein OS Bug sein mu�. > Und zwar handelt es sich um die I2C RTC von DALLAS mit der Bezeichnung DS1307. Das Datenblatt ist hier zu finden: http://pdfserv.maxim-ic.com/arpdf/DS1307.pdf > Diese RTC hat den Vorteil, dass sie als EEprom behandelt werden kann. Die ersten 8 Bytes ( 0 - 7 ) beinhalten die Uhrzeit und ein Kontroll Register. Als ich nun versucht habe die Uhrzeit zustellen und bei Adresse 0 angefangen habe zu schreiben schien alles zu klappen. Nur die Stunde hat probleme gemacht da sie nur Werte von 0 bis 7 angenommen hat. Nach geraumer Fehlersuche ist mir aufgefallen, dass sehr wahrscheinlich die Register einfach nur um eins verschoben sind. Als ich dann versucht habe ab Adresse -1 zu schrieben und lesen hat alles wunderbar geklappt. > Jetzt hat sich bei mir die Vermutung eingeschlichen, dass die CC2 bei einem Schreib- Lesezugriff immer ab Adresse 1 beginnt obwohl man bei 0 anfangen möchte. Dadurch wäre dann das letzte Byte des Eeproms nicht ansprechbar, wenn man diesen Umstand nicht kennt. > Ich benutze natürlich das optimierte OS von Erik H. > > Hat jemand von euch auch ähnliche Erfahrungen gemacht bzw. kann diesen Fehler bestätigen? Oder habe ich doch was falsch gemacht? > Nichts desto Trotz kann ich die o.g. RTC absolut empfehlen. Einfach einen Quarz, Batterie und den I2C Bus anschlie�en und fertig ist die RTC. Die Chipadresse lautet dez 208 und ist mit dem neuen Eeprom Modul von André mit Adresse dez. 24 anzusprechen. > Das liegt sicher nicht am OS. Es liegt eher daran, da� Du mein eeprom.c2-Modul dafür benutzt. Deine RTC DS1307 benötigt ein einziges Byte zum Addressieren. Mein Modul allerdings, gibt für die EEProms(24C32 bis 24C512) ein zwei Byte Word aus. Somit wird das zweite ausgegebne Byte in Adresse 0 geschrieben. Beim Lesen wird das Byte Deiner RTC an Adresse 0 überschrieben, daraufhin der Datenzeiger von 0 auf 1 gesetzt, und beim anschlie�endem Lesen ab Adresse 1 gelesen. Wenn Du unbedingt das Modul EEProm.c2 dafür benutzen willst, kopiere die Routinen in eine neue Datei und entfernde die erste Adressierungszeile: z.B. bei Funktion write:(analog dazu bei Funktion read) function write(byte eepromaddr,int addr) returns int {byte i; i=0; eepromaddr= 160 + (eepromaddr)*2; loop { if i2c.start(eepromaddr) break; if i>=100 return 0; i=i+1; sleep 1; } i2c.write((addr & 0xFF00) shr 8); // Diese Zeile mu� entfernt oder auskommentiert werden i2c.write(addr & 0x00FF); return -1; } Etwas grundsätzliches: Fehlererscheinungen am I²C-Bus können nie am OS liegen. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: Re: Eeprom Modul u.a. (von Günni - 18.07.2002 12:47) Re: Eeprom Modul u.a. (von André H. - 18.07.2002 13:51) |