UDEA sorunsalları

Başlatan Eren Eraslan, 16 Temmuz 2013, 23:34:36

Eren Eraslan

edit: önceki sıkıntımı çözdüm fakat şimdi vericiden gönderdiğim datayı alıcı güzelce okuyor ve röleyi tetikliyip kesiyor fakat vericiden tekrar gönderdiğimde rölede kıpırdama yok
daha da abartıp verici sadece X datası gönderirken alıcıda X görürsen röleyi aç kapa diyorum fakat iki kere açıp kapatıyor bazen 3 kere kafasına göre , hatayı nerede yapıyorum ?

verici
#include <16F877A.h>

#use delay(clock=20000000)


#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPUT                    //No Power Up Timer
#FUSES NODEBUG                  //No Debug mode for ICD

#FUSES NOWRT                    //Program memory not write protected

#use rs232 (baud=2400,xmit=pin_C6, rcv=pin_C7)

#use fast_io(b)



void main()
{
set_tris_b(0b00100000);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
output_high(pin_b1);
output_high(pin_b0);
delay_ms(111);
output_low(pin_b1);
output_low(pin_b0);
delay_ms(111);
output_high(pin_b1);
output_high(pin_b0);
delay_ms(111);
output_low(pin_b1);
output_low(pin_b0);
delay_ms(111);

while (1) {
if(input(pin_b5)==0)
{
putc(0b01010101);       //wake up buddy

putc('X');              //i am coming from x 
//putc('A');              //thats what i want to send
//delay_ms(10);

      
     
   }
}


alıcı

#include <16F628.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(crystal=20000000)


#use fast_io(b)
int i;
CHAR n,ilk;
#use rs232 (baud=2400,xmit=PIN_B2, rcv=PIN_B1)
void main()
{
set_tris_b(0b00000010); 
  output_b(0x00);


       
   while(true)
   {
if(getc()=='X')
{ 


       output_toggle(PIN_B0);
       delay_ms(100);
      reset_cpu();
      
       
}

}

   
   }

//}
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

AsHeS

Alıntı yapılan: ereneraslan7 - 16 Temmuz 2013, 23:34:36
Udeanın kitini kullanıyorum alıcı kısmında skopa baktım gönderdiğim datanın aynısı fakat Lojik-1 olarak 5V Lojik-0 olarak 2.5V arasında gidip gelmektedir. Sanırım sorunun baud dan ziyade lojik sorunsalı. Neden böyle oldu sizce kit mi bozuldu?
Lojik 1-0 ların düzgün geldiğini düşünüyorsanız karşılaştırıcı ile problemi çözebilirsiniz.

Eren Eraslan

hocam udealardan hiç böyle sıkıntı yaşamamıştım ama bugün cidden beni çok yordular, 2. kiti taktım hala aynı neden 0 a çekmiyor kendini acaba
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

Eren Eraslan

yardım edebilecek yok mu cidden çok yoruldum şu udealardan
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

LukeSkywalker

#4
Hocam çok hata var veri gonderim kisminizda. İmzamdaki siteye girip incelemeler kismindan udea modulleri ile ilgili makalemi okumanizi tavsiye ederim.

Edit: incelemeler değil projeler kismindan bakmalisiniz.

mesaj birleştirme:: 17 Temmuz 2013, 21:57:31

Ayrica veri alma kismini su sekilde yapmaniz lazim
char gelen;
.
.
.
gelen=getch();
if(gelen=='X')
{
.
.
.
}

RaMu

Yapılan uyarılara ek olarak.


if(input(pin_b5)==0)   bunun yerine,

buton kontrolünü debounce etkisini hesaba katarak kısa bir bekleme ile
ve butonun bırakılması şartınıda ekleyerek yapsan daha sağlıklı olur.

Ve ardarda veri gönderirken uyan ile X arasına biraz bekleme koysan.
(bence gerek yok ama denemek lazım)

Olmazsa baud rate i düşürüp denesen misal 600 ile.

Aslında uyandırma kısmında 5 byte $AA , 5 byte $FF ve 5 byte $00
gönderirsen sıkıntı çıkmaz.
(ete hocadan öğrenip uygulamıştım,
çok işe yarıyor, ete hocaya tekrar teşekkür ediyorum)
Şimdi diyebilirsin altı üstü 1 byte veri gönderecem nereden çıktı bu 15 byte,
senin bileceğin iş derim, ben denedim çok sağlıklı sonuçlar veriyor.
Ayrıca rf modüller sürekli 1 sürekli 0 da kalmayı sevmezler,
misal ardarda 15 byte 0 göndermeye kalksan sıkıntı çıkabilir,
bunun yerine göndermeler manchester coding ile yapılmalı,
neyse bu daha sonraki iş.


Birde çoğu yerde bu konu anlatılıyor ve birçok örnek var,
başka çalışan bir örnekde deneyebilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

omereliusuk

tampon eğer yeni veri gelmişse ve okunmamışsa kilitlenir(tamponda en fazla iki byte bekletilebilir. 3. byte gelmişse ve tampon okunmamışsa kilitlenir). donanımsal olarak haberleşme yaptığınızı varsayıyorum.

#use rs232 (baud=2400,xmit=pin_C6, rcv=pin_C7,errors)

veya bir başka yöntem var ama uzun. öyle bir cevap yazdığımı hatırlıyorum.

grkmsngr

Bende vericideki buton ile ledi yakıyorum alıcıdaki buton ile de söndürüyorum fakat vericideki buton ile tekrar ledi açamıyorum de