usart üzerinden pic 16f877 ve pic 18f2480 haberleşmesi

Başlatan emox, 08 Ocak 2012, 22:04:51

emox

Arkadaşlar
pic 16f877 ve pic 18f2480  usart üzerinden nasıl haberleşir. Örneğin 16f877 den
unsigned char Speed[6] = "010D1\r" verisini göndericek ve ardından 18f2480 in cevabını alacak. Proteus üzerinden rx ve tx bacaklarını seri bağlayacağım. Arada rs 232 veya usb bağlantısı olmadan iki pic seri haberleşecek. ccs c de nasıl bir kod yazmalıyım.

Teşekkürler.

Kabil ATICI

Bir bilgisayarla nasıl haberleşiyorsa o şekilde. Araya hiç bir çevirici bağlamadan tx-rx   rx-tx şeklinde bağlamanız yeterli. Yeterki hr ikisinin iletişimi için  doğru hızlarda ayarlanmış olsun...
ambar7

emox

Abi bir örnek kod var mı ? Yani basit bişi ama bir türlü sorunu çözemedim. Birazda yeniyim bu konularda...

Kabil ATICI

kullandığım programlama dili asembler. ccs c ile pic 16f877 örnekleri var. Diğer işlemci için bir şey diyemem...

http://ccspic.com/ccs-c-dersleri/ccs-c-dersleri-seri-port-kullanimi.html
ilk başta doğrudan işlemci iletişimini girmeden seri port ile tek veri gönder, en azından led veya anahtar üzerinden dene.
ambar7

fahri-

CCS nin örnek kodları var. help indede açıklama var.

emox

Usart üzerinden bağlantı ne verdiğiniz linkte anlatılıyor. Ne de Ccs c nin yardım dosyalarında... usart bağlantısı rs232 bağlantısından çok farklı. ve önerdiğiniz şekilde sistem çalışmıyor. Eğer elinizde Isıs cizimleri ve ccs c de yazılmış usart bağlantısı kodları varsa ve paylaşırsanız birçok arkadaşa faydalı olur.

emox

http://courses.cit.cornell.edu/ee476/FinalProjects/s2009/ama64_maa66/ama64_maa66/images/OBD2_uart.c

Bu linkteki kodlar atmel atmega644 için yazılmış. Atmega644 ile pic 18f2480 veri alıp veriyor. Şimdi bu kodu  ccs c de pic 16f877 için düzenlemek istiyorum. Nasıl yapılabilir. İki pic nasıl haberleşir. Lütfen yardımcı olun.

emox

Arkadaşlar iki pic uart üzerinden nasıl haberleşir. Hiç deneyen olmadımı?  Hep rs232 den bilgisayarla haberleştrilimiş örnekler. Ama iki pic arası karakter yollayamıyorum. Deneme yanılma bile yapamıyorum.

rx tx uçları virtual terminale bağlı. İki pic rx tx ten bağlı fakat haberleşmiyorlar. Lütfen yardımcı olun.

mozkan87

GND yide ortak bağlayın. Ben daha önce sorunsuz haberleştirdim.

skara1214

ben çok yaptım çok da güzel çalılşıyor birisinin tx i diğerinin rx i ne bağlayacksın aynı sekide rx de tx e mis gibi çalışacak yanlız burada trick nokta putc v.s gibi komutlarla tek bir char  yollarsan problem yok ama string yollarken stringin sonuna /r eklemelisin kod ccs
verici
#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT
#use delay (clock=20000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
char klavye[20]
void main ( )
{
 delay_ms(1000);
    while(1) 
{
printf("verici pic konusuyor\r");
gets(klavye);
delay_ms(1000);
}
}

alıcı
#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT
#use delay (clock=20000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
char klavye[80];
#int_rda   
void haberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf("yazdiginiz metin %s\r",klavye);
   enable_interrupts(int_rda); 
}
void main ( )
{
   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver
   enable_interrupts(int_rda);   
    while(1) ;
}
Herkes ölür ama herkes gerçekten yaşamaz

emox



Isıs te gnd nin ortak bağlı olduğu bir örnek devre şeması paylaşabilir misiniz?

skara1214

kendi sözüne alıntı yapmışsın :D. Ama arkadasın dediği gerçek devre sen isiste simülasyon yapıyorsun gerek yok gnd yi birleştirmeye.Benim verdiğim kodların  çalışması gerekli(gerçek devrede çalışıyor,çalışmıyorsa proteustan kaynaklıdır) dene ondan sonra haber ver
Herkes ölür ama herkes gerçekten yaşamaz

emox



Abi vericideki butona basılarak sayi değişkeni 1 artıyor. Ve anında alıcıya gidiyor. Alıcı gerekli işlemi yapıp sayıyı digit te gösteriyor.

Bu sayıyı bir türlü vericiden alıcıya gönderemedim. Senin koduda kullandım ama sanırım giden veriyi terminalde göstermiyor. Ve klavye girişi var senin kodda fakat terminalden giriş yapamıyorum.

Bu projenin ileriki aşamasında vericiden ,alıcıya bilgi gidebilmeli bu sayede alıcı tetiklenecek ve bilgileri tekrar vericiye aktaracak abi.  Yukarıda verdiğim linkte atmega için yapılmış bir kodlama var. Aynı kodu pic için yazmak istiyorum nasıl yapabilirim bilmiyorum.

skara1214

isis simülsayonunda denedim ve çalıştı.test edersen lambanın 1 sn de bir yanıp söndüğünü göreceksin buda iletişimin doğru olduğunu gösterir
Verici
#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT
#use delay (clock=20000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
void main ( )
{
 delay_ms(1000);
    while(1) 
{
printf("ve\r");
delay_ms(1000);
}
}

Alıcı
#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT
#use delay (clock=20000000)
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
char kk[20];
void main ( )
{
    while(1) 
{
gets(kk);
if(kk[0]=='v'&&kk[1]=='e')
output_toggle(pin_a0);
}
}

Herkes ölür ama herkes gerçekten yaşamaz

emox

Abi isis dosyasını gönderebilir misin? Aynı kodlar aynı devre çalışmıyor bende... Kafayı yicem ya...