hallo Leute. Ich arbeite getrade an einer LCD I2C uhr. Habe jetzt den Code fertig und nun sagt mir meine LCD i2c uhr i2c error! anstelle der uhrzeit. schätze , dass irgendwo an der Stelle es nicht weiter geht. if ( ret ) { //wenn bei I2C ein Fehler auftritt: Meldung Error an LCD i2c_stop(); lcd_string("I2C Error!!"); } else habe einen DS1307 an 0x68 adressiert.. wo könnte der Fehler liegen? Wer kann mir helfen???
Hi,
1 | #define DS1307 0x68 // Adresse des DS1307 ist 0x68
|
nimm mal dies:
1 | #define DS1307 0xD0 // Adresse des DS1307 ist 0x68 * 2
|
Deine I2C-Lib will nicht die Adresse deines Chips sondern das Commandbyte haben! Stephan
Stephan W. schrieb: > Hi, >
1 | > #define DS1307 0x68 // Adresse des DS1307 ist 0x68 |
2 | >
|
> > nimm mal dies: > >
1 | > #define DS1307 0xD0 // Adresse des DS1307 ist 0x68 * 2 |
2 | >
|
> > Deine I2C-Lib will nicht die Adresse deines Chips sondern das > Commandbyte haben! > > Stephan Danke Stephan. Diese Änderung führte leider nicht zum Erfolg.. Lcd Meldet immer noch I2C Error!! Icha habe einen Atmega 8 und den DS 1307 an PC4 SCA(mega) ->Pin 5(DS) PC5 SCL(mega) ->Pin 6(DS)
hmmm..... kannst du sagen wo in der Start-Funktion der Fehler kommt? Wie sieht das Statusregister aus? Also langsam fange ich an die Lib zu "hassen", alle paar Tage kommt einer und hat damit Probleme!!! Der Anschluss scheint i.O. das ist gut, das mit der Adresse haste verstanden? Stephan
Vor dem IF block muß doch irgendwas sein, was die Variable ret setzt. Dort musste mal schauen, was das Programm dort macht, bzw. welche Bedingung zum Setzen von ret führt.
Stephan W. schrieb: > Der Anschluss scheint i.O. das ist gut, das mit der Adresse haste > verstanden? Ganz verstanden habe ich es nicht, da in dem Tutorial die festgelegte Adresse 0x68 steht, aber ich habe deinen Vorschlag in mein programm kopiert, es hat sich nichts geändert. der fehler kommt direkt nach der Übertragung des Programms. Es ist doch irgendwo in der main vor der while schleife.. Ich bin relativ frisch in diesem Milleau. Jens G. schrieb: > Vor dem IF block muß doch irgendwas sein, was die Variable ret setzt. > Dort musste mal schauen, was das Programm dort macht, bzw. welche > Bedingung zum Setzen von ret führt. > > hier fängt es an und dort wird auch die Var gesetzt. unsigned char ret; i2c_init(); // I2C initialisieren lcd_init(); // LCD initialisieren lcd_clear(); ret = i2c_start(DS1307+I2C_WRITE); // set device address and write mode _delay_ms(50); // sicherheitshalber warten if ( ret ) { //wenn bei I2C ein Fehler auftritt: Meldung Error an LCD i2c_stop(); lcd_string("I2C Error!!"); ich versuche gleich nochmal den ds 1307 auszutauschen. Ich habe den verdacht, dass ich den Baustein beim Löten dringelassen hatte als sich eine leiterbahn gelöst hatte.
Alexander Kr schrieb: > Ganz verstanden habe ich es nicht, da in dem Tutorial die festgelegte > Adresse 0x68 steht, Dann schau dir mal im DB die Bilder 4 und 5 auf der Seite 12 an. Dort siehst du wie das 1. Byte aufgebaut ist, dann vergleiche das mit deinem Code. Die Adresse deines I2C-Baustein stimmt! (0x68 ist richtig, steht ja im DB) Welches Tutorial meinst du? >ret = i2c_start(DS1307+I2C_WRITE); Du musst festellen welche 1 in ret landet!!! Und WIE das Statusregister vom TWI aussieht!!! Sonst kann ich dir nicht weiter Helfen. Stephan
Stephan W. schrieb: > Welches Tutorial meinst du? http://www.mikrocontroller.net/articles/AVR_TWI diese meine ich. Stephan W. schrieb: >>ret = i2c_start(DS1307+I2C_WRITE); > Du musst festellen welche 1 in ret landet!!! > Und WIE das Statusregister vom TWI aussieht!!! ist das aus dem Datenblatt ersichtlich?? oder kann ich das irgendwie anders auslesen??? Das ist mein erstes Projekt mit dem TWI. Eine Frage ergibt sich da. Ich habe einen 0,032768 MHz Quarz am DS1307 und die frequenz in meinem Pojekt ist: /* I2C clock in Hz */ #define SCL_CLOCK 100000L müsste vllt. auf #define SCL_CLOCK 32768000???
Alexander Kr schrieb: > Ich habe einen 0,032768 MHz Quarz am DS1307 und die frequenz in meinem > Pojekt ist: > /* I2C clock in Hz */ > #define SCL_CLOCK 100000L > müsste vllt. auf #define SCL_CLOCK 32768000??? NEIN, das ist schon so richtig!!!! Alexander Kr schrieb: > ist das aus dem Datenblatt ersichtlich?? oder kann ich das irgendwie > anders auslesen??? Du hast eine Lib für den I2C, dort gibt es die Funktion: i2c_start() Diese Funktion gibt bei einem Fehler 1 zurück, dies aber an 2 Stellen. Du sollst bitte heraus bekommen an welche Stelle er die Funktion verlässt. Was für ein Quarz ist an deinem MC dran? Welchen MC benutzt du? Stephan
Stephan W. schrieb: > Was für ein Quarz ist an deinem MC dran? Welchen MC benutzt du? Ich habe einen ATmega 8 ohne externen Quarz Stephan W. schrieb: > Du hast eine Lib für den I2C, dort gibt es die Funktion: i2c_start() > Diese Funktion gibt bei einem Fehler 1 zurück, dies aber an 2 Stellen. > Du sollst bitte heraus bekommen an welche Stelle er die Funktion > verlässt. Im einzelschrittdebugger Verschwindet der gelber Zeiger komplett bei ret = i2c_start(DS1307+I2C_WRITE); Habe gerade auch den Fehler eines kapputen Bausteins ausgeschlossen.
Ich habe gerade eine Korrektur am board durchgeführt: Der DS1307 hatte keinen vernünftigen Kontakt im Sockel... Jetzt ist der Fehler weg aber die uhrzeit wird in Hyroglyphen angezeigt
Alexander Kr schrieb: > Jetzt ist der Fehler weg aber die uhrzeit wird in Hyroglyphen angezeigt Der Text TEST wird angezeigt, die UHrezit aber in Hyroglyphen :(( Habe ich Falsche timing?? Habe meinen ATMega 8 auf 4mhz eingestellt.
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.