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
moin moin, und...mal ins Datenschied gesehen???? Read Adr + 80H = Write Adr , wo ist das geblieben??? Wie gehts den V3021? Mit Gruß Pieter
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.