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.