DS18B20 sensörünü pic16f628 ile ete hocamın programı ile okuyarak hserout komutu ile bluetooth üzerinden android programına göndermek istiyorum.
ISI1 VAR BYTE 'BU PROGRAMDA VAR. 29-04-2005 DE
ISI2 VAR BYTE
BUSY VAR BIT
HAM VAR WORD
ISI VAR WORD ' Hesaplanmış ISI değeri
SIGN_BITI VAR HAM.11'Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık
NEGAT_ISI CON 1 ' Negatif_Cold = 1
SIGN VAR BYTE ' ISI değeri için +/- işaret
ISARET VAR BYTE
TEMP VAR BYTE
SENSOROKU:
' ham=$FFBF:Gosub hesapla:RETURN 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku
IF Busy = 0 THEN Bekle ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB Hesapla
RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------
Hesapla: ' Ham değerden Santigrat derece hesabı
Sign = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign = "-"
' temp=($ffff-ham+1)*625 'bu satır alttakinin yerine kullanıldı
Temp=625*(~HAM+2)
ISI = DIV32 1000
GOTO GEC
endif
TEMP = 625*(HAM) '
ISI = DIV32 1000 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
ISI2 = (ISI //10)
ISI1=ISI/10
RETURN
HSEROUT[ISI1]
tam incelemedim denemeden kopyala yapıştır yaptım sıralama aşağı yukarı bu şekilde olacak.
normalde devrede bir butona basarak SELAM yazısını gönderip andorid programda görebiliyorum yazıyı. burada ISI1 değişkenini göndermek istiyorum yani sensorden gelen veri ISI1 degişkenine aktarılacak ve bu degisken 25 se telefona 25 yazısı gidecek şekilde olmalı
HSEROUT[ISI1]
şeklinde gönderirsem metin olarak mı gider yoksa değişkenin değeri olarak mı gider? daha önce buton ile kullandıgımda veri göndeririken
if porta.1=1 then
HSEROUT["SELAM"]
else goto basla
endif
şeklinde kullanınca direk text olarak gidiyordu takıldıgım nokta text degilde degiskenin içindeki degeri gönderme konusunda fikirlere açıgım deneme imkanım suan yok elimde pic kalmadı yarın deneyecegim.
şu şekilde düzenledim
' --------------------GENEL DEĞİŞKENLER-------------
ISI1 VAR BYTE 'BU PROGRAMDA VAR. 29-04-2005 DE
ISI2 VAR BYTE
BUSY VAR BIT
HAM VAR WORD
ISI VAR WORD ' Hesaplanmış ISI değeri
SIGN_BITI VAR HAM.11'Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık
NEGAT_ISI CON 1 ' Negatif_Cold = 1
SIGN VAR BYTE ' ISI değeri için +/- işaret
ISARET VAR BYTE
TEMP1 VAR BYTE
SYMBOL Comm_Pin=PORTA.0
SENSOROKU:
' ham=$FFBF:Gosub hesapla:RETURN 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku
IF Busy = 0 THEN Bekle ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB Hesapla
RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------
Hesapla: ' Ham değerden Santigrat derece hesabı
Sign = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign = "-"
' temp1=($ffff-ham+1)*625 'bu satır alttakinin yerine kullanıldı
Temp1=625*(~HAM+2)
ISI = DIV32 1000
GOTO GEC
endif
TEMP1 = 625*(HAM) '
ISI = DIV32 1000 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
ISI2 = (ISI //10)
ISI1=ISI/10
RETURN
HSEROUT [SIGN,ISI]
sıcaklık ölçümü ve yollama kısmı şu şekilde olacak. bunu veri kontrolü yaptıgım döngü içerisine koyacağım. döngünün sonuna geldikçe bilgi gönderecek.
@ete hocamın rf termometre alıcı verici kısmındaki verici kodları içerisinden aldım kodları. derlerken hata vermedi fakat elimde pic olmadıgı icin deneyemedim daha. bir türlüde isiste bu tarz devrelerin simulasyonunu yapamadım.
son durum nedir
bunu isis te deneyebilirsin
sadece piclerin tx rx uclarını birleştir, arada bluetooth olmayacak yani