merhaba hocalarım,
pic ile rf alıcı devre yaptım, çözemediğim 2 sorunum var.
Birincisi pic sürekli rda kesmesine giriyor kumandadan bilgi yollamasam bile ? parazitten mi etkileniyor ? hazır kumanda aldım, kumandanın gönderdiği kodu bildeğim için kemeye girince işlemi yapmaya çalıştım ama sürekli kesmeye giriyor bunun nedeni ne olabilir ?
ikincisi ise aldığım hazır kumanda şu ;
http://www.robotistan.com/433-MHz-1-Kanal-RF-Elcik-Kumanda,PR-1792.html (http://www.robotistan.com/433-MHz-1-Kanal-RF-Elcik-Kumanda,PR-1792.html)
bunun gönderdiği kodu arduinoya bir rf alıcı bağlayıp seri monitöre yollayarak yapmaya çalıştım ama yine bulamadım. gönderdiği bilginin baud ratesi nedir ne değildir onu bile bilmiyorum.
bu konudaki fikirleriniz nedir ?
#include <16F877a.h>
#FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NOPROTECT //Code not protected from reading
#use delay(crystal=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
int a=0, b=1;
const int digit[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; //ortak katot display için port çıkışları
char c;
#INT_RDA
void RDA_isr(void)
{
output_b(digit[a]);
delay_ms(1000);
a=a+1;
}
}
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
set_tris_b(0x00);
output_b(0x00);
set_tris_c(0xFF);
set_tris_a(0x00);
set_tris_d(0x00);
output_high(pin_a0);
output_high(pin_a1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
while(TRUE)
{
}
}
kod böyle olunca sayı sürekli artıyor.
#include <16F877a.h>
#FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NOPROTECT //Code not protected from reading
#use delay(crystal=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
int a=0, b=1;
const int digit[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; //ortak katot display için port çıkışları
char c;
#INT_RDA
void RDA_isr(void)
{
c=getch();
if(c=="asasa"){
output_b(digit[a]);
delay_ms(1000);
a=a+1;
}
}
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
set_tris_b(0x00);
output_b(0x00);
set_tris_c(0xFF);
set_tris_a(0x00);
set_tris_d(0x00);
output_high(pin_a0);
output_high(pin_a1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
while(TRUE)
{
}
}
böyle olunca da hiçbir işlem yapmıyor.
kodlarda kesme içinde işlem yapmamam lazım biliyorum sadece uğraşmaktan yorulduğum ve kodları sürekli değiştirdiğim için kesme içinde bekleme koydum veya işlem yaptım.
"gönderdiği bilginin baud ratesi nedir ne değildir onu bile bilmiyorum."
Bunu bilmeden olmaz.
char c;
c=getch();
if(c=="asasa")
CCS c help de getch() return değeri 8 bit diyor yani string ile karşılaştıramazsınız.
hocam tek karakter kullandım yine aynı. nereden gidebilirim nasıl yapabilirim peki hocam ?
Tek karakterden ziyade "s" değil 's' olmalı.
Adım adım gitmek gerekli
C portunda RX ve TX bulunuyor.RX pini giriş olmalı TX çıkış olmalı.(sanırım
@Tagli hocam demişti TX de giriş olabilir diye tam hatırlamıyorum)
Önce RX giriş TX çıkış ayarlayın.
Sonra kumandanın datasheetini - dökümanını bulun.Ne gönderiyor nasıl gönderiyor bunu anlayalım.
kodu basitleştirin.Elinizde var ise 628A kullanın teferruatı azdır.
Mesela kumanda 9600 8N1 de A göndersin.
//mesela
#INT_RDA
void RDA_ISR(void)
{
c=getch();
if(c== 'A')
{
//biraz bekle ve led yak
}
Kumandanın üzerindeki yazı-kodlardan dökümanını bulmaya çalışabilirsiniz.
hocam ilk olarak yaptığım devrede 6 tane 7 segment, 2 sensör, 2 tane de display kullandığım için pin sayısı yetmiyor.
zaten " kullanınca derleme hatası veriyor ccs c.
döküman olarak hiçbirşey bulamadım hocam. yarın robotistanı arayıp soracağım ama pek umudum yok. kumandanın üstünde de hiçbirşey yazmıyor.
baskı devrede de bir sorun yok gibi pinler doğru duruyor. iletim var. sorun yok.
kullandığım alıcı ise ;
http://cdn.sparkfun.com/datasheets/Wireless/General/RWS-371-6_433.92MHz_ASK_RF_Receiver_Module_Data_Sheet.pdf (http://cdn.sparkfun.com/datasheets/Wireless/General/RWS-371-6_433.92MHz_ASK_RF_Receiver_Module_Data_Sheet.pdf)
mesaj birleştirme:: 05 Temmuz 2015, 03:49:25
anlamadığım bir soru ise pic neden sürekli kesmeye giriyor ?
bu arada kumandanın butonuna bastığımda ve elimi çektiğimde alıcı data bacağında gerilimde değişmeler oluyor (aynı şekilde bağlı olduğu pic rx bacağında da değişmeler oluyor). yani alıcıda da sorun yok gibi.
mesaj birleştirme:: 05 Temmuz 2015, 03:52:21
aklıma gelmişken yarın pazar robotistanı arayamam :D
Bu tip el kumandaları içerisinde PT2262 bulunur. Alıcı
için de PT2272 bulunan hibrid olması gerekir...
Sanki rf alıcı/verici yokmuş gibi yaptığınız sistem yerine
alıcıdaki çıkış uçlarını devrenize girmeniz yeterlidir.
http://www.google.com.tr/imgres?imgurl=http://www.satistronics.com/userfiles/image/Module%252520%2526%252520Kits/PT2272M4.jpg&imgrefurl=http://www.satistronics.com/4ch-superregenerative-decode-receiver-module-pt2272l4pt2272m4sc2272t4_p2893.html&h=567&w=992&tbnid=vxteFQx7MbPdxM:&zoom=1&docid=iFSrkOW5lRZSaM&ei=8n6YVZeXHIHvUoyJtqAO&tbm=isch&ved=0CBsQMygBMAE&biw=1104&bih=593 (http://www.google.com.tr/imgres?imgurl=http://www.satistronics.com/userfiles/image/Module%252520%2526%252520Kits/PT2272M4.jpg&imgrefurl=http://www.satistronics.com/4ch-superregenerative-decode-receiver-module-pt2272l4pt2272m4sc2272t4_p2893.html&h=567&w=992&tbnid=vxteFQx7MbPdxM:&zoom=1&docid=iFSrkOW5lRZSaM&ei=8n6YVZeXHIHvUoyJtqAO&tbm=isch&ved=0CBsQMygBMAE&biw=1104&bih=593)
http://www.google.com.tr/imgres?imgurl=http://www.digibay.in/image/cache/data/sachinelectronics/SE-ED01-09-0104-A-600x600.jpg&imgrefurl=http://www.digibay.in/wireless/rf-ism&h=600&w=600&tbnid=ZpqwMlUNcGvyzM:&zoom=1&docid=_gdGbxV44NJMwM&ei=8n6YVZeXHIHvUoyJtqAO&tbm=isch&ved=0CBoQMygAMAA&biw=1104&bih=593 (http://www.google.com.tr/imgres?imgurl=http://www.digibay.in/image/cache/data/sachinelectronics/SE-ED01-09-0104-A-600x600.jpg&imgrefurl=http://www.digibay.in/wireless/rf-ism&h=600&w=600&tbnid=ZpqwMlUNcGvyzM:&zoom=1&docid=_gdGbxV44NJMwM&ei=8n6YVZeXHIHvUoyJtqAO&tbm=isch&ved=0CBoQMygAMAA&biw=1104&bih=593)
@mehmet hocam yanıtınız için çok teşekkür teşekkür ederim, baskı devreyi yaptım tekrardan baskı yapmam beni biraz zorlayacak gibi. Üstündeki modülü kullanarak bir şey yapamam mı ?
mesaj birleştirme:: 05 Temmuz 2015, 07:17:37
kumandanın içinde söylediğiniz entegre var hocam kartın üzerinde de au 401 - 1 rev 2010.12.31 yazıyor.
PT2262 ve PT2272 entegreleri işleri kolaylaştırmak
açısından kullanılır. El kumandasını kendiniz yaparsınız.
Buton, uC ve rf verici kullanmanız gereklidir.
Hazır el kumandası ve alıcısını kullanırsanız sadece
buton kullanıyormuşsunuz gibi işlem yaparsınız...
hocam bir konuda ete hocam şöyle birşey yazmış ;
Alıntı YapPT2262 ve PT2272 nin hem adres hemde data bacakları mevcuttur.
Adres bacakları genelde şifre ayarlamak için kullanılır. Data bacaklarıda bu amaçla kullanılabileceği gibi verici ve alıcı karşılklı ayarlanarak birden fazla alternatifle çıkış alınabilir. Önce birinci alternatife bakalım.
12 adet adres ve data bacağı mevcut olup şayet bir haberleşme yapıldığında her iki tarafta adres ve data bacakları aynı şekilde ayarlanmış ise PT2272 nin VT bacağından high çıkışı verilir. Şayet bacakların ayarı bir birini tutmuyor ise bu bacakta daima Low mevcuttur. Şimdi şifre uyumu var ise VT bacağı High vereceği için bu bacak direk bir pic bacağına bağlanabilir. Ancak dikkat edilmesi gereken nokta PT2272 nin de 5V ile beslenmesi ve böylece PT2272 çıkışından 5V seviyesinde bir sinyal alınmasıdır. Şayet farklı voltaj ile besleniyor ise gerilim bölücü ile VT çıkışı 5V seviyesine düşürülüp pice girilmelidir.
Bu şekilde pic ile haberleşmenin yada şifrenin doğruluğu test edilebilir.
bu gönderici şifresini çözmem mümkün mü ? yani adres bacaklarına ne bağlı olduğunu bulabilirmiyim ?
Cesitli baudlarda deneyip gelen veriyi direk ekrana yaz.Ard arda ayni veriyi alabiliyorsan okey ama her seferinde yanlis geliyorsa baud degistirip dene :)
Değerli hocalarım, bir tane usb ttl dönüştürücü aldım ve terminal ekranında gelen kodları inceledim. 7200 baud rate de kumandadan gelen verinin '8' olduğunu gördüm. Buraya kadar sorun yok. Gözüme çarpan başka birşey ise terminal ekranına kumandaya basmadığım zamanda bile çok fazla veri geliyor. Aralarından birçok da anlamlı karakter çıkıyor. Bu parazitler yüzünden pic sürekli kesmeye giriyor. Bu parazitlerden kurtulmamın bir yolu var mı ? Pic in sürekli kesmeye girmesi sanırım program akışında sorunlara neden olacak. Ben alıcı modülün bacağına pic e direk bağladım arada herhangi bir eleman kullanmama gerek var mı ? Teşekkürler
Alıntı yapılan: Emre MERMİ - 11 Temmuz 2015, 14:51:57
Değerli hocalarım, bir tane usb ttl dönüştürücü aldım ve terminal ekranında gelen kodları inceledim. 7200 baud rate de kumandadan gelen verinin '8' olduğunu gördüm. Buraya kadar sorun yok. Gözüme çarpan başka birşey ise terminal ekranına kumandaya basmadığım zamanda bile çok fazla veri geliyor. Aralarından birçok da anlamlı karakter çıkıyor. Bu parazitler yüzünden pic sürekli kesmeye giriyor. Bu parazitlerden kurtulmamın bir yolu var mı ? Pic in sürekli kesmeye girmesi sanırım program akışında sorunlara neden olacak. Ben alıcı modülün bacağına pic e direk bağladım arada herhangi bir eleman kullanmama gerek var mı ? Teşekkürler
Sağlıklı ve kısa yoldan cevap almak istiyorsan ,Şema-program-varsa kart resmini buraya koy,
CCS C'de manchester code denedim çalışıyor parazit'de almıyor.
TX
#include <12F683.h>
#device ADC=16
#include <string.h>
#include <stdlib.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR
#use delay(internal=4000000)
#use rs232(baud=1200,parity=N,xmit=PIN_A5,bits=8,stream=PORT1)
#define LED PIN_A4
#define DELAY 1000
char durum="N";
#INT_EXT
void EXT_isr(void)
{
if(input(PIN_A2)) durum="A";
else durum="N";
}
void SEND_DATA(BYTE txbyte)
{
int i,j,b,me;
b = txbyte;
for (i=0; i<2; i++) {
me = 0; // manchester encoded txbyte
for (j=0 ; j<4; j++) {
me >>=2;
if (bit_test(b,0) )
me |= 0b01000000; // 1->0
else
me |= 0b10000000; // 0->1
b >>=1;
}
putc(me);
delay_ms(50);
}
}
main() {
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(1)
{
// sleep();
if(input(PIN_A2))
{
output_high(LED);
delay_ms(DELAY);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0xFF);
putc(0xFF);
putc(0xFF);
putc(0xFF);
putc(0xFF);
putc(0xF0);
SEND_DATA('H');
SEND_DATA(durum);
putc(0xF0);
putc(0xF0);
output_low(LED);
delay_ms(DELAY);
}
}
}
RX
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(internal=4000000)
#define LED PIN_B3
#define DELAY 1000
#use rs232(baud=1200, parity=N, xmit=pin_B2, rcv=pin_B1, bits=8)
#use rs232(baud=9600, parity=N, xmit=pin_B5, rcv=pin_B4, bits=8,stream=PORT1)
char c,a,i,dec,dec1,dec2,enc,pattern,son,j;
char nib[2]; //
char x;
BYTE DECODE_DATA() //decode function for machester encoded data. This code is working fine. I checked it.
{
enc = nib[0];
if (enc == 0xf0) // start/end condition encountered
return 0xf0;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // illegal code
enc >>=2;
dec1=dec;
}
enc = nib[1];
if (enc == 0xf0) // start/end condition encountered
return 0xf0;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // illegal code
enc >>=2;
dec2=dec;
}
dec2<<=4;
son=dec1|dec2;
x=0;
dec=0;
dec1=0;
dec2=0;
return (son);
}
#int_rda
void komut_al() //interrupt for receiving manchester coded data
{
disable_interrupts(int_rda);
c=getc();
if (x<2)
nib[x]=c; // assign low and high nibble of data
x=x+1;
enable_interrupts(int_rda);
}
main()
{
x=0;
nib[0]=0;
nib[1]=0;
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
while(1)
{
if (x>1)
{
x=0;
a=DECODE_DATA();
if (a=='H')
{
fprintf(PORT1,"GELEN=%c\r\n",a);
}
if (a=='N')
{
fprintf(PORT1,"NORMAL-%c\r\n",a);
}
if (a=='A')
{
fprintf(PORT1,"ALARM-%c\r\n",a);
}
enable_interrupts(int_rda);
}
}
}
Hocam benim göndericim sabit olduğu için gönderici kodunu değiştiremiyorum. Nasıl yapabilirim ?
Alıntı yapılan: ismail kaya - 12 Temmuz 2015, 01:38:39
CCS C'de manchester code denedim çalışıyor parazit'de almıyor.
TX
#include <12F683.h>
#device ADC=16
#include <string.h>
#include <stdlib.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR
#use delay(internal=4000000)
#use rs232(baud=1200,parity=N,xmit=PIN_A5,bits=8,stream=PORT1)
#define LED PIN_A4
#define DELAY 1000
char durum="N";
#INT_EXT
void EXT_isr(void)
{
if(input(PIN_A2)) durum="A";
else durum="N";
}
void SEND_DATA(BYTE txbyte)
{
int i,j,b,me;
b = txbyte;
for (i=0; i<2; i++) {
me = 0; // manchester encoded txbyte
for (j=0 ; j<4; j++) {
me >>=2;
if (bit_test(b,0) )
me |= 0b01000000; // 1->0
else
me |= 0b10000000; // 0->1
b >>=1;
}
putc(me);
delay_ms(50);
}
}
main() {
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(1)
{
// sleep();
if(input(PIN_A2))
{
output_high(LED);
delay_ms(DELAY);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0xFF);
putc(0xFF);
putc(0xFF);
putc(0xFF);
putc(0xFF);
putc(0xF0);
SEND_DATA('H');
SEND_DATA(durum);
putc(0xF0);
putc(0xF0);
output_low(LED);
delay_ms(DELAY);
}
}
}
RX
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(internal=4000000)
#define LED PIN_B3
#define DELAY 1000
#use rs232(baud=1200, parity=N, xmit=pin_B2, rcv=pin_B1, bits=8)
#use rs232(baud=9600, parity=N, xmit=pin_B5, rcv=pin_B4, bits=8,stream=PORT1)
char c,a,i,dec,dec1,dec2,enc,pattern,son,j;
char nib[2]; //
char x;
BYTE DECODE_DATA() //decode function for machester encoded data. This code is working fine. I checked it.
{
enc = nib[0];
if (enc == 0xf0) // start/end condition encountered
return 0xf0;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // illegal code
enc >>=2;
dec1=dec;
}
enc = nib[1];
if (enc == 0xf0) // start/end condition encountered
return 0xf0;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // illegal code
enc >>=2;
dec2=dec;
}
dec2<<=4;
son=dec1|dec2;
x=0;
dec=0;
dec1=0;
dec2=0;
return (son);
}
#int_rda
void komut_al() //interrupt for receiving manchester coded data
{
disable_interrupts(int_rda);
c=getc();
if (x<2)
nib[x]=c; // assign low and high nibble of data
x=x+1;
enable_interrupts(int_rda);
}
main()
{
x=0;
nib[0]=0;
nib[1]=0;
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
while(1)
{
if (x>1)
{
x=0;
a=DECODE_DATA();
if (a=='H')
{
fprintf(PORT1,"GELEN=%c\r\n",a);
}
if (a=='N')
{
fprintf(PORT1,"NORMAL-%c\r\n",a);
}
if (a=='A')
{
fprintf(PORT1,"ALARM-%c\r\n",a);
}
enable_interrupts(int_rda);
}
}
}
mesaj birleştirme:: 12 Temmuz 2015, 01:47:18
Hocam şema ve program yollamamın sebebi devrede hiçbirşey kullanmamam, yani şuan sadece pic e gelen parazitin nedenini anlamk istiyorum. Aynısı usb ttl dönüştürücüde de aynısı oluyor. Rf nin data bacağını direk olarak rx pinine bağlıyorum.
Alıntı yapılan: EGE - 11 Temmuz 2015, 15:32:58
Sağlıklı ve kısa yoldan cevap almak istiyorsan ,Şema-program-varsa kart resmini buraya koy,
yolladığım kodda TX olan 12f683+DRA887TX 433mhz RF MODÜL(yada farketmez)+buton ile yapabilirsin. Ama hazır kumanda ile yapmak istiyorsan önce kumandanın yolladığı bilgiyi bilmen gerekir. Arduino ile http://www.princetronics.com/how-to-read-433-mhz-codes-w-arduino-433-mhz-receiver/ (http://www.princetronics.com/how-to-read-433-mhz-codes-w-arduino-433-mhz-receiver/) burada kumandanın ne bilgisi yolladığını çözüyor. Senin kumandanın ne bilgisi yolladığını bu şekilde öğrenirsen yardımcı oluruz.
Usb ttl kullanarak kodu çözdüm, modül '8' yolluyor ama haricinde bir sürü parazit görünüyor. Yarın bilgisayar başına geçince size ekran görüntüsünü atayım. Belki daha açık olur.
@ismail kaya hocam dediğinizi yaptım gelen kod şöyle;
Received 5592405 / 24bit Protocol: 1
buradan devreye ekleyip tekrar deneyeceğim kodu en kısa sürede sonucu size bildircem. çok sağolun
(http://s30.postimg.cc/k96vzm4il/Ads_z.jpg) (http://postimg.cc/image/k96vzm4il/)
sayın hocalarım çok soru soruyorum ama bu kadar parazit normal mi ? bu arada kumandaya bastığım zaman 8 yolluyor.
Birde bu paraziti nasıl engellerim ?
gayet normal. Ama int_rda içinde aldığın değer gelen veriye eşit değilse yazdırmasın.
Modül '8' yolluyor hocam. Parazitlerde de 8 var. Bu yüzden benim istemim dışında işlem yapıyor. Mesela ben gelen 8 leri topluyorum 32 olunca işlem yapıyorum ama yine de kendi kendine başlıyor. Nasıl engel olabilirim ?
mesaj birleştirme:: 14 Temmuz 2015, 02:40:04
char veri=0;
#INT_RDA
void RDA_isr(void)
{
if(veri=='8'){
a1=a1+1;
veri=0;
}
if(a1==20){
a=0;b=0;c=0;d=0;e=0;f=0;
}
}
kumandaya basdığın sürece'8'mi yolluyor
El kumandası kodlamasını PT2272 olmadan çözmeniz biraz zor...
Evet hocam kumandaya bastığım sürece 8 yolluyor. Ayrıca etraftaki parazitlerden de 8 geliyor. Wireless mousedan bile etkileniyor
#INT_RDA
void RDA_isr(void)
{
gelen = getc();
//gerekliyse birkaç ufak işlem,
//gerekliyse putc( gonderilecek_deger );
//not: disable interrupts ve clear interrupt kullanmaya gerek yoktur.
//kesmede fazla işlem yapılmamalıdır, delay kullanmaktan kaçınılmalıdır.
}
Kesmede getc ile veri alınmalı.
Parazitin çevreden kaynaklandığını düşünüyorsanız,
önce verici yokken alıcıyı deneyin,
sonra alıcıyı metal kafes içine alıp deneyin,
alıcı metal kafesdeyken yine parazit varsa güç kaynağı vs. de problem olabilir.
Daha sonra alıcı ve verici metal kafese alınıp denenebilir.
Ama ben rf alıcı vericide parazit problemi yaşamadım.
En son 3 verici 1 alıcılı bir devre yaptım ondada problem olmadı.
@RaMu hocam dediklerinizi yaptım sorun devam etti. Deneme yaparken kumandanın 1200 baudratede anlamsız karakterlerin arasında 'N' yolladığını fark ettim. Programı ona göre yazdım. Sorun ortadan kaltı. Parazit olarak da 'N' çok az geldiği yada hiç gelmediği için sistem kararlı çalışıyor şimdilik. Yardım eden herkese teşekkür ederim.