Forum: Mikrocontroller und Digitale Elektronik Schon wieder DS 1307


von Simon S. (dk1si)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Ich weis es gibt schon tausende Foren Beiträge zu diesem Thema aber ich 
glaube ich bin da zu doof dafür.

Ich bekomme einfach mein DS 1307 nicht zum laufen. Ich denke es 
scheitert an der BCD umwandlung.... Habe im Anhang Code für den 1307 
angehängt.
Der Controller ist ein Atmega16

I2C Verbindung funktioniert das Einlesen des Datums auch. Nur beim 
Auslesen kommt nur schrott!
Das ist die Ausgabe meines Uarts wenn ich die Uhrzeit wie im Anhang 
setzte:

46 12 33 50 51 22 100 47


Könnte ihr mir da Bitte weiterhelfen?

Aber jetzt bitte keine Kommentare wie dein Code ist scheiße oder benutz 
die Foren Suche, die habe ich nämlich schon benutzt...

Danke!

von Werner A. (homebrew)


Lesenswert?

Dann hättest du die Umwandlungsroutinen vielleicht anhängen sollen. 
Außerdem gibts keine Main in dem angehängten file...

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

die Registeradresse im DS1307 wird nicht automatisch auf 0 
zurückgesetzt.
D.h. wenn du 8 Byte ab Adresse 0 schreibst, dann steht der interne 
Adresszähler auf 8. Wenn du nun liest ohne vorher die Adresse wieder auf 
Null zu setzen, dann bekommst du Daten ab Adresse 8!

Der richtige Weg beim lesen ist I2C_Start(Write), <Adresse>, 
I2C_RepStart(Read), <ReadByte>, <ReadByte>, ...


Sascha

von Simon S. (dk1si)


Lesenswert?

Jo shit die habe ich natürlich vergessen...


Main Brauche ich nicht da dies ein externes C-File ist....
1
//Umwandlungsroutinen
2
3
4
5
// Convert Decimal to Binary Coded Decimal (BCD)
6
char dec2bcd(char num)
7
{
8
  return ((num/10 * 16) + (num % 10));
9
}
10
11
// Convert Binary Coded Decimal (BCD) to Decimal
12
char bcd2dec(char num)
13
{
14
  return ((num/16 * 10) + (num % 16));
15
}

Main
1
int main(void)
2
{  
3
init(); //Initialisierung TWI& Einausgänge
4
5
rtc_init();
6
7
while(1)
8
   { 
9
     read_time();
10
11
      for (j=0; j<10;j++)
12
  {
13
    _delay_ms(100);
14
    _delay_ms(100);
15
  }
16
17
      write_time();
18
   }
19
20
21
22
23
}

von Simon S. (dk1si)


Lesenswert?

Da war Sascha schneller ;-)

Danke!
Das wer ich gleich mal probieren

von Simon S. (dk1si)


Lesenswert?

Vielen Dank Sascha!

Es lag wirklich nur am Auslesen des I2C Buses....

Das kommt davon wenn man aus "faulheit" das kurze I2C Protokoll 
benutzt...

Schönes WE.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.