Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei DS1305 mit 8051 in Assembler.


von Stephan H. (stephan-)


Lesenswert?

Hallo Leute,

ich brauch mal Hilfe da ich seit Tagen den Fehler suche und nicht
finde.
Eine Dallas DS-1305 mit 3 Wire Interface am 8051.
Es gibt 2 Routinen. RTC lesn und schreiben.
Bei Lesen wird die Adresse der RTC im Akku übergeben und der
Wert von der RTC landet im Akku.
Beim Schreiben wird die Adresse auch im Akku übergeben und der
zu schreibende Wert in R0.
Das Problem: ich schreibe zB. 44h auf Adresse XY und lese von dort
21h.
Um es schwieriger zu machen schreibe ich 66h und lese 31h.
Wenn ich 88h schreibe, lese ich 84h.

Ich habe keine Idee !!!
Es läuft zwar eine ISR im Hintergrund für das LCD aber die kann ich
auch lahm legen.
Trotzdem keine Änderung.

Wer hat Ideen ??? Die RTC ist definitiv i.O.

Der Code:
CSRTC ist das Chip Select für die RTC, SCLK ist der Takt und SDATA ist
Din und Dout zusammen.
Beim Schreiben gibts das Flag "Adresse" welches anzeigt das die
Adresse geschrieben wurde und danach
nur noch Daten kommen.
SCLK und SDATA gehen "normal" an weitere IC´s die aber zur
Fehlersuche bereits deaktiviert sind.

Danke fürs Erste.

Stephan

;*********************************************************************** 
*****
; RTC lesen, RTC Adresse wird in Accu übergeben, Ergebnis in Akku
;*********************************************************************** 
*****

RTC_read:    CLR  sclk
      CLR  sdata
      SETB  CSRTC          ; RTC an
    ; Adressen schreiben
      MOV  R4,#8          ; 8 Bits schreiben
rotiere1:    CLR  sclk          ; SCLK low
      RRC  A          ; Akkubit nach Carry
      MOV  SDATA,C          ; Carry nach Port
      SETB  SCLK          ; SCLK high
      DJNZ  R4,rotiere1  ; alles 8 Mal
      MOV  A,#0
      SETB  SDATA    ; SDATA als Eingang schalten
    ; Daten lesen
      MOV  R4,#8    ; 8 Bits lesen rotiere2:    CLR  SCLK          ; 
SCLK low
      MOV  C,SDATA    ; Port nach Carry
      RRC  A    ; Carry nach Akku
      SETB  SCLK    ; SCLK high
      DJNZ  R4,rotiere2  ; alles 8 Mal
      CLR  CSRTC    ; RTC aus
      RET


;*********************************************************************** 
*****
; RTC schreiben, RTC Adresse wird in Accu übergeben, Wert in R0
;*********************************************************************** 
*****

RTC_schreiben:    CLR  sclk    ; SCLK low
      SETB  adresse    ; Hilfsflag Adresse
      SETB  CSRTC    ; RTC an
    ; Adresse / Daten schreiben
wert:      MOV  R4,#8    ; 8 Bits schreiben
rotiere3:    CLR  SCLK    ; SCLK low
      RRC  A    ; Akku nach Carry
      MOV  SDATA,C    ; Carry nach Port
      SETB  SCLK    ; SCLK Impuls
      DJNZ  R4,rotiere3  ; alles 8 Mal
      JNB  adresse,raus  ; Daten schon rus ??
      MOV  A,R0    ; Wert nach Akku
      CLR  adresse
      JMP  wert    ; schreiben ( Wert )
raus:      CLR  CSRTC    ; RTC aus
      RET

von Pieter (Gast)


Lesenswert?

moin moin,

und...mal ins Datenschied gesehen????
Read Adr + 80H = Write Adr , wo ist das geblieben???

Wie gehts den V3021?

Mit Gruß
Pieter

von Stephan H. (stephan-)


Lesenswert?

Moin Pieter,

sind gut angekommen, aber für diesen Fall leider nicht brauchbar.
Im 3 Wire Modus ist CS immer mit CLK gekoppelt, bzw. an GND.
Somit bräuchte ich noch eine weitere Leitung. Kann noch nicht sagen ob
ich noch eine übrig habe. Aber sonst gehen die. Habe sie mal an den ED2
rangebaumelt. Super der Adapter, Danke.

zur Routine: die Adresse wird im Akku übergeben. entweder 0h oder 80h.
02h oder 82h. usw.

Uraub ist doch immer zu kurz. LAß es langsam angehen.
So denn, machs gut.

Stephan

von Pieter (Gast)


Lesenswert?

Hi Stephan,


mal verglichen mit:

App Note 502: Interfacing SPI Real-Time Clocks (RTCs) with a
Microcontroller - DS1305

mal den UsewrRAM mit definierten Werten beschrieben, ob was von da
zurückkommt? Phasenlage bei SPI?

Mit Gruß
Pieter

von Stephan H. (stephan-)


Lesenswert?

Hallo Pieter,

User RAM teste ich noch mal. Müßte aber eigentlich das gleiche Ergebnis
bringen.

Phasenlage : Eintakten mit rising Edge und lesen bei fallinge Edge.
Das letzte geschriebene Bit ist das erste gelesene. Clock macht nach
schreiben keinen zusätzlichen Takt, sondern geht wieder nach low und
dann wird das erste Bit schon gelesen.

Ich melde mich.

Danke

von Pieter (Gast)


Lesenswert?

Hi Stephan,

habe grade meinen 2. NetzteilSlave in Betrieb genommen. Die Werte
werden per Optokoppler gesendet. Beim 2. Slave musste ich einen R gegen
5P setzen, sonst keine richtige Übertragung. Der Eingangsstrom des 8051
reichte nicht aus. Bei einem anderen Optokoppler gings auch ohne. Nun
noch die Grafik-LCD ran und den T6963 proggen.

Zieh mal den Daten Pin hoch.

Mit Gruß
Pieter

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.