DS1307 - NACK anstelle von ACK

OP #967180
Hallo Zusammen,

ich bin gerade am verzweifeln. Ich habe bisher einen MEGA128 in Combi 
mit dem DS1307 betrieben. Die Software funktioniert 1A.

Da der Mega total überdimensioniert war, hab ich nun einen MEGA16 
verwendet und den Code angepasst.

Wenn ich beim Programmstart den DS1307 initialisiere, funktioniert alles 
bestens (Statusregister werden gesetzt - Taktoutput ist messbar). Wenn 
ich aus einem Interrupt kommend jedoch die Uhrzeit hineinschreiben 
möchte, erhalte ich nach Schreiben von SLA+W ein NACK anstelle des lt. 
Datenblatt zu erwartenden ACK. Was ich allerdings nicht verstehen kann, 
denn ich verwende in diesem Teil die gleichen Codeschnipsel wie bei der 
Initialisierung und auslesen der Uhrzeit.

Gleich vorn weg, ich hab bereits Google und das Forum gestresst, Vbat 
liegt mit 3,18V am DS an, die PullUp's egal ob 4,7k oder 8,2k habe ich 
auch schon getauscht, selbst den DS1307 habe ich schon gewechselt und 
bekomme immer das gleiche Ergebnis.

Was auch überhaupt nicht funktioniert, ist die stop condition, wenn ich 
die verwende, kann ich mit einer start condition den DS nicht mehr 
ansprechen. Deshalb verwende ich immer die repeat start condition.

Im Anhang habe ich mal ein paar Codeteile - ACHTUNG ASSEMBLER :-D 
beigefügt.

Hat jemand eine Idee, woran das liegen kann, wie schon oben geschrieben, 
ich verwende den Code mehrfach und in der INITIALISIERUNG funktioniert 
es wunderbar, ich kann die STATUS-Register setzen und die Zeit auslesen, 
aber wenn ich schreiben möchte, weigert sich irgend etwas.
Und auf dem MEGA128 rennt es ohne Stress.

????

Währe schön wenn da jemand noch eine Idee hätte.
Angehängte Dateien:
OP
Hallo,

danke für die schnelle Antwort.

Ja ich verwende den JTAG an Port C, aber dieser liegt an PC2-PC5 SDA und 
SDL liegen doch auch PC0 und PC2

Die CPU-Clock ist die gleiche = 16MHz.

DIE SCL-Frequ. sollte weit unter den DS1307 spezifizieten 100kHz liegen

TWBR=50
TWPS0 gesetzt

Sollte doch, wenn ich mich nicht verrechnet habe bei 38,461kHz liegen 
oder irre ich mich da, aber er liesst und schreibt ja auch, warum aber 
nicht immer?
OP
Hallo Zusammen,

hab das Problem gefunden, ich kann es mir zwar nicht erklären, aber 
vielleicht ist es ein Bug im Mega16 - keine Ahnung, denn wie schon 
mehrfach geschrieben, im Mega128 funktionierte die Software.

1. Wenn ich die TWI-Stop_condition verwende und dort TWINT, TWSTO und 
TWEN setze (lt. Datasheet des Mega16) und per "out" in TWCR schreibe, 
dann ist TWINT inactive und wird auch nicht mehr gesetzt - eine Start 
Condition bringt auch nichts. Abhilfe brachte nur ein danach eingefügtes 
löschen von TWCR bevor ich wieder neue Aktionen starten konnte.

2. Ich hab meinen kompletten Code durchsucht, aber keine Stelle gefunden 
wo folgendes geschehen könnte, aber irgendwie wird mein TWBR 
rückgesetzt. sobalt ich nun in die Routine einspringe, schreibe ich es 
zur Vorsicht neu ein und seit dem funktioniert es auch endlich wieder.

Bis denn dann, vielleicht hilft es ja irgendwann mal jemanden beim 
Suchen und erspart 2 zusätzliche graue Haare ;-) .

MfG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.