Hallo Leute, nach mehrjähriger Abstinenz zu meine µC hat mich die lust wieder gepackt etwas zu programmieren. Leider jedoch kam ich nicht weit. Mein Problem ist, ich möchte über TWI einen DS1307 programmieren (verwendeter µC At1mega6), ich habe mir viele Beiträge zu diesem Thema angeschaut, aber leider keinen grünen weg gefunden, aber ich da programmier ihn nicht. Ich lasse mir über die USART die durchgeführten Programmteile wiedergeben, jedoch fängt er immer wieder von vorne an. Hoffe es kann mir jemand helfen. Muss ich beim DS1307 einen external Osszilator anschliesen? Meine programmierart ist nach dieser Zeit etwas umständlich geworden. LG Luni
Ohne jrtzt deine Queltexte gelesen zuu haben: Lukas schrieb: > ... jedoch fängt er immer wieder von vorne an. Das ist typischerweise der Fall, wenn ein Interrupt irgendwo aktiviert wird, aber keine ISR-Routine dafür definiert ist. Dann wird beim Auftreten des Interrupt ein Reset ausgelöst.
Hallo Klaus, danke für deine schnelle Antwort, für mein Problem habe ich eine Lösung gefunden, ich habe aus versehen zu kleine Pull Ups verwendet. Jedoch warte ich nach dem ich die Adresse geschrieben habe vergebens auf den Interrupt. Kann das sein, dass ich beim DS1307 unbedingt den Oszillator benötige? LG Lukas
> Kann das sein, dass ich beim DS1307 unbedingt den Oszillator benötige? Unwahrscheinlich. 1) Wenn du eine funktionierende UART zum Debuggen zwischen Atmega16 - PC am Laufen hast, kann es keine grobe Schnitzer bei der Taktrate geben. 2) Die Kommunikation Atmega16 - DS1307 läuft über I2C und da gibt der Atmega16 als Master die Geschwindigkeit vor. Laut Datenblatt DS1307 darf die SCL cloch frequencs min 0 bis max. 100 kHz betragen. Hier würde ich beim Debuggen ansetzen: Ist die TWI am Atmega16 so initialisiert, dass die rel. niedrige I2C Geschwindigkeit eingestellt ist?
Weil im Datenblatt etwas von einem Internen Clock im DS1307 gelesen, aber dann werd ich mal einen Oszillator anschließen und hoffen dass es nacher funktioniert! (= Weiters ist hier die TWI Init void TWI_Init (void) { DDRC &= !(1<<DD0)|(1<<DD1); // SREG |= (1<<i); TWSR = 0; TWCR |= (1 << TWEA); TWCR |= (0 << TWEN)|(1 << TWINT); TWBR = 28; TWSR = 0; // #asm ("sei") asm volatile ( "sei" ); } Danke für eure Hilfe! LG Lukas
Der Abschnitt Im Datenblatt (sorry für den Tippfehler eben) ist Connections for Standard 32.768kHz Quartz Crystal. The internal oscillator circuitry is designed for operation with a crystal having a specified load capacitance (CL) of 12.5pF. X1 is the input to the oscillator and can optionally be connected to an external 32.768kHz oscillator. The output of the internal oscillator, X2, is floated if an external oscillator is connected to X1. Mit dem "internal oscillator circuitry" ist der Antreiber für den Uhrenquarz gemeint. Der wird benötigt, damit der Uhrenquarz schwingt. Die genutzte Frequenz ist dann die Frequenz des Uhrenquarzes.
Hatte mich damals bei meiner ersten RTC auch so verlesen, dass ich meinte es wäre schon ein interner Quarz vorhanden...Quarz dran und es ging. Grüße
Oke danke vielmals, dann wird dass das Problem sein, dann werde ich den externen Quarz mal anschließen und schauen ob dies dann funktioniert. Ansonsten melde ich mich wieder. Danke nochmals für die Hilfe und schönen Tag noch! (= LG Lukas
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.