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.
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...
Abi bir örnek kod var mı ? Yani basit bişi ama bir türlü sorunu çözemedim. Birazda yeniyim bu konularda...
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 (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.
CCS nin örnek kodları var. help indede açıklama var.
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.
http://courses.cit.cornell.edu/ee476/FinalProjects/s2009/ama64_maa66/ama64_maa66/images/OBD2_uart.c (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.
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.
GND yide ortak bağlayın. Ben daha önce sorunsuz haberleştirdim.
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) ;
}
Isıs te gnd nin ortak bağlı olduğu bir örnek devre şeması paylaşabilir misiniz?
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
(http://b1201.hizliresim.com/t/b/1qgjf.jpg)
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.
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);
}
}
(http://a1201.hizliresim.com/t/b/1qj2g.jpg)
Abi isis dosyasını gönderebilir misin? Aynı kodlar aynı devre çalışmıyor bende... Kafayı yicem ya...
ilk olarak piclerin 2 sininde 16f877a olmasına dikkat et 2. olarak hexlerin nasıl yüklendiğini bildiğini var sayıyorum ama o ekranda kristal ayarıda var onuda 20 Mhz yapacaksın ondan kaynaklı olabilir...