| Auteur |
Bericht |
Sir Stonehill

Geregistreerd op: 1-9-2009 Berichten: 22 Woonplaats: Londerzeel, Vlaams Brabant, Belgie
|
Geplaatst: Do 19 Aug 2010, 15:11 Onderwerp: Temperatuur meten met DS1820 |
|
|
Hoi allemaal,
Ik ben een thermostaat aan het maken en deze is bijna af, buiten mijn temperatuurmeting.
Ik programmeer in (pic)basic en gebruik 2 7-segment's als display.
Van de site van picbasic.nl heb ik dit:
| Code: |
OWRITE PORTA.0, 1, [$CC, $44] ;Zend 'Convert' opdracht (temperatuur meten)
OWRITE PORTA.0, 1, [$CC, $BE] ;Zend 'Read ScratchPad' opdracht
OREAD PORTA.0, 2, [Temperatuur] ;Lees temperatuur en plaats dit in de variabele |
Maar het enige dat ik op mijn display's krijg is 55 (van 255).
Ik heb al veel op andere fora gezocht maar geen resultaat.
Kan iemand helpen?
Sir Stonehill
|
|
| Naar boven |
|
stynus Moderator


Geregistreerd op: 16-5-2003 Berichten: 5533 Woonplaats: Lommel (België)
|
|
| Naar boven |
|
Sir Stonehill

Geregistreerd op: 1-9-2009 Berichten: 22 Woonplaats: Londerzeel, Vlaams Brabant, Belgie
|
Geplaatst: Do 19 Aug 2010, 16:46 Onderwerp: |
|
|
DALLAS
DS1820
0924C3
+078AC
Dit is wat er op staat, dus ik veronderstel dat dit geen DS18B20 is.
Sir Stonehill
|
|
| Naar boven |
|
Sir Stonehill

Geregistreerd op: 1-9-2009 Berichten: 22 Woonplaats: Londerzeel, Vlaams Brabant, Belgie
|
Geplaatst: Di 24 Aug 2010, 15:13 Onderwerp: |
|
|
Ok, door een stomme fout (die ik niet ga vertellen) krijg ik er al data uit.
Maar niet de juiste, ik krijg constant 85°C.
Wel vreemd want ik heb een simulatieprogramma en deze is toch in staat om met mijn code de juiste temp uit de Dallas te krijgen, en op mijn bordje lukt het niet.
Ik heb al vele fora afgezocht, maar geen resultaat, altijd 85.
Misschien vinden jullie nog iets dat werkt, of heb ik erover gezien.
Alle hulp is welkom!
Sir Stonehill
|
|
| Naar boven |
|
Stanley
Geregistreerd op: 5-6-2007 Berichten: 11
|
Geplaatst: Za 16 Okt 2010, 15:48 Onderwerp: |
|
|
| Heb je het al werkend?
|
|
| Naar boven |
|
vandam
Geregistreerd op: 24-10-2008 Berichten: 77 Woonplaats:
|
|
| Naar boven |
|
Stanley
Geregistreerd op: 5-6-2007 Berichten: 11
|
Geplaatst: Zo 17 Okt 2010, 9:38 Onderwerp: |
|
|
Dit alleen als je geen gebruik maakt van interups, interupts en oread / owrite werken niet goed samen. Je moet dan de 1-wire functies zelf maken.
Voorbeeldje:
| Code: |
' Initialize DS1820 and check for presence
init1820:
Low DQ ' Set the data pin low to init
DelayMS 520 ' Wait > 480us
DQ_DIR = 1 ' Release data pin (set to input for high)
DelayUS 100 ' Wait > 60us
If DQ = 1 Then
Lcdout $fe, 1, "DS1820 not present"
DelayMS 500
GoTo Start ' Try again
EndIf
DelayUS 520 ' Wait for end of presence pulse
Return
' Write "dq_command" byte to the DS1820
write1820:
For I = 1 To 8 ' 8 bits to a byte
If DQ_Command.0 = 0 Then
GoSub write0 ' Write a 0 bit
Else
GoSub write1 ' Write a 1 bit
EndIf
DQ_Command = DQ_Command >> 1 ' Shift to next bit
Next I
Return
' Write a 0 bit to the DS1820
write0:
Low DQ
DelayUS 60 ' Low for > 60us for 0
DQ_DIR = 1 ' Release data pin (set to input for high)
Return
' Write a 1 bit to the DS1820
write1:
Low DQ ' Low for < 15us for 1
DelayUS 1 ' Delay 1us
DQ_DIR = 1 ' Release data pin (set to input for high)
DelayUS 59 ' Use up rest of time slot
Return
' Read data from the DS1820
read1820:
For I = 1 To 8 ' 8 bits to a Byte
TMP = TMP >> 1 ' Shift down bits
GoSub readbit ' Get the bit to the top of dq_temp
Next I
Return
' Read a bit from the DS1820
readbit:
TMP.7 = 1 ' Preset read bit to 1
Low DQ ' Start the time slot
DelayUS 1 ' Delay 1us
DQ_DIR = 1 ' Release data pin (set to input for high)
DelayUS 1
If DQ = 0 Then
TMP.7 = 0 ' Set bit to 0
EndIf
DelayUS 60 ' Wait out rest of time slot
Return
|
|
|
| Naar boven |
|