Merhabalar..
MH-Z16 co2 sensörü geldi ufak bir kod yazıp denemeler yapmak istedim fakat sabahtan beri kafayı yedirtti bana.
En son çare pic'in çıkışına usb-serial çevirici takıp MH-Z16 ya gönderdiğim datayı teyit etmek oldu.
Çok garip bir sorunum var gibi.Yada ben yanlış yapıyorum bilemedim..
(https://i.hizliresim.com/k9nEGD.png) (https://hizliresim.com/k9nEGD)
data sheetin diyor ki : sensörden veri okumak için ilk olarak ona naber nasılsın iyimisin hoşmuşun demek gerekiyor..
HSerOut2 [$FF,$01,$086,$00,$00,$00,$00,$00,$79] ' CO2 SENSORUNU OKUMAK İÇİN GONDER
aynen datasheetin de yazdığı gibi sensörün halini vaktini soruyorum daha doğrusu yukarıdaki kod'da ki gibi yazdığım dataları göndermeye çalışıyorum...
ama sensörden ses seda yok...Sonra dediğim gibi serial den dinlemek istedim acaba ne gidiyor sensör tarafına diye
(https://i.hizliresim.com/Ll1Qno.png) (https://hizliresim.com/Ll1Qno)
görünce acayip şaşırdım..Benim yukarıda yazdığım göndermeye çalıştığım ne çıkıştan aldığım ne..
Ne yapmam lasım ?
İşin ilginç tarafı simulasyonda gönderilen dataları doğru gösteriyor...
(https://i.hizliresim.com/ZX7YPA.png) (https://hizliresim.com/ZX7YPA)
Islemcinin Tx ve Rx hattina normalde kapali basinca acilan butonlar koy.
Programin dongu icinde surekli sensorden data isterken bu butonlara arada bir basarak iletisimi boz.
Eger adamakalilli bir yazilim yaptiysan sistemin kendini toparlamasi lazim. Yoksa cakilir kalir.
Boyle yaparsan simulasyonda da test edebilirsin.
Hocam o konuda haklısınız fakat şuan sıkıntı $86 değerini picin çıkışında $3f olarak okumam..
Sanırım sensöre bu şekilde yanlış bilgi gidiyor..
Rx Tx hattinda farkinda olmadigin bir invertor olmasin? TTL baglantida MCU dada USB donusturucude de inverter olmamasi lazim yada her ikisinde de olmasi lazim.
Alıntı yapılan: mustafa_cmbz - 29 Aralık 2018, 22:42:31Ne yapmam lasım ?
Proton+ UART TX örneklerini incelemek lazım. UART ayarlarında bir hata olsa gerek.
Bazı byte lar doğru gidiyor olabilir ancak görünen o ki UART doğru ayarlanmamış.
simülasyonda da ilk bayt sanki hatalı. ilk bayt 00 gitmiş.
False İnterrupt hatasına benziyor.
Frame'in başı yanlışsa,yanlış iliklenen Gömlek düğmesi misali
hepsi yanlış gidiyordur herhalde.
bazen osc hatası olabiliyor. yanlış çarpan ile set ettiyseniz osc bozuk ise v.s Yani zamansal kayma sebebiyle
HSerOut2 [$FF,$01,$086,$00,$00,$00,$00,$00,$79]
Hatalı Byte
Alıntı yapılan: OG - 30 Aralık 2018, 17:55:04HSerOut2 [$FF,$01,$086,$00,$00,$00,$00,$00,$79]
Hatalı Byte
hocam o deneme yaparken kalmış muhtemel
HSerOut2 [
$FF,$01,
$86,$00,$00,$00,$00,$00,$79]
bu şekilde de göndersem sonuç aynı aşağıdaki gibi :
0x3f 0x1
0x3f 0x0 0x0 0x0 0x0 0x0 0x79
birşey dikkatimi çekti burada...
mesela sadece:
HSerOut2 [
$86]
dediğimde de pc de serial portta gördüğüm :
0x3fbu ne anlama geliyor ?
son olarak serial port programından $86 gönderdim serial to usb çeviricinin rx tx ucunu kısa devre ettiğimde geriye aldığım yanıt bu şekilde
(https://i.hizliresim.com/268Pnj.png) (https://hizliresim.com/268Pnj)
sen ascii olarak (string) gönderiyorsun, aldiğin sonuç onu gösteriyor
Yani
$86 göndermiyor
"$86" gönderiyorsun, 3 ayrı byte
ascii tablosuna bakarsan anlayacaksın
"$" 0x24 yani $24
"8" 0x38 yani $38
"6" 0x36 yani $36
Datasheet'e yeni baktım dikkatimi çekti
IN/OUT data voltajları dikkate alınıyormu.
(https://i.postimg.cc/0NSqhtd9/Ekran-Al-nt-s.jpg) (https://postimages.org/)
serial port programında evet dediğin gibiymiş biz string gönderiyormuşuz ondan öyleymiş fakat
işlemciden hex olarak $86 gönderdiğim de neden 0x3f olarak alıyorum ? burasını hala anlamış değilim..
voltaj kısmıyla sorduğun şey sanırım
(https://i.hizliresim.com/Ll1GMb.png) (https://hizliresim.com/Ll1GMb)
arada çevirici var onu soruyorsan...
önce datayı loop yaparak, gönderdiğini pc de görüp koddaki hatayı bulmalısın derim
Device=18F24K22
Xtal=20
All_Digital=TRUE
Declare Hserial2_Baud = 9600
Declare Hserial2_RCSTA = %10010000 ' Enable continuous receive
Declare Hserial2_TXSTA = %00100000 ' Enable transmit and asynchronous mode ' DIGER HABERLEŞME İÇİN KULLANILACAK
Declare Hserial2_Clear = On ' Clear the buffer before receiving
Symbol BUZZER = PORTA.3
'******************/ DEGISKEN TANIMLAMALARI /**********************
Dim A As Byte
A=0
'*************************/ ANA PROGRAM /*****************************
BASLA:
For A=0 To 100
DelayMS 800
GoSub MELODI : GoSub CO2_SENSOR_OKU
Next
GoTo BASLA
'**********************/ MELODI /*******************************
MELODI:
High BUZZER
DelayMS 38
Low BUZZER
DelayMS 80
High BUZZER
DelayMS 14
Low BUZZER
DelayMS 50
Return
'*************
CO2_SENSOR_OKU:
DelayMS 10
HSerOut2 [$86]
DelayMS 10
Return
döngü şeklinde pc ye şuan sadece $86 gönderiyorum gördüğüm $3F kodun tamamı burada.
nerede yanlış yapıyorum ?
@ete hocam senin bir yorumun varmı ?
Burada yanlış yok belki donanımda bir sıkıntı olabilir. TX pini üzerinde pullup direnç var mı? Varsa direnç değeri kontrol edilmeli. Yada crystall in 20MHz olduğundan emin misiniz? Pic i devreden söküp uart2 nin RX ve Tx pinlerini birleştirin. PC terminal üzerinden gönderdikleriniz doğru şekilde geri geliyor mu? Geliyorsa donanımda sıkıntı yok demektir (mcu hatalı olabilir).
(https://i.hizliresim.com/4jbQYY.png) (https://hizliresim.com/4jbQYY)
PİC'ten $86 datası doğru çıkıyormuş aslında benim kullandığım forumdan bir arkadaşa ait olan serial dinleme programında sıkıntı varmış bu yüzden dolayı sabahtan bu yana boşuna uraşıyorum benim Rx kısmında sorunum varmış.Nihayetin de sensöre ilgili dataları gönderdiğimde geri dönüş yaptığını gözlemiş oldum..
Hercules https://www.hw-group.com/software/hercules-setup-utility
PuTTY https://www.chiark.greenend.org.uk/~sgtatham/putty/
Terminal https://sites.google.com/site/terminalbpp/