mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Uhr zeigt I2c Error!


Autor: Alexander Kr (bandit1200)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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???

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
#define DS1307  0x68       // Adresse des DS1307 ist 0x68

nimm mal dies:
#define DS1307  0xD0       // Adresse des DS1307 ist 0x68 * 2

Deine I2C-Lib will nicht die Adresse deines Chips sondern das 
Commandbyte haben!

Stephan

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan W. schrieb:
> Hi,
>
> #define DS1307  0x68       // Adresse des DS1307 ist 0x68
> 
>
> nimm mal dies:
>
>
> #define DS1307  0xD0       // Adresse des DS1307 ist 0x68 * 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)

Autor: Alexander Kr (bandit1200)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
habe hier nochmal den Schaltplan im Anhang..

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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???

Autor: morph1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du überhaupt pull-ups an den leitungen?

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
morph1 schrieb:
> hast du überhaupt pull-ups an den leitungen?

ja, die habe ich. Siehe Schaltplan

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alexander Kr (bandit1200)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.