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!
Dann hättest du die Umwandlungsroutinen vielleicht anhängen sollen. Außerdem gibts keine Main in dem angehängten file...
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
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.