why are they using the serin serout commands
trying to display temp on a lcd
if you notice the program i copied
the temp sensor is read and written with the owout and owin command
cant understand what the serin function is doing is it sending the display to the pc
The other program is just an example, most likely not exactly what you need. If you read through the thread, you'll see that the program and process related to in the Serin/Serout Problem thread (in the PBPro section) is for wireless transfer of data between 2 PICs, one getting the data from a DS1820 then transmitting it, and one receiving the data and displaying it. If you read thru it all, you'll find a working model of how to read the data from the ds1820 and send it out to an LCD without worrying about the intermediate serin/serout commands.
i have found a program thatdoes work finally i have listed it below
problem with the others i tried must have something to do with the
owin and owout statements timeing or something i am not knowledgeable enough to find out why perhaps someone else could explain
here is listing of program that works all others i tried do not reflect the temperature
'************************************************* ***************
'* Name : UNTITLED.BAS *
'* Author : JACK CLEAVER *
'* Notice : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 2/5/2007 *
'* Version : 1.0 *
'* Notes : *
'* : *
'************************************************* ***************
' Picbasic Pro program to read DS1820 1-wire temperature sensor
' and display temperature on LCD
' Define LCD registers and bits
DEFINE LOADER_USED 1
Define LCD_DREG PORTB ' Port for LCD Data
Define LCD_DBIT 4 ' Use upper 4 bits of Port
Define LCD_RSREG PORTB ' Port for RegisterSelect (RS) bit
Define LCD_RSBIT 3 ' Port Pin for RS bit
Define LCD_EREG PORTB ' Port for Enable (E) bit
Define LCD_EBIT 2 ' Port Pin for E bit
Define LCB_BITS 4 ' Using 4-bit bus
Define LCD_LINES 2 ' Using 2 line Display
Define LCD_COMMANDUS 2000 ' Command Delay (uS)
Define LCD_DATAUS 50 ' Data Delay (uS)
DEFINE OSC 20
' Allocate variables
command var byte ' Storage for command
i var byte ' Storage for loop counter
temp var word ' Storage for temperature
DQ var PORTC.2 ' Alias DS1820 data pin
DQ_DIR var TRISC.2 ' Alias DS1820 data direction pin
FTEMP VAR WORD
ADCON1 = 7 ' Set PORTA and PORTE to digital
Low PORTE.2 ' LCD R/W line low (W)
Pause 100 ' Wait for LCD to start
Lcdout $fe, 1, "Temp in degrees C" ' Display sign-on message
PAUSE 1000
LCDOUT $FE,1
PAUSE 50
' Mainloop to read the temperature and display on LCD
mainloop:
Gosub init1820 ' Init the DS1820
command = $cc ' Issue Skip ROM command
Gosub write1820
command = $44 ' Start temperature conversion
Gosub write1820
Pause 2000 ' Wait 2 seconds for conversion to complete
Gosub init1820 ' Do another init
command = $cc ' Issue Skip ROM command
Gosub write1820
command = $be ' Read the temperature
Gosub write1820
Gosub read1820
' Display the decimal temperature
Lcdout $fe, 1, dec (temp >> 1), ".", dec (temp.0 * 5), " degrees C"
PAUSE 1000
LCDOUT $FE,1
PAUSE 50
FTEMP = (180/100 * TEMP) +32
LCDOUT $FE,1, " ",DEC FTEMP, " DEGREES F"
PAUSE 1000
LCDOUT $FE, 1
PAUSE 50
Goto mainloop ' Do it forever
' Initialize DS1820 and check for presence
init1820:
Low DQ ' Set the data pin low to init
Pauseus 500 ' Wait > 480us
DQ_DIR = 1 ' Release data pin (set to input for high)
Pauseus 100 ' Wait > 60us
If DQ = 1 Then
Lcdout $fe, 1, "DS1820 not present"
Pause 500
Goto mainloop ' Try again
Endif
Pauseus 400 ' Wait for end of presence pulse
Return
' Write "command" byte to the DS1820
write1820:
For i = 1 to 8 ' 8 bits to a byte
If command.0 = 0 Then
Gosub write0 ' Write a 0 bit
Else
Gosub write1 ' Write a 1 bit
Endif
command = command >> 1 ' Shift to next bit
Next i
Return
' Write a 0 bit to the DS1820
write0:
Low DQ
Pauseus 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
@ nop ' Delay 1us at 4MHz
DQ_DIR = 1 ' Release data pin (set to input for high)
Pauseus 60 ' Use up rest of time slot
Return
' Read temperature from the DS1820
read1820:
For i = 1 to 16 ' 16 bits to a word
temp = temp >> 1 ' Shift down bits
Gosub readbit ' Get the bit to the top of temp
Next i
Return
' Read a bit from the DS1820
readbit:
temp.15 = 1 ' Preset read bit to 1
Low DQ ' Start the time slot
@ nop ' Delay 1us at 4MHz
DQ_DIR = 1 ' Release data pin (set to input for high)
If DQ = 0 Then
temp.15 = 0 ' Set bit to 0
Endif
Pauseus 60 ' Wait out rest of time slot
Return
End
Bookmarks