mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1307 - NACK anstelle von ACK


Autor: Nicky C. (sylvester1975)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleicher CPU-Takt?
JTAG-Fuse? (Falls Port-C verwendet )

Autor: Nicky C. (sylvester1975)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Nicky C. (sylvester1975)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry falscher Fehler:

SDA und SDL liegen natürlich auf PC0 und PC1

Autor: Nicky C. (sylvester1975)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.