Schon wieder DS 1307

OP #3674776
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!
Angehängte Dateien:
#3674792
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
OP #3674796
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren