Merhaba, iyi bayramlar
16f877 nin 5 analog girişine 5 adet pot bağlıyorum ve 10 bit analog sinyal alıyorum. Bu bilgiyi PIC'e bağlı LCD'den göreceğim ve Rs-232 ile PC'ye aktarmam gerekiyor. 10-100 ms aralıklarla bu bilgiyi PC tarafından okumam ve textboxlara yazdırmam gerekiyor. Aktaracağım data 10 bit olmak zorunda.
PIC tarafı OK ama VB tarafını çözemiyorum. Aslında projem daha farklı ama basit olması açısından bu şekilde tasarlayıp sormak istedim.
İlgilenen ve yardımcı olacklara şimdiden teşekkürler
Pic Code...
Device = 16F877
XTAL = 4
TRISA=%00111111
TRISB=0
TRISC=0
TRISD=%00000010
'-------------------------------------------------------------------------
Include "MODEDEFS.BAS"
Declare LCD_TYPE 0
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.3
Declare LCD_RSPIN PORTB.1
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
Declare ADIN_RES 10
Declare ADIN_TAD 2_FOSC
Declare ADIN_STIME 50
'-------------------------------------------------------------------------------
ADCON1=%10000010
'-------------------------------------------------------------------------------
D1 var Word
D2 VAR Word
D3 VAR Word
D4 var Word
D5 var Word
Print $FE,1
DelayMS 200
BASLA:
D1 = ADIn 0
D2 = ADIn 1
D3 = ADIn 2
D4 = ADIn 3
D5 = ADIn 4
Print $FE,1, Dec D1 ," " ,Dec D2 ," ",Dec d3
Print $FE,$C0, Dec D4," " ,Dec d5
GONDER:
SerOut PORTD.0, N9600 ,["@","POT1",Dec D1]
SerOut PORTD.0, N9600 ,["@","POT2",Dec D2]
SerOut PORTD.0, N9600 ,["@","POT3",Dec D3]
SerOut PORTD.0, N9600 ,["@","POT4",Dec D4]
SerOut PORTD.0, N9600 ,["@","POT5",Dec D5]
DelayMS 200
GoTo BASLA
VB Code...
Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.CommPort = 3
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
End Sub
Private Sub Timer1_Timer()
deger As String
If Mid(deger, 1, 1) = "@" Then
If Mid(deger, 2, 5) = "POT1" Then Text1.Text = Mid(deger, 6, 9)
If Mid(deger, 2, 5) = "POT2" Then Text2.Text = Mid(deger, 6, 9)
If Mid(deger, 2, 5) = "POT3" Then Text3.Text = Mid(deger, 6, 9)
If Mid(deger, 2, 5) = "POT4" Then Text4.Text = Mid(deger, 6, 9)
If Mid(deger, 2, 5) = "POT5" Then Text5.Text = Mid(deger, 6, 9)
End If
End Sub
OKREG
Kötü şöhretli MSCOMM,
Gönderdiğin deger word, MSCOMM ise string yapıda byte byte gönderir ve alır.
Değerini ya byte a çevir ya da PC tarafında düzenleme gerektirir. Gönderirken byte byte göndermen işini kolaylaştırır. Daha kolay anlaşılır şekli ise digit digit ayırmandır. DIG komutuna bak.
Ayrıca Timer içinde MSComm1.Input yapmamışsın , yani alış yok.