DS18B20 Digitale Temperatuur Sensor
De DS18B20 is een temperatuur sensor die digitaal uitgelezen wordt.
Om de te zien hoe dat moet, is het het beste om de DS18B20 Datasheet
eerst door te lezen.
Schema 18F25K22 met DS18B20:
Hieronder is Proton/Amicus18 code geplaatst voor een simpele uitlezing van de DS18B20
Beperkingen van deze code zijn:
Maximaal 1 sensor per I/O poort (geen gebruik van het interne serie nummer)
Geen parasitaire voeding.(voeding vanaf de data lijn)
Alleen 12 bit resolutie (is wat langzamer)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | '*********************************************************************** '* Name : 28PIC-DS18B20.BAS * '* Author : Knutselaar.eu * '* Date : 10/12/2013 (1.0) * '* Version : 1.1 * '* : 23-12-2013 1.1 aangepast voor negatieve temperatuur * '* * '* Notes : Dit programma schrijft de DS18B20 temperatuur naar een * '* HD44780 compatible display en naar de seriële poort * '*********************************************************************** Device 18F25K22 CONFIG_START FOSC = INTIO67 FCMEN = OFF ;Fail-Safe Clock Monitor disabled IESO = OFF ;internal external switchover mode PWRTEN = On ;power-up timer (18F25K22) BOREN = On ;brown-out reset BORV = 285 ;brown-out reset value (2,85V) (18F25K22) WDTEN = OFF ;watchdog timer WDTPS = 128 ;1:128 WDT prescalar PBADEN = OFF ;analog port B<4:0> STVREN = On ;stack overflow reset LVP = OFF ;low voltage programming XINST = OFF ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode) Debug = OFF ;no debug CONFIG_END XTAL = 8 OSCCON = %01100110 TRISA = %11011111 ANSELA = %00000000 Declare LCD_DATAUS 75 ' voor de wat langzamere 16x 2 displays Declare HSERIAL_BAUD = 9600 ;Transmissiesnelheid van de data over de bus Declare HSERIAL_RCSTA = %10010000 ;Bit7:Enable serial port / Bit4:Continu ontvangen Declare HSERIAL_TXSTA = %00100000 ;Bit5:Transmitpin ingeschakeld (TXEN (Transmit ENable) = 1) Declare HSERIAL_CLEAR On Symbol Convert = $44 ;One Wire Convert command (zie datasheet DS1820) Symbol RdScratchPad = $BE ;One Wire Read ScratchPad command(zie datasheet DS1820) Symbol SkipROM = $CC ;One Wire SkipROM command (zie datasheet DS1820) Symbol LED = LATA.5 Dim Temperatuur As Word Dim Decimalen As Byte Dim NegatieveTemp As Bit Cls DelayMS 500 Print At 1,1, " Knutselaar.eu " Print At 2,1, " " Loop: OWrite PORTA.0, 1, [SkipROM, Convert] ' Zend 'Convert' opdracht (temperatuur meten) While ORead PORTA.0,4 = 0 : Wend ' Wacht tot conversie is voltooid... OWrite PORTA.0, 1, [SkipROM, RdScratchPad]' Zend 'Read ScratchPad' opdracht ORead PORTA.0, 2, [Temperatuur.LowByte, Temperatuur.HighByte]'Lees temperatuur en plaats dit in de variabele NegatieveTemp = Temperatuur.11 ' Bit 11 van Temperatuur is "1" bij negatieve temperatuur Decimalen = Temperatuur.LowByte << 4 ' Alleen de laatste 4 bits van Temperatuur zijn nodig voor Decimalen Decimalen = Decimalen >> 4 ' Bits weer op de originele plaats zetten Decimalen = Decimalen * 6.25 ' Resolutie van de DS18B20 is 0.0625 graden celcius. If NegatieveTemp = 1 Then Temperatuur = 65536 - Temperatuur 'inverteren Decimalen = 100 - Decimalen 'inverteren Print At 2, 1, "-", Dec (Temperatuur >> 4) , ".", DEC1 Decimalen / 10, 223 HSerOut ["Temperatuur ", "-",Dec (Temperatuur >> 4) , ".", DEC1 Decimalen / 10 ,13] 'Door de laatste 4 bits van Temperatuur weg te gooien krijg je de graden Celcius. Else Print At 2, 1, " ", Dec (Temperatuur >> 4) , ".", DEC1 Decimalen / 10, 223 HSerOut ["Temperatuur ",Dec (Temperatuur >> 4) , ".", DEC1 Decimalen / 10 ,13] End If Toggle LED GoTo Loop End |
Verschil tussen de DS18B20 en de DS18S20 zie Maxim application note 4377
Meer informatie is te vinden in Maxim application note 162
DS18B20 Digitale Temperatuur Sensor Bestellen
Hieronder nog dezelfde code als boven maar dan voor de DS1820 of DS18S20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | '*********************************************************************** '* Name : 28PIC-DS18S20.BAS * '* Author : Knutselaar.eu * '* Date : 23/12/2013 (1.0) * '* Version : 1.0 * '* * '* Notes : Dit programma schrijft de DS18S20 temperatuur naar een * '* HD44780 compatible display en naar seriële poort * '* Bron : http://www.picbasic.nl/electro_ds1820.htm * '*********************************************************************** Device 18F25K22 CONFIG_START FOSC = INTIO67 FCMEN = OFF ;Fail-Safe Clock Monitor disabled IESO = OFF ;internal external switchover mode PWRTEN = On ;power-up timer (18F25K22) BOREN = On ;brown-out reset BORV = 285 ;brown-out reset value (2,85V) (18F25K22) WDTEN = OFF ;watchdog timer WDTPS = 128 ;1:128 WDT prescalar PBADEN = OFF ;analog port B<4:0> STVREN = On ;;stack overflow reset LVP = OFF ;low voltage programming XINST = OFF ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode) Debug = OFF ;no debug CONFIG_END XTAL = 8 OSCCON = %01100110 TRISA = %11011111 ANSELA = %00000000 Declare LCD_DATAUS 75 ' voor de wat langzamere 16x 2 displays Declare HSERIAL_BAUD = 9600 ;Transmissiesnelheid van de data over de bus Declare HSERIAL_RCSTA = %10010000 ;Bit7:Enable serial port / Bit4:Continu ontvangen Declare HSERIAL_TXSTA = %00100000 ;Bit5:Transmitpin ingeschakeld (TXEN (Transmit ENable) = 1) Declare HSERIAL_CLEAR On Symbol Convert = $44 ;One Wire Convert command (zie datasheet DS1820) Symbol RdScratchPad = $BE ;One Wire Read ScratchPad command(zie datasheet DS1820) Symbol SkipROM = $CC ;One Wire SkipROM command (zie datasheet DS1820) Symbol LED = LATA.5 Dim Temperatuur As Word Dim Slope As Byte Dim Remain As Byte Dim DB1 As Byte Dim Decimalen As Byte Dim NegatieveTemp As Bit Cls DelayMS 500 Print At 1,1, " Knutselaar.eu " Print At 2,1, " " Loop: OWrite PORTA.0, 1, [SkipROM, Convert] ' Zend 'Convert' opdracht (temperatuur meten) While ORead PORTA.0,4 = 0 : Wend ' Wacht tot conversie is voltooid... OWrite PORTA.0, 1, [SkipROM, RdScratchPad]' Zend 'Read ScratchPad' opdracht ORead PORTA.0, 2, [Temperatuur.LowByte, Temperatuur.HighByte, DB1, DB1, DB1, DB1,Remain, Slope]'Lees temperatuur en plaats dit in de variabele NegatieveTemp = Temperatuur.8 ' Bit 8 van Temperatuur is "1" bij negatieve temperatuur Decimalen = ((Slope - Remain) * 100) / Slope Temperatuur = Temperatuur * 5 If NegatieveTemp = 1 Then Temperatuur = 65536 - Temperatuur 'inverteren Decimalen = 100 - Decimalen 'inverteren If Decimalen < 51 Then Decimalen = Decimalen + 100 End If Temperatuur = (((Temperatuur + 550) / 10) * 100) + Decimalen - 5500 ; Print At 2, 1, Rep "-"\NegatieveTemp, Dec Temperatuur/100 , ".", DEC1 Decimalen / 10, 223, " " HSerOut [ "Temperatuur ", Rep "-"\NegatieveTemp, Dec Temperatuur/100 , ".", DEC1 Decimalen / 10 ,13] Toggle LED GoTo Loop End |