Archiv verlassen und diese Seite im Standarddesign anzeigen : DS1820 auslesen
Bernie19
07.06.2005, 22:42
Hi!
Ich habe ne C-Control und habe vier DS1820 angeschlossen (jeweils an einen digitalen Port). Nun habe ich aber ein Problem: Wie lese ich diesen Temperatursensor aus? Hat sich da schon einer mit diesem Thema beschäftigt und könnte mir vielleicht helfen?
Viele Grüße
Bernie
Suggarman
08.06.2005, 15:01
Unter http://c-control-support.de/ gibt es Demoprogramm hierzu.
mfg
Stefan
Bernie19
08.06.2005, 15:16
*Räuspern* Die Seite habe ich auch schon durchsucht, aber ich find's da nicht. Ich seh da nur den einene Temperatursensor. Aber das ist doch kein DS1820, oder?
mfg
Bernie (dem hoffentlich geholfen werden kann ;-) )
Hi,
ich schätze, da hast Du dir was vorgenommen.
Hab gerade mal das Datenblatt überflogen.
Da gibt es ein wunderbares Kapitel über das
"1- Wire Bus System". Wahrscheinlich ist das sowas wie der SMBus
in neueren Rechnern.
Das ist schon recht komplex für eine Ansteuerung/ Auswertung
mit dem sperrigen Basic der C-Control. Die Daten
müßten erst mal vom Port "abgepollt" und dann
in Variable eingelesen werden. Umgekehrt, um den kleinen
2-Draht-Wunderchip anzusprechen, mußt Du sie wieder Serialisieren.
Im Prinzip bräuchtest Du hierfür 'ne zweite UART
Denke, die Serielle der CC wird sich hierfür nicht
mißbrauchen lassen.
Falls Du jedenfalls noch nicht so viel Erfahrung hast,
würde ich Dir eher empfehlen 'nen guten alten NTC oder PTC
zu besorgen und das Ganze mit 'nem Spannungsteiler an den
analogen Eingängen auszuprobieren.
Dazu braucht's nicht so viel Code bzw. zusätzliche
Komponenten, da die C-Control eigene A/D-Wandler hat.
Viel Glück noch,
tholan
Bernie19
08.06.2005, 15:38
Hmm. Naja ich muss es erstmal mit nem DS1820 versuchen, da ich diese Dinger nun mal habe, bzw neu gekauft habe.
Also ich fänds Klasse, wenn mir einer den Code (am besten ein Beispielprogramm) einfach mal geben könnte. (Vielleicht gibts den ja wirklich auf der Seite den Sugarman vorgeschlagen hat). Das Datenblatt vom DS1820 habe ich mir auch schon  durchgelesen doch da verstehe ich (noch) nicht allzuviel von ;-) .
Grüße
Bernie
Die Sensoren kannst du dank dem 1-Wire Bus alle an den gleichen Port anschliesen.
Dieser Assemblercode könnte ein Ansatz sein.
port            .equ $02        ; Port C 
portdir         .equ $06        ; Datenrichtungsregister 
ds18s           .equ 7          ; bit 7 
ds18smask       .equ $80 
bas_1           .equ $b7        ; erste Basic Variable => Fehlerrückgabe 
bas_2           .equ $b8        ; zweite Basic Variable => Daten Rein&Raus 
               .ORG $101 
                       
reset          sei        ;mask any intr, as they inject heavy jitter 
               bclr ds18s,port ; port low    
               bset ds18s,portdir; Port als Ausgang                
               lda  #$4b       ; 4b 75 * 10 5sec => ~750 5sec 
               jsr  delay      ; in Warteschleife springen 
               bclr ds18s,portdir; Port high Z 
               lda  #$08       ; 8 * 10 5sec => ~80 5sec 
               jsr  delay      ; warten auf PRESENCE-PULSE-DS1820 
               lda  port       
               and  #ds18smask  ; nur bit1, alle anderen maskieren 
               bne  error      ; Fehler-Flag setzen 
               lda  #$2d       ; erneut 45 * ~10 5sec => ~450 5sec 
               jsr  delay 
byte_send      lda  #$08       ; 08 Bits 
               sta  bas_1 
               bset ds18s,port 
               bset ds18s,portdir         
byte_send_b    bclr ds18s,port; Write 1 Slot ~5 5sec Port 1 Low 
               clc             ; clear Carry bit 
               ror  bas_2      ; in Carry schieben 
               bcc  write0 
               bcs  write1                                                           
write0          bclr ds18s,port 
               bra  weiter 
write1         bset ds18s,port 
weiter         lda  #$07       ; 7 * ~10 => 70 5sec delay 
               jsr  delay 
               bset ds18s,port 
               dec  bas_1 
               bne  byte_send_b 
               cli        ;vor jedem rts ein cli nicht vergessen 
               rts 
byte_read      lda  #$08       ; 08 Bits 
               sta  bas_1 
               lda  #$00 
               sta  bas_2 
byte_read_b    bset ds18s,port; first set value, then drive, not vice versa 
               bset ds18s,portdir 
               bclr ds18s,port 
               bclr ds18s,portdir 
               nop             ; 14 5sec abwarten 
               nop        ; wenn ein hochkapazitives oder langes Kabel verwendet wird, haben die Dallas Probleme    
               nop        ; von 0 auf highZ in 14us zu kommen. Event muessesn dann mehr nops eingebaut werden. 
               nop 
               nop 
               nop 
               nop 
               nop 
               brset ds18s,port,rot   ; Bit in C lesen 
rot            ror  bas_2 
               lda  #$07       ; Gesamtzykluszeit abwarten (~60 5sec) 
               jsr  delay 
               dec  bas_1 
               bne  byte_read_b 
               bset ds18s,port 
               bset ds18s,portdir 
               cli 
               rts 
delay          ldx  #$02       ; ca. 10 5sec delay 
inloop         decx             
               bne  inloop 
               deca       
               bne  delay       
               rts 
error          lda  #$ff       ; Ein Fehler => 255 speichern    
               sta  bas_1 
               cli 
               rts 
.end
Quelle: http://www.b-kainka.de/ccbsp.htm
Bernie19
08.06.2005, 18:31
Jep auf diesen Code bin ich auch schon gestoßen. Ich werd mich mal intensiver damit auseinander setzen. (Muss auch erstmal lernen wie man mit Assemblercode umgeht). Falls noch einer mehr Code/Informationen zum Auslesen des DS1820 hat, bitte melden ja?!
Schonmal herzlichen Dank,
Bernie
Bernie19
14.06.2005, 23:43
Hi, hier bin ich nochmal.
Also so richtig weitergekommen bin ich nicht. Deshalb werde ich jetzt wohl oder übel auf NTC/PTC umsteigen und meine 4 DS1820-Sensoren bei Ebay verticken.
Trotzdem vielen Dank für die Tipps,
Gruß Bernie
DIE HARD
15.06.2005, 17:35
Hallo.....
Für die M 2.0 gibt es einen IICBUS-1Wire-Bus
converter. Auf c-control-support sind Demos
zum Converter und DS1820.
ciao....
 
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.