Seri iletişim problemi

Başlatan baran123, 11 Mart 2014, 23:56:34

baran123

Merhaba 2 adet 877A kullanarak seri iletişim yapmaya çalışıyorum bu bölümdeki bir arkadaşın uygulamasını değiştirerek denedim fakat bir problem var anlayamadım (2 sinede 4MHz kristal bağlı) ve anlayamadığım bir iki kod var açıklarsanız sevinirim

1)#use rs232(baud=600,parity=N,xmit=pin_C6,rcv=pin_C7,bits=8) bu satırdaki bölümler neye göre ayarlanır.
2)putc(0b01010101);
3)putc('X'); bu bildiğim kadarıyla karakter göndermek için
4)TX = bilgi gönderme
5)RX = bilgi alma
6)TX,RX Bağlantıları tersmi bağlanır birinden gönderdiğimizi diğeri alır şeklindemi ?

verici
#include <16F877A.h>
#device adc=16
#fuses NOWDT,XT,NOBROWNOUT,NOLVP,PUT,CPD,NOWRT,PROTECT,NODEBUG
#use delay(clock=4M)
#use rs232(baud=600,parity=N,xmit=pin_C6,rcv=pin_C7,bits=8)

void main()
{
   while(TRUE)
   {
      set_tris_b(0xFF);
      output_b(0x00);
      
      if(input(pin_b6)==1)
      {
         delay_ms(500);
         putc(0b01010101);
         putc('X');
         putc('A');
         delay_ms(50);
      }
      
      if(input(pin_b7)==1)
      {
         delay_ms(500);
         putc(0b01010101);
         putc('X');
         putc('B');
         delay_ms(50);
      }
   }
}


alıcı
#include <16F877A.h>
#device adc=16
#fuses NOWDT,XT,NOBROWNOUT,NOLVP,PUT,CPD,NOWRT,PROTECT,NODEBUG
#use delay(clock=4M)
#use rs232(baud=600,parity=N,rcv=pin_c7,bits=8,stop=1,invert)

int i;
char e;

void main()
{
   set_tris_b(0x00);
   output_b(0x00);
   
   while(TRUE)
   {
      if(getch()=='X')
      {
         e = getch();
         
         if(e=='A')
         {
            for(i=0;i<=4;i++)
            {
               output_high(pin_b0);
               delay_ms(250);
               output_low(pin_b0);
               delay_ms(250);
            }
         }
         
         if(e=='B')
         {
            for(i=0;i<=4;i++)
            {
               output_high(pin_b1);
               delay_ms(250);
               output_low(pin_b1);
               delay_ms(250);
            }
         }
      }
   }
}


devre şeması
http://i.hizliresim.com/Kl6NWk.png

Recep METE

Arkadaşım "isis" te denerken "invert" komutu kaldırıp isiste öyle dene.İnvert komutuyla isiste çalışmıyor.Breadboarda devre kurduğunda, gerçek devrede "invert" komutu ekle öyle çalıştır.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

#2
Tamamdır oldu küçük bir sorum var devrede anten olarak ne kullanmam lazım bide baud değerinde değişikliğe gerek var mı ?

teşekkür eder iyi çalışmalar dilerim :)

Recep METE

17 cmlik tek damar kablo olabilir.baud ayarlarini istersen değiştirebilirsiniz ama gerek yok.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

RF Alıcı ve vericiyi de 5v la beslesem bir problem yaşarmıyım herhangi bir dirence falan gerek var mı ?

Recep METE

Alıntı yapılan: baranekrem9 - 12 Mart 2014, 01:05:33
RF Alıcı ve vericiyi de 5v la beslesem bir problem yaşarmıyım herhangi bir dirence falan gerek var mı ?
Hayır bir problem olmaz. Datasheetlerini inceleyebilirsiniz. Direnç kullanılmıyor.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Binary olarak gonderdigimiz putc komutu uyandirma komutumu oluyor her seferinde gondermek sartmi ?

Recep METE

Alıntı yapılan: baranekrem9 - 12 Mart 2014, 12:51:36
Binary olarak gonderdigimiz putc komutu uyandirma komutumu oluyor her seferinde gondermek sartmi ?

TX :  preamble + sencron + data1+.....+dataX

  Burada ki preamble uyandırma kodudur. Yani alıcı data almadığı durumlarda uyku durumundadır. Hiçbir işlem yapmaz. Bunun için öncelikle bir uyandırma kodu gönderilir ve alıcı uyandırılır. Bu kod şu şekil olabilir;  01010101.  Yada kitin datasheet 'inden farklı uyandırma kodlarıda gönderebilirsiniz. 
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d