Forum: Compiler & IDEs Probleme mit DS1307 und Atmega 16


von Lukas (Gast)


Angehängte Dateien:

Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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.

von Lukas (Gast)


Lesenswert?

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

von Helfer (Gast)


Lesenswert?

> 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?

von Helfer (Gast)


Lesenswert?

Achso, am DS1397 selbst brauchst du den Uhrenquarz.

von Lukas (Gast)


Lesenswert?

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

von Helfer (Gast)


Lesenswert?

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.

von NopNop (Gast)


Lesenswert?

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

von Lukas (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.