PDA

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 ;-) )

tholan
08.06.2005, 15:28
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

Z80
08.06.2005, 16:31
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....