İki pic arası seri iletişim lcd veri göndermeve basma ccs c

Başlatan Elektrik2012, 25 Ağustos 2013, 21:47:30

Elektrik2012

Merhaba ismim nurullah 16 yaşındayım.foruma yeni katıldım.Pic haberleşmeye daha yeni başladım.yapmak istedigim iki tane pic var bu piclerden 1. alfabenin harflerini yollacak rx ve tx ucundan diğer pic bunu rx tx ucundan alıp lcd göstercek yapmak istedigim bu fakat internette forumlarda araştırdım hep rs232 bilgisayardan veri göndermişler sadece örnek bi program lcd yazı basmak için rx tx ucundan Şimdiden Çok teşekkür ederim

Bayramsumbul

Merhabalar....Dediğinizi Anladım Sayılır.Fakat Anlamadığım 1.Pic'ten Daha Önce Belirli Harfler mi Gidecek?
Kullandığınız Mcu Hangisidir?Yarın Bir Kod Yazmaya Çalışırım.İyi Çalışmalar...(Bu Arada Google->two pic communication with uart)
Bir Elektronik Meraklısının Serüveni...

Elektrik2012

İlgilendiginiziçin çok teşekkür ederim.16f877 kullanmayı düşünüyorum.Ben 1 picin içine bi program atıcam Alfabenin harflerini rx ve tx ucundan yolayacak idğer 2 pice bağlı lcd bu veriyi alcak lcd bascak yani 1 pic veri yolluycak 2 pice bağlı lcd bascak Çok teşekkür ederim

ziyaretci


Elektrik2012

ilgilendiginiz için teşekkürler hemen inceliyorum.Bi program yazdım kodları ekliyorum
biraz araştırmam sonuncda bi şeyler yazdım fakat gene olmadı programı ısıs dosyasını bir atıyım bakarmısınız  acaba gözden kaçırdıgım bi şey mi var ?Isıs dosyasını nasıl atabilirim göremedim dosya ekle gözükmüyor :D
Seri iletişim alıcı
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay(clock=4M)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>     // lcd.c dosyası programa ekleniyor

#use rs232 (baud=2400,rcv=pin_C7,stop=1,parity=n)  // RS232 ayarları yapılıyor

char data[16]; // dizi tanımlanıyor

void main ()
{   
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   
   lcd_init(); // LCD hazır hale getiriliyor
  
   while(1) // Sonsuz döngü
   {
         gets(data);                   // RX ucuna gelen veriyi al
         printf(lcd_putc,"\f%s",data); // LCD'ye alınan string ifadeyi gönder
      
      
        
      }
   }


verici 
#include <16f877.h>  
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD 
#use delay(clock=4M)  
#use rs232(baud=2400, xmit=PIN_C6, stop=1, parity=n)  // RS232 iletişim ayarları yapılıyor
void main ()
{   
   setup_psp(PSP_DISABLED);        
   setup_timer_1(T1_DISABLED);     
   setup_adc_ports(NO_ANALOGS);    
   setup_adc(ADC_OFF);             
   setup_CCP2(CCP_OFF);            
       
   while(1) // Sonsuz döngü
   {
     puts(Seri iletişim);
     printf("SERİ İLETİSİM\r");   // Seri port çıkışından (TX) bilgi gönderiliyor
          
   }  
}
İlgilendiginizz için çok teşekkür ederim

Gökhan BEKEN

Neden rs232 ile haberleştirmek istiyorsunuz? Özel bir sebebi var mı?
SPI veya I2C ile haberleştirmek belki daha iyi çözüm olabilir.
SPI yaparsanız sadece 2 pici değil daha fazla pic'i hem alıcı hem veri olarak haberleştirebilirsiniz. RS232 de bunu yapabilirsiniz ancak diğer picler sadece alıcı olabilir , hem alıcı hem verici olamaz. Ayrıca spi hem i2c den hem rs232 den daha hızlıdır.

Eğer RS232 kullanırsanız , uart modülünüz diğer pic'e bağlı olduğundan PC ile rs232 üzerinden haberleşemezsiniz.(Donanımsal olarak)

Neyse rs232 ile yapmak istiyorsanız, alıcı pic'e kesme fonksiyonu yazın, herhangi bir anda veri gelirse LCD felan gösterebilirsiniz. Aynı baudrate olsun yeter.

Burda örnek kodlar ve bilgiler var: https://www.picproje.org/index.php?topic=37239.0

mesaj birleştirme:: 28 Ağustos 2013, 14:13:27

Bu arada rs232 ile hazır yapılmışı varmış: http://elektrobilim.org/forum/pic-uygulamalari/6891-3-tane-picin-birbirleriyle-karsilikli-haberlesmesi.html
Özel mesaj okumuyorum, lütfen göndermeyin.

Elektrik2012

ilgilendiginiz için çok teşekkür ederim hayır özel bir sebebim yok fakat pic 2 hat yada tek hat ile gitmesini istiyorum.Rx ve tx ucu ile bira daha çalışıcam olmassa spı yada ıc2 geçicem peki yazdıgım kod neresine ekliycem bu dediginizi? pic kesme fonksiyonunu Daha acemiyim K.bakmayın :D İnşallah öğrenicem bu işi  :D

Bayramsumbul

char gelen_karakter;
void interrupt ()//Burayı Hatırlamıyorum Kesme Fonksiyonun İsmi Değişik Olabilir.
{
RCSTA&=!0x10;//Continuous Receive Olmayacak
PIR1&=!0x10;//RCIF Bayrağı Silindi
gelen_karakter=RCREG;//Gelen Bilgi Bir Yere Yazıldı.
RCSTA|=0x10;//Continuous Receive Olacak
}
int main()
{
PIE1|=0x10;//Kesme Aktif
digerayarlar();
while(1){lcdgonder();}
}

Ağabeylerim Düzeltebilir Böyle Olması Gerek.İyi Çalışmalar
Bir Elektronik Meraklısının Serüveni...

Elektrik2012

İlgilenen bütün aarkaşalaar abilerime çok teşekkür ederim ama sorunum hala devam ediyor D:

Bayramsumbul

Merhabalar...Alıcı Kısmının Kodunu Bugün Bir El Atmaya Çalışırım.İyi Çalışmalar...
Bir Elektronik Meraklısının Serüveni...


Elektrik2012

Sizin yardımlarınızla  geldigim son nokta 3 tane buton 1 butona basınca lcd seri iletişim 2 butona basınca alfebenim harflerini 3 butpna basınca pic programlamaya başlatan abime teşekkrülerimi sundum :D.Pic proje nasıl dosya ekliycez çizdigim simülasyonu vs koycam ama bulamadaım :D
Verici 
#include <16f877.h>
#fuses xt,nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput
#use delay(clock=4M)
#use rs232(baud=2400,parity=N,xmit=pin_c6,rcv=pin_c7)
void main()
{
while(1)
{
set_tris_b(0x03);
output_b(0x00);
if(input(pin_a0)==1)
{
putc(0b01010101);
putc('X');
putc('A');
delay_ms(50);
}
if(input(pin_a1)==1)
{
putc(0b01010101);
putc('X');
putc('B');
delay_ms(50);
}

if(input(pin_a2)==1)
{
putc(0b01010101);
putc('X');
putc('C');
delay_ms(50);
}


}
}


Alici
#include <16f877a.h>
#fuses xt,nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput
#use delay(clock=4M)
#use rs232(baud=2400,parity=N,rcv=pin_D1)
#define use_portb_lcd TRUE
#include <lcd.c>
char e;

void main()
{
set_tris_b(0x00);
lcd_init();
while(1)
{
if(getch()=='X')
{
e=getch();
if(e=='A')
{

printf(lcd_putc,"\fSERI ILETISIM");

}
if(e=='B')
{
printf(lcd_putc,"\fABCDEGHIJKL");
printf(lcd_putc,"\nMNOPRSTUVYZ");
}
if(e=='C')
{
printf(lcd_putc,"\fEnGin AyGun\n SayGiLar ");
delay_ms(500);
printf(lcd_putc,"\f");
printf(lcd_putc,"\fDevami Gelecek ");




}
}
}
}



[jstex]Hepinize cok teşekkür ederim [/jstex]




Gökhan BEKEN

Tebrik ederim, dosya yüklemek için kullanabileceğiniz güzel bir site(basit bir üyelikten sonra yükleyebilirsiniz). dropbox.com
Özel mesaj okumuyorum, lütfen göndermeyin.

Elektrik2012

Hemen üye oldum dosyaları upload eetim fakat nasıl buraya koycam? baskılarına kadar hazır halde :D
şu şekildemi?
https://www.dropbox.com/s/ik89vkv3n1uamih/16f877%20rf%20verici%20alici%20lcd.rar

Gökhan BEKEN

Evet elinize sağlık çalıştırdım dediğiniz gibi çalışıyor.
Yalnız alıcı devrenin RX pinine(26 nolu pin) bağlanması daha iyi olurdu. Şu an yazılımsal rs232 ile çalışıyor.
Şimdi hem karşılıklı alışveriş yapan yazılımı yapmanızı tavsiye ediyorum.
2 devrede de aynı yazılım olacak.
Her hangi bir veri gelince LCD de gösterecek.
Butonlara basınca diğer pice veri gönderecek.
Bunu yaptığınıza göre onuda yaparsınız.
Özel mesaj okumuyorum, lütfen göndermeyin.