I finaly did it (or should I say We....Mr e).The program works fine.
The key hang ups were add in a "z" in the VB write code and sending code all the time to the pic. Im sure there are way better ways of doing this but this works.
You need a pic and a 1620 temp ic and a serial converter and a pc.
here is the code and thank you everyone who helped especially the big E.
Snap
VB2005 code
Code:Public Class Form1 Dim WithEvents serialport As New IO.Ports.SerialPort Dim temperature As Integer Dim setting As Decimal Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If serialport.IsOpen Then serialport.Close() End If With serialport .PortName = "com1" .BaudRate = 9600 .Parity = IO.Ports.Parity.None .DataBits = 8 .StopBits = IO.Ports.StopBits.One '.DtrEnable = True '.ReadBufferSize = 40 .ReceivedBytesThreshold = 2 End With TextBox4.Text = 23 serialport.Open() serialport.Write(200 & "z") End Sub Private Sub Datarecieved(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialport.DataReceived TextBox1.Invoke(New mydelegate(AddressOf updatetextbox), New Object() {}) End Sub Public Delegate Sub mydelegate() Public Sub updatetextbox() Dim mytemp As New temp mytemp.binary = serialport.ReadExisting Dim resultc As Decimal = celciusconversion(mytemp.binary) Dim resultf As Decimal = farconversion(resultc) TextBox1.Text = resultc TextBox2.Text = resultf If TextBox1.Text >= setting Then TextBox3.BackColor = Color.Green TextBox3.Text = "fan on" serialport.Write(100 & "z") ElseIf TextBox1.Text < setting Then TextBox3.BackColor = Color.Red TextBox3.Text = "fan off" serialport.Write(200 & "z") End If End Sub Public Function celciusconversion(ByVal datarecieved As String) As Decimal Return datarecieved * 0.5 End Function Public Function farconversion(ByVal datarecieved As String) As Decimal Return (datarecieved * 1.8) + 32 End Function Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label4.Click End Sub Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged setting = TextBox4.Text End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub End Class
Temp Class
pic codeCode:Public Class temp Private m_binary As String Private m_celsius As String Private m_farenheight As String Public Property binary() Get Return m_binary End Get Set(ByVal value) m_binary = value End Set End Property Public Property celsius() Get Return m_celsius End Get Set(ByVal value) m_celsius = value End Set End Property Public Property farenheight() Get Return m_farenheight End Get Set(ByVal value) m_farenheight = value End Set End Property
Code:' Pic16f877a ' LCD should be connected as follows: ' LCD PIC ' DB4 PortB.0 ' DB5 PortB.1 ' DB6 PortB.2 ' DB7 PortB.3 ' RS PortB.5 (add 4.7K pullup resistor to 5 volts) ' E PortD.7 ' RW Ground ' Vdd 5 volts ' Vss Ground ' Vo 20K potentiometer (or ground) ' DB0-3 No connect Include "MODEDEFS.BAS" DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 0 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 5 DEFINE LCD_EREG PORTD DEFINE LCD_EBIT 7 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 DEFINE LCD_COMMANDUS 2000 DEFINE LCD_DATUS 50 ADCON1=%00000111 ' RST var portd.2 DQ var portd.0 CLK var portd.1 temp var word 'storage for temperature pcsig var word 'portc=0 'trisc=0 HIGH PORTD.3 ' Serial OUT idle state pause 500 ' low rst 'reset 1620 ' lcdout $fe,1,"Temp in Degrees C" ' Main loop mainloop: RST = 1'enable device might be high Shiftout DQ,CLK,LSBFIRST,[$ee] 'send read command RST = 0 ' reset device Pause 1000 ' wait for conversion to compleate ' RST = 1 ' SAA Shiftout DQ,CLK,LSBFIRST, [$aa] ' send read command Shiftin DQ,CLK,LSBPRE, [temp\9]'read 9 bits temp RST = 0 lcdout $fe,1,dec(temp>>1), ".", dec(temp.0*5), " Degrees C" serout portd.3,t9600,[#temp] serin portc.4,t9600,#pcsig if pcsig = 100 then high portc.5 if pcsig = 300 then goto mainloop if pcsig = 200 then low portc.5 goto mainloop END




Bookmarks