16F877 & RF haberleşme sorunu!!

Başlatan merener, 27 Mart 2011, 18:29:58

merener

Uğrastıgım projede accelerometerdan aldıgım outputu pic de yorumlayıp degerini transmit etmeye calısıyorum. Tranmitter ve receiver bir degişkeni sadece increment edip belli aralıklar için atadıgım degerleri gönderirken hiç sorun cıkmadan calısıyor. Fakat ne zaman ki accelerometerdan gelen degeri okutup onun degerini yine aralıklara göre degerlendirip belli aralıklar sadece bir deger gönderirken sıkıntı cıkıyor,cok nadir gönderdigim degerleri alabiliyorum receiver kısmında.Kodlarda bir sıkıntı mı var yoksa baska bir sıkıntıdan mı dolayı oluyor? Yardımlarını bekliyorum.

Transmitter:
Device 16F877
 
Xtal = 20
 
Dim Number As Word
Dim Send As Word
 
Declare Rsout_Pin PORTA.0
Declare Rsout_Mode INVERTED
Declare Rsout_Pace 5
Declare Serial_Baud 2400
 
All_Digital = True
 
Low PORTA.0
Input PORTA.1
PORTA = 0
Send = 0

LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.2
LCD_ENPin = PORTB.3
LCD_Interface = 4
LCD_Lines = 2
All_Digital = True
 
DelayMS 150
Cls
'number = 2000 
Main:
'repeat
Number = PulsIn PORTA.1,1
DelayMS 20
'inc number

If Number < 2100 Then
    Send = 2050
ElseIf Number < 2200 Then
    Send = 2150
ElseIf Number < 2300 Then
    Send = 2250
ElseIf Number < 2400 Then
    Send = 2350
ElseIf Number < 2500 Then
    Send = 2350
ElseIf Number < 2600 Then
    Send = 2550
ElseIf Number < 2700 Then
    Send = 2650
ElseIf Number < 2800 Then
    Send = 2750
ElseIf Number < 2900 Then
    Send = 2850
ElseIf Number < 3000 Then
    Send = 2950
Else
    Send = 3150
EndIf
    
 
RSOut "Z", Dec Send, "A", 13

Print At 1,1,"Number = ",Dec5 Number
Print At 2,1,"Send = ",Dec5 Send
'until number = 3200
'number = 2000 
DelayMS 100 
GoTo Main   ' Loop for ever


Receiver:
Device 16F877
 
Xtal = 20
 
Dim Number As Word
 
Declare Rsin_Pin PORTA.0
Declare Rsin_Mode INVERTED
Declare Serial_Baud 2400
Declare Rsin_Timeout 1000
 
All_Digital = True
 
Input PORTA.0

LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.2
LCD_ENPin = PORTB.3
LCD_Interface = 4
LCD_Lines = 2
All_Digital = True
 
DelayMS 150
Cls
 
Main:
 
RSIn {Time_Out}, Wait("Z"), Dec Number
 
Print At 1,1,"Received = ", Dec5 Number    ' Display the number on an LCD
 
Time_Out:
        ' This is where to go if nothing is received
         '   in 1000ms
 
GoTo Main        ' Loop For ever


Bu arada RXB11 receiver ve JDQ R433A transmitter kullanıyorum.
Elimde udeadan aldıgım atx34 ve arx34 de var ama onları hiç çalıştıramadım preamble gerekliymiş okudugum dökümanlardan anladıgım kadarıyla fakat yapamadım sanırsam o ayarlamaları.

Klein

Proton bilmiyorum hiç. kodu da bu yüzden tam çözebilmiş değilim. Ama bir şey dikkatimi çekti.  if...else if....else if....  diziliminde
örneğin 2890 değeri gelirse ondan önceki tüm şartlar işletilir.
tüm değerler hiç aralıksız peşpeşe gönderildiği için  sorun yaşanıyor olabilir.  Ama proton send işlemini yaparken gerekli kontrolleri sağlıyorsa bu teori çöpe gider.

merener

Bende çok iyi bilmiyorum Proton'u fakat bildiğim kadarıyla increment ederken if içinde uygun aralıgı yakalayıp direk looptan cıkıyor ve uygun aralık için verilmiş değeri gönderiyor. Bir de accelerometerdan deger okumak yerine sadece increment ettiğim zaman sadece dogru degeri gönderiyor rahatlıkla görebiliyorum onu.

Klein

Haklısın. Ben else-if kısmını görmeme rağmen  kurguyu yaparken atlamışım.

Number = PulsIn PORTA.1,1


ne iş yapar? iki okuma arasında porta uygulanan darbeleri mi sayar?
eğer öyle ise :
sorun number değişkeninin içeriğinde mi? doksa bu sayıyı göndermede mi?
darbe sayısının doğru geldiğine emin miyiz?. 
dervrede bir display var mı? Varsa oradan number değişkeninin içeriğini görebiliyor muyuz?

merener

#4
Pulsin PORT,1 yaptıgımızda belirtilen portdan gelen pwm high oldugu zaman saymaya baslıyo. Pulsin komutu kullanıp word tanımlı bir degişkene eşitlediğimde düzgün çalışıyor hatta rf olmadan servo ve dc motor kontolünü etkili bir şekilde yapabiliyorum. O komutu bulana kadar accelerometerdan gelen pwm i decimal bir degere map etmek için baya ugrasmıstım ama bu komut cok kolaylastırıyor işimi. Ama bilmediğim bir ayrıntı varsa bu komutta onu bilemiycem. Bu arada 2 tarafta da lcd ye degerleri yazdırıyorum.

merener

Sorun çözüldü. Modülleri udeanınkilerle degiştirip veriyi transmit etmeden önce preamble de gönderince halloldu.

mustafa_cmbz

kodlari incelemedim ama bahsettiğin moduller ile daha önce çalıştım.alıcı taraftaki modulun cikisi acayip kararsiz.bu yuzdem preamble sinyalini ne kadar uzun gondrerirsen okadar idir.