Hopenlijk kan iemand me helpen met een, waarschijnlijk simpel, probleem. Maar ik zie de oplossing niet.
Ik heb van PIC basic.nl de uitlezing van de DS1820 geprobeerd. Uitlezen met SkipRom en 1 DS1820 verbonden is geen probleem.
Daarna het adres van de DS1820 gelezen (volgens het voorbeeld op picbasic.nl) en volgens mij een correct resultaat.
Uitkomst: CC FA 24 02 08 00 fam. 10 CRC 45
Ik heb in het totaal 4 verschillende DS 1820's (allemaal nieuw) en geven netjes allemaal een ander adres.
Wanneer ik het programma van SkipROM aanpas naar MatchROM met het adres wil het niet werken, Dan komt er -0.00 te staan in het scherm. En dat heb ik met 2 DS1820's geprobeerd.
Zou er misschien een wacht op antwoord instructie bij moeten ?
Hardware:
Breadboard
PIC 16F628, 5Vdc gevoed
DS1820 met 4k7 pullup
LCD 4x20
Het volgende programma geeft me netjes een kloppende temperatuur:
pic basic code:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : J. van der Veen *
'* Notice : Copyright (c) 2012 J. van der Veen *
'* : All Rights Reserved *
'* Date : 14-1-2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
;Voorbeeld 5
Device 16F628 ;We gebruiken een 16F628 type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE ;Alle ingangen digitaal
;Normale constanten
Symbol Convert = $44 ;DS1820 commando, de DS1820 moet de temperatuur gaan meten
Symbol Graad = 223 ;223 is de ASCII code voor het 'graad' karakter
Symbol RdScratchPad = $BE ;DS1820 commando, temperatuur van de DS1820 uitlezen
Symbol MatchROM = $55
Symbol SkipROM = $CC ;DS1820 commando, geen gebruik maken van het unieke adres
;Logische constanten
Symbol FALSE = 0
Symbol TRUE = 1
;Poortnamen
Symbol DS1820 = PORTA.0 ;Sluit de DS1820 temperatuur sensor aan op deze poort
;Variabelen declareren
;WORD
Dim Temp As Word ;Bevat de temperatuur Celsius
;BYTE
Dim Remain As Byte ;De remain waarde voor berekening temperatuur achter de komma
Dim Slope As Byte ;Bevat de 'counts per graad Celsius' waarde
Dim TempDeci As Byte ;Bevat de temperatuur waarde "achter de komma"
Dim BD1 As Byte ;Byte Dummy 1
;BIT
Dim NegTemp As Bit ;TRUE als temperatuur Celsius onder 0 oC komt
Clear ;Wis RAM geheugen
DelayMS 500 ;LCD stabilisatie
;Hoofdprogramma
Cls ;Wis LCD scherm
Print "Temp:" ;Plaats eerst deze tekst op het display
While 1 = 1
OWrite DS1820, 1, [SkipROM, Convert] ;Zend 'Calculate Temperature' opdracht
OWrite DS1820, 1, [SkipROM, RdScratchPad] ;Zend 'Read ScratchPad' opdracht
ORead DS1820, 2, [Temp.LowByte, Temp.HighByte, BD1, BD1, BD1, BD1, Remain, Slope] ',CRC]
NegTemp = Temp.8 ;Als bit 8 (het 9e bit) geset is, dan is temperatuur negatief
TempDeci = ((Slope - Remain) * 100) / Slope
Temp = Temp * 5
If NegTemp = TRUE Then ;Als de temperatuur negatief is, dan...
Temp = 65530 - Temp ;De gemeten waarde Inverteren
TempDeci = 100 - TempDeci ;Ook de waarde achter de komma inverteren
If TempDeci < 51 Then TempDeci = TempDeci + 100
EndIf
Temp = (((Temp + 550) / 10) * 100) + TempDeci - 5500 ;
Print At 1, 7, Rep "-"\NegTemp, Dec Temp / 100, ".", Dec2 Temp, Graad, "C "
Wend
Het volgende programma wil niet werken en geeft als resultaat -0.00:
pic basic code:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : J. van der Veen *
'* Notice : Copyright (c) 2012 J. van der Veen *
'* : All Rights Reserved *
'* Date : 14-1-2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
;Voorbeeld 5
Device 16F628 ;We gebruiken een 16F628 type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE ;Alle ingangen digitaal
;Normale constanten
Symbol Convert = $44 ;DS1820 commando, de DS1820 moet de temperatuur gaan meten
Symbol Graad = 223 ;223 is de ASCII code voor het 'graad' karakter
Symbol RdScratchPad = $BE ;DS1820 commando, temperatuur van de DS1820 uitlezen
Symbol MatchROM = $55
Symbol SkipROM = $CC ;DS1820 commando, geen gebruik maken van het unieke adres
;Logische constanten
Symbol FALSE = 0
Symbol TRUE = 1
;Poortnamen
Symbol DS1820 = PORTA.0 ;Sluit de DS1820 temperatuur sensor aan op deze poort
;Variabelen declareren
;WORD
Dim Temp As Word ;Bevat de temperatuur Celsius
;BYTE
Dim Remain As Byte ;De remain waarde voor berekening temperatuur achter de komma
Dim Slope As Byte ;Bevat de 'counts per graad Celsius' waarde
Dim TempDeci As Byte ;Bevat de temperatuur waarde "achter de komma"
Dim BD1 As Byte ;Byte Dummy 1
;BIT
Dim NegTemp As Bit ;TRUE als temperatuur Celsius onder 0 oC komt
Clear ;Wis RAM geheugen
DelayMS 500 ;LCD stabilisatie
;Hoofdprogramma
Cls ;Wis LCD scherm
Print "Temp:" ;Plaats eerst deze tekst op het display
While 1 = 1
OWrite DS1820, 1, [MatchROM, $CC, $FA, $24, $02, $08, $00, $10, $45, Convert] ;Zend 'Calculate Temperature' opdracht
OWrite DS1820, 1, [MatchROM, $CC, $FA, $24, $02, $08, $00, $10, $45, RdScratchPad] ;Zend 'Read ScratchPad' opdracht
ORead DS1820, 2, [Temp.LowByte, Temp.HighByte, BD1, BD1, BD1, BD1, Remain, Slope] ',CRC]
NegTemp = Temp.8 ;Als bit 8 (het 9e bit) geset is, dan is temperatuur negatief
TempDeci = ((Slope - Remain) * 100) / Slope
Temp = Temp * 5
If NegTemp = TRUE Then ;Als de temperatuur negatief is, dan...
Temp = 65530 - Temp ;De gemeten waarde Inverteren
TempDeci = 100 - TempDeci ;Ook de waarde achter de komma inverteren
If TempDeci < 51 Then TempDeci = TempDeci + 100
EndIf
Temp = (((Temp + 550) / 10) * 100) + TempDeci - 5500 ;
Print At 1, 7, Rep "-"\NegTemp, Dec Temp / 100, ".", Dec2 Temp, Graad, "C "
Wend
Iemand een idee wat ik fout doe ?
Groeten,
Jurgen
[Bericht gewijzigd door Henry S. op dinsdag 6 maart 2012 18:07:26 (0%)