İki PIC'i Seri Haberleştirme

Başlatan dexsia, 16 Temmuz 2018, 10:28:29

dexsia

Merhaba arkadaşlar, benim basit bir konuda yardımınıza ihtiyacım var. PIC programlamada çok yeniyim, sadece led yakıp söndürebiliyorum. Bu konuyu açmama sebep olan sorun ise aşağıda resimde gördüğünüz üzere iki pic arası seri haberleşme yaptırmam gerekiyor. Birinci pic'te 7 adet buton var ikinci pic'te ise 7 adet led var ve arada tx/rx bağlantısı var, bu kadar biliyorum. Benim sorum ise butonlara bastığımda diğer pic'teki her ledin ait olduğu butona göre yanmasını istiyorum. Yani 1.butona bastım 1.led yansın, 3.butona bastım 3.led yansın gibi. Forumda benzer kodları aradım ancak bulamadım belki de konuya hakim olmadığımdan olabilir. Bu sorunumu çözecek kodlar için yardım bekliyorum, şimdiden teşekkürler.





Not:
Yazı tipi ve şeklini değiştirmeyiniz.

muhittin_kaplan


tekosis

Aşağıdaki videolarla biraz ön çalışma yaparsanız, hazır bulunuşluluğunuzu artırırsanız sizin için daha faydalı olur. Ayrıca Serdar Çiçek'in CCS C ile pic programlama veya buna benzer farklı kitaplardan birisini almanızı tavsiye ederim.

https://www.youtube.com/watch?v=6p2ej0c_erk&list=PLe9AXQgRc2h0SLqYZDTInH9PAZbpxvz65

https://www.youtube.com/watch?v=N9KUHR8m2TU&list=PLdcoZed79ZufQg6wQ6kMNKmfnbGERMB5F

https://www.youtube.com/watch?v=Y_RK0zqXr18

https://www.youtube.com/watch?v=jhdhSAcppFs
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

fide

#3
İlk önce çizimin yanlış. Butonları ve direnci birbirine bağlayıp sonra gnd hattına vermişsin. Butonla direnç arasından  pice bağlaman gerekir.

Sonrasında gönderen tarafta
Main bloğu içine
if (input(pin_b0)) ==0
{tus="0";}
if (input(pin_b1)) ==0
{tus="1";}
if (input(pin_b2)) ==0
{tus="2";}
if (input(pin_b3)) ==0
{tus="3";}
...
if (input(pin_b7)) ==0
{tus="7";}

if (tus! ="") 
{fprintif("%s/r" tus) ;
tus="";}

Alıcı tarafta interrupt aktif ettiten sonra int_rda içine
tus=gets() ;
if (tus=="0")
{output_high(pin_b0);}
Else
{output_low(pin_b0);}
if (tus=="1")
{output_high(pin_b1);}
Else
{output_low(pin_b1);}
...
if (tus=="7")
{output_high(pin_b7);}
Else
{output_low(pin_b7);}

şeklinde yapabilirsin.
Alıcı tarafta main rutini içine enable_interrupts (int_rda) yazmayı unutma.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

dexsia

Alıntı yapılan: tekosis - 16 Temmuz 2018, 14:15:28Aşağıdaki videolarla biraz ön çalışma yaparsanız, hazır bulunuşluluğunuzu artırırsanız sizin için daha faydalı olur. Ayrıca Serdar Çiçek'in CCS C ile pic programlama veya buna benzer farklı kitaplardan birisini almanızı tavsiye ederim.

https://www.youtube.com/watch?v=6p2ej0c_erk&list=PLe9AXQgRc2h0SLqYZDTInH9PAZbpxvz65

https://www.youtube.com/watch?v=N9KUHR8m2TU&list=PLdcoZed79ZufQg6wQ6kMNKmfnbGERMB5F

https://www.youtube.com/watch?v=Y_RK0zqXr18

https://www.youtube.com/watch?v=jhdhSAcppFs

Verdiğiniz bilgiler için teşekkür ederim. Elimde Serdar ÇİÇEK'in kitabı var ancak bana lazım olan verilere oradan ulaşamadım belki de aradığım şeyin tam olarak neyin içerisinde olduğunu bilmediğimden kaynaklanıyor olabilir. Tek PIC ile led yakıp-söndürme, flip-flop gibi uygulamaları yapabiliyorum ancak iki PIC arasında haberleşme yapmayı hiç bilmiyorum.Vaktim de sınırlı olduğu için en kısa sürede bilgi alabilmek yoluyla buraya başvurdum.


 
Alıntı yapılan: fide - 16 Temmuz 2018, 14:19:33İlk önce çizimin yanlış. Butonları ve direnci birbirine bağlayıp sonra gnd hattına vermişsin. Butonla direnç arasından  pice bağlaman gerekir.

Sonrasında gönderen tarafta
Main bloğu içine
if (input(pin_b0)) ==0
{tus="0";}
if (input(pin_b1)) ==0
{tus="1";}
if (input(pin_b2)) ==0
{tus="2";}
if (input(pin_b3)) ==0
{tus="3";}
...
if (input(pin_b7)) ==0
{tus="7";}

if (tus! ="")
{fprintif("%s/r" tus) ;
tus="";}

Alıcı tarafta interrupt aktif ettiten sonra int_rda içine

tus=gets() ;
if (tus=="0")
{output_high(pin_b0);}
Else
{output_low(pin_b0);}
if (tus=="1")
{output_high(pin_b1);}
Else
{output_low(pin_b1);}
...
if (tus=="7")
{output_high(pin_b7);}
Else
{output_low(pin_b7);}

şeklinde yapabilirsin.
Alıcı tarafta main rutini içine enable_interrupts (int_rda) yazmayı unutma.

Öncelikle uğraşınız için teşekkür ederim. Vericiyi ccs c de compile etmeye çalıştım ancak tus için undefined identifier hatası aldım, bunu nasıl ve ne olarak tanımlayacağım ?

mehmet

@dexsia, ilk mesajınız
için ikaz edilen gerekli
düzenlemeyi yapınız.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

omereliusuk

if (input(pin_b0)) ==0
{tus="0";}
if (input(pin_b1)) ==0
{tus="1";}
if (input(pin_b2)) ==0
{tus="2";}
if (input(pin_b3)) ==0
{tus="3";}
...
if (input(pin_b7)) ==0
{tus="7";}
yerine
int tus=0;
if (!input(pin_b0)) //==0
{tus|=1;}
if (!input(pin_b1)) //==0
{tus|=2;}
if (!input(pin_b2)) //==0
{tus|=4;}
if (!input(pin_b3)) //==0
{tus|=8;}
...
if (!input(pin_b7))// ==0
{tus=128;}
alıcı tarafa
Alıcı tarafta interrupt aktif ettiten sonra int_rda içine
int tus=0;
tus=getc() ;
output_b(tus);

fide

Alıntı yapılan: omereliusuk - 17 Temmuz 2018, 11:03:31
if (input(pin_b0)) ==0
{tus="0";}
if (input(pin_b1)) ==0
{tus="1";}
if (input(pin_b2)) ==0
{tus="2";}
if (input(pin_b3)) ==0
{tus="3";}
...
if (input(pin_b7)) ==0
{tus="7";}
yerine
int tus=0;
if (!input(pin_b0)) //==0
{tus|=1;}
if (!input(pin_b1)) //==0
{tus|=2;}
if (!input(pin_b2)) //==0
{tus|=4;}
if (!input(pin_b3)) //==0
{tus|=8;}
...
if (!input(pin_b7))// ==0
{tus=128;}
alıcı tarafa
Alıcı tarafta interrupt aktif ettiten sonra int_rda içine
int tus=0;
tus=getc() ;
output_b(tus);
Yemek yapmayı tarif etmek istedim, çalışıp onu da kendi bulsun demiştim ama önemli değil.

Önemli olan birbirimize yardımcı olmak.
:)
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

Alıntı yapılan: dexsia - 16 Temmuz 2018, 16:03:11Verdiğiniz bilgiler için teşekkür ederim. Elimde Serdar ÇİÇEK'in kitabı var ancak bana lazım olan verilere oradan ulaşamadım belki de aradığım şeyin tam olarak neyin içerisinde olduğunu bilmediğimden kaynaklanıyor olabilir. Tek PIC ile led yakıp-söndürme, flip-flop gibi uygulamaları yapabiliyorum ancak iki PIC arasında haberleşme yapmayı hiç bilmiyorum.Vaktim de sınırlı olduğu için en kısa sürede bilgi alabilmek yoluyla buraya başvurdum.


 
Öncelikle uğraşınız için teşekkür ederim. Vericiyi ccs c de compile etmeye çalıştım ancak tus için undefined identifier hatası aldım, bunu nasıl ve ne olarak tanımlayacağım ?
Benim yazdığım kodda char tus[3]; olarak tanımlayabilirsiniz. @omereliusuk yazdığı kodda int tus şeklinde tanımlamış zaten.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com