seri haberleşme

Başlatan ubahcivan, 21 Şubat 2009, 01:02:50

ubahcivan

arkadaşlar  elimde be102 ultrasonik sensör var.  Katalogta yazılanlar aşağıdaki gibi

1- İstemci aşağıdaki sekansı göndererek ölçüm isteminde bulunur:
SOF,IDX_MEASURE_POST, EOF
SOF: 0xD1 yada desimal olarak 209. Start Of Frame (çerçeve başlangıcı)
IDX_MEASURE_POST: 0x06, desimal olarak da 6. Ölçüm istemi.
EOF: 0xD2 yada desimal olarak 210. End Of Frame (çerçeve bitimi)
Örnek bir istem paketi aşağıdaki gibi 3 byte'dan oluşur:
0xD1 0x06 0xD2
Yada desimal olarak arka arkaya gönderilen 3 byte:
209 6 210
2. BE102, EOF (0xD2) değerini alır almaz ölçüme başlar ve sonucu iki bytelık değer (short) olarak
geri döner. Sonuç milimetrenin ölçeğindedir. Örneğin cisim 29.1 cm'de bulunsun, bu değer
0x0123 hex ile temsil edilen bir USHORT değeridir. BE102 little endian kodlama kullandığı için
ölçüm tamamlandığında önce 0x23 değerini, ardından da 0x01 değerini gönderir. Kodlayan, bu
iki ayrı byte değerini birleştirip tek bir short (yada int16) değeri elde etmelidir.

seri iletişi pek bilmediğimden bana yardım eder misiniz.
portb.0 serin ile portb.1 serout ile kullanmak istiyorum aşağıdaki kodu yazdım ama lcd hem 0 cm gösteriyor .


Device=16F84A
XTAL 4
Dim SAY As Word
Dim SOF As Byte
Dim IDX_MEASURE_POST As Byte
Dim EOF As Byte
SOF=209
IDX_MEASURE_POST=6
EOF=210
TRISA=%00000000         
TRISB=%00000001         
Declare LCD_DTPIN PORTA.0   
Declare LCD_ENPIN PORTA.4   
Declare LCD_RSPIN PORTB.4   '
Declare LCD_INTERFACE 4   
Declare LCD_LINES 2   
Cls               
basla:
SerOut PORTB.1 ,16572,[SOF]
SerOut PORTB.1 ,16572,[IDX_MEASURE_POST]
SerOut PORTB.1 ,16572,[EOF]
GoTo oku
oku:
SerIn PORTB.0 , 16572 , [(Wait Dec 35),SAY]
Print At 1,1, Dec SAY, " CM"   
GoTo basla  
End

ete

Bence Kod şöyle olmalı (yalnızca basla dan itibaren yazıyorum);

basla:
SerOut PORTB.1 ,16572,[SOF,IDX_MEASURE_POST,EOF]

oku:
SerIn PORTB.0 , 16572 , [SAY.byte0,SAY.byte1]
Print At 1,1, Dec SAY/10,Dec1 SAY//10, " CM"
GoTo basla
End

Bu kod doğru ancak yinede çalışmayabilir. Nedenide, sensörün ölçüm işlemini tamamladığını bildiren bir işaret vermesi gerekir diye düşünüyorum. Bu işaret alındıktan sonra ölçülen mesafe okunmalı. Aksi halde sen oku komutunu verdin ve henüz okuma tamamlanmamış ise okunan bilgi boş veya yanlış olacaktır. Data sheet'i iyice incele ve okuma isteği verildikten sonra kritik olan okuma zamanı nasıl ayarlanıyor onu belirlemeye çalış.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com