2 PIC'i Seri Haberleştirme Sorunu

Başlatan samtheanswer, 19 Nisan 2015, 15:28:49

samtheanswer

Merhaba Arkadaşlar,

2 adet PIC16F628A ile oluşturduğum devrede gönderici kısmında 1 buton, alıcı kısmında ise bir LED var. Yapmak istediğim butona basıldığında LED'in yanması bırakıldığında sönmesi, internette birçok kod buldum fakat çalıştıramadım. Yardımlarınızı bekliyorum.


baran123

#1
Ayarlarını yaptıktan sonra

void main(void)
{
   while(input(button)) putc('1');
}

karşı taraftada sürekli geliyor mu diye seri iletişim kesmesi ile bakabilirsin.

Recep METE

Arkadaşım, sakıncası yoksa kodu görebilir miyiz?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

samtheanswer

Kodu çıkaramadım çünkü seri haberleştirme için hangi komutları yazacağımı bilmiyorum. Bu nedenle ben kafama takılanları sorayım yanıt bulabilirsem memnun olurum.


Bu kısım hem alıcı da hemde verici de olacak diye biliyorum, sıkıntım yok bu kısımda.
#use rs232 (baud=9600, xmit=pin_B2, rcv=pin_B1, parity=N, stop=1)


Bu şekilde bir haberleşme kesmesi oluşturulmuş Serdar ÇİÇEK'in CCS C kitabındaki örnekte, bu kesme olmak zorunda mı benim devremde daha doğrusu kullanmam gerekiyorsa alıcıda mı yoksa verici de mi kullanmalıyım?
[size=10pt]#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   output_high(pin_c5);  // RC5 çıkışı lojik-1
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf("\n\rYazdiginiz Metin>  %s\n",klavye); // Satır atla, yeni satır,RS232 üzerinden klavye string ifadesini gönder,satır atla
   printf(lcd_putc,"\f%s",klavye);  //LCD'yi temizle ve klavye string ifadesini LCD'de göster
   output_low(pin_c5); // RC5 çıkışı lojik-0
   printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz>"); // Satır atla, yeni satır,RS232 üzerinden belirtilen metni gönder
}[/size]


"getc, getch, gets, putc, puts" gibi bir sürü komut var hangisini kullanmalıyım, gönderilecek veriyi hangi tipte tanımlamalıyım?

Birde "void main()" içinde "enable_interrupts(GLOBAL) ve enable_interrupts(int_rda)" komutları gördüm bunlar tam olarak nedir, ne için kullanmalıyım?

garezza

Selam. Cevaba nereden başlasam bilemedim çünkü kafan belliki baya karışık. Öncelikle alıcıda kesme kullanmalısın çünkü vericinin veriyi ne zaman gönderdiği belli değil (Butona ne zaman basılırsa belirsiz bir tanım) dolayısıyla recive kesmesi kullanmalısın tabi hattı süreklide dinleyebilirsin ama bu verimsiz olur. Ama en başta tavsiyem haberleşmeye geçmeden önce tek pic üzerinde butona bastığında yanan led veya benzeri bişey yapman daha sonra external kesme kullanarak yine ledlerle ufak bi uygulama yapman. Mesela birinci led yanıp sönerken butona bastığında ilk ledi etkilemeden ikinci ledi yakmak gibi. Böylece kesmenin ne olduğunu görerek anlarsın. Yok illaki haberleşmeden başlayacaksan kodlarla hiç uğraşma ccs de new project sayfasında sol tarafta communication bölümünde use rs232 seç, seçeneklerin aktifleştiğini göreceksin orada hiçbir ayarla oynamadan rx ve tx pinlerini seç; yine sol tarafta interupts bölümüne gir oradan rs232 recive data avalible seçeneğini aktif et tamam de. Açılan kod sayfasında verici tarafında yapmak istediklerini while(true) içerisine alıcı tarafta yapmak istediklerinide int_rda kısmına yaz. Kolay gelsin.

ayhani

Flowcode kur. Rs232 elemanin ekle. Vericide bilesen makroda byte gonder de 1 degerini yaz. Ayni sekulde alici programinda byte oku de. Gelen veri"1ise led yak degilse sondur islemini karar elemani ile yap
En iyi bildiğim şey hiçbir şey bilmediğimdir.

baran123

Bu arada kesmenin sonunda interrupt'ı tekrar aktif yap.Main programında belki yapıyorsundur ama o kısımı göremedim.