In juli heb ik een temperatuur sensor beschreven met 12f683 en een ds1820, hierbij de ontvanger. Als ontvanger gebruik ik een AM ontvanger van conrad, de data uitgang is aangesloten op portb.1.Het lcd zit ook op portb zie source. De werking. De PIC kijkt in een loop of er een $55 word ontvangen.
Is dit het geval dan gaan we naar de volgende routine waarbij de data ontvangen word. Mocht hier iets niet goed gaan gaan we terug naar de hoofdroutine. Is er wel goede data dan springen we als de zender 1 is naar de display routine. De errorchecking zit er nog niet in. Het is een bassis en de ontvangst gaat prima. Voor de pic heb ik gekozen voor een 18f2620
Ik heb drie tellers er in zitten die aangeven hoeveel keer er $55 is ontvangen, hoeveel keer data ontvangen is en hoeveel keer er iets op het lcd is gezet.
Device 18F2620
Xtal 20
ADCON1=7
LCD_DTPin PORTB.4
LCD_ENPin PORTB.3
LCD_RSPin PORTB.2
Print $FE, $40, $08, $14, $08, $03, $04, $04, $03, $00 ' celcius
Dim telontv As Word
Dim tempser As Byte
Dim teller As Byte
Dim teldoor As Word
Dim telzend As Word
Dim regel As Byte
Dim tempdata As Bit
Dim manchest1 As Word
Dim manchest2 As Word
Dim manchest3 As Word
Dim manchest4 As Word
Dim manchest5 As Word
Dim manchest6 As Word
Dim manchestck As Word
Dim manchestin As Word
Dim byteout As Byte
Dim zender As Byte
Dim decode1 As Byte
Dim decode2 As Byte
Dim decode3 As Byte
Dim decode4 As Byte
Dim decode5 As Byte
Dim checksum As Byte
Dim templcd As Byte
Dim tempture As Word
Cls
telontv = 0
teldoor = 0
telzend = 0
main:
SerIn PORTB.1,49965,1,geendata, [tempser]
If tempser =$55 Then GoTo rest
GoTo main
geendata:
tempser=$ff
GoTo main
rest:
teldoor = teldoor + 1
Print At 2,1 , Dec3 teldoor
SerIn PORTB.1,49965, 10, geendata,[Wait($AA), manchest1.HighByte,manchest1.LowByte, manchest2.HighByte, manchest2.LowByte,manchest3.HighByte,manchest3.LowByte]
SerIn PORTB.1,49965,[manchest4.HighByte, manchest4.LowByte,manchest5.HighByte,manchest5.LowByte, manchest6.HighByte, manchest6.LowByte,manchestck.HighByte, manchestck.LowByte]
telontv = telontv + 1
Print At 2,5, Dec3 telontv
GoSub decodeall
If zender = 1 Then GoSuB showtemp
GoTo main
showtemp:
telzend = telzend + 1
Print At 2,9,Dec3 telzend
tempture.HighByte= decode2
tempture.LowByte = decode1
Print At 1,1, Dec2 (tempture / 100),".",Dec2 tempture,0
Return
decodeall:
manchestin = manchest1
GoSub decodmanchester
zender = byteout
manchestin = manchest2
GoSub decodmanchester
decode1 = byteout
manchestin = manchest3
GoSub decodmanchester
decode2 = byteout
manchestin = manchest4
GoSub decodmanchester
decode3 = byteout
manchestin = manchest5
GoSub decodmanchester
decode4 = byteout
manchestin = manchest6
GoSub decodmanchester
decode5 = byteout
manchestin = manchestck
GoSub decodmanchester
checksum = byteout
Return
decodmanchester:
byteout=$00
For teller=7 To 0 Step -1
tempdata = GetBit manchestin,(teller*2)
If tempdata = 1 Then
tempdata = GetBit manchestin,(teller*2+1)
If tempdata = 0 Then
SetBit byteout,teller
EndIf
EndIf
Next teller
Return
Geen opmerkingen:
Een reactie posten