2 mikro işlemci haberleşmesi

Başlatan hasanb, 20 Haziran 2012, 22:56:37

hasanb

Üstatlar kafama bir şey takıldı bir türlü içinden çıkamadım.Şimdi iki mikro işlemci var 16f628 bu iki pıc birbiri ile tek kablo seri haberleşecek. Burada bir problem yok ama sorum şu ben 1 mikro işlemci den atıyorum portb.0 yakıp söndürüyorum. Aynısını da karşıdaki aynı anda yapması ve ben 1 mikro işlemcinin programını değiştirip atıyorum; portb.4 ile portb.7 flip flop yapsın gibi program yazdığımda karşıdakini sökmeden bunu anlayıp aynı şekilde bu işlemi yapacak. ben burada seri haberleşmeyi yapıyorum ama diğer mikro işlemciyi söküp program değiştirmeden anlaya bilmesi için ne gibi bir şey yapacağımı bulamadım. benim yazdığım program şu şekilde  mesela 1. işlemciden 10 gelirse şunu yap 20 gelirse  şunu yap diyorum ancak söküp programı değiştirdiğimde aynı şeyleri yaptırmam için nasıl bir yol izlemem gerekiyor.Kafan çok ağrıdı sabah akşam düşünüyorum yapamadım.lütfen yardım edin en azından bir yol gösterin.şimdiden teşekkürler.

greatgonzo

hasanb arkadaşım tam olarak söyledilklerini anlayamadım.Anladığım kadarıyla da amacın mesela iki ayrı pice bağlı ledlerin eş zamanlı yanması ama sen sadece bir tanesinde bunu belirleyeceksin. Oda senin ne istediğini anlayıp diğerinede bildirecek. Eğer bu şekildeyse nasıl yakmak istiyorsun ve bunu nasıl bildireceksin. Kaç seçenek olacak. Mantıken yakıp söndürme algoritmaların eş olmalı ve sen komut verdiğin picte her algoritmaya bir kod verirsin işleme başlamadan evvel diğerine yollar. Yok eğer algoritmayı sadece komuta ettiğim pic bilsin ve diğerine ne yapması gerektiğini de söylesin diyorsan biraz daha karışık olur. Seri halde iletebileceğin şekilde kodlaman lazım. Yani bir led PORTA.0 a  bağlı ve led 1 olarak adlandırılmış.Bunu 2 saniye yakıp 1 saniye söndürmek istiyoyorsun. Seri olarak 1,2,1 gibi bir şey yollarsın. Alıcıyılada gelen bu 3 bytelık verinin ilki led 1 demek 2.si 2 sn yanma 3.sü de sönme süresi demek olduğunu anlatabilirsin. Bu yada benzer bir algoritma ile daha karışık işlemler yapabilirsin kanaatindeyim.

Biraz bu şekilde değerlendir. Anlamadıysam yada başka sorunlar varsa tekrar yaz. Bir bakalım.

İyi çalışmalar

ete

Karşıdakini sökmeden lafını anlamadım. Bir tarafta değiştirdiğin program'a göre elbette karşıdakinide ayarlaman gerekir.

Önceden PORTB.4 den çıkış ver diye ayarladığın bir programda çıkışı sonradan PortB.7 yapmış isen nasıl anlayacak karşıdaki bunu?
Elbette onada  bir şeyler anlatmek gerekir. Yada karşıdakine bütün alternatifleri içeren bir program yerleştirmen gerekir. Böylece diğerinde yaptığın tüm değişikliklere göre karşıdaki de istediğini yapar.
Nedir alternatifler, 10 yolarsan PORTB.1 anlamına gelir. 20 yollarsan portb.2, 30 yollarsan PortB.3.....70 yolalrsan PortB.7 anlamına gelir. Böylece her kes görevini yapmış olur değilmi.

Ete

Evren Kılıç

port'a  değer verilse olmazmı örneğin master işlemciden slave ye 125 degerini gönderdik
slave işlemci de ise portA=deger dedik bu durumda  a portu çıkışları 1111101 olmazmı

hasanb

evrenk:

       Kardeşim dediğini yapacağım ama farklı bir şey olduğunda mesela pwm olduğunda nasıl olacak :) yavaş yavaş yansın yavaş yavaş sönsün.bunu da bir değerlendir.

Ete hocam:
'sökmeden' ibaresi : Ben mikro işlemciyi yeniden programlamadan mesela söyle bir şey olsun ; master slave diye 2 cihaz var. Ben bu 2 cihaza ledleri yakıp söndürüyorum mesela kara şimşek yaptırıyorum.Ben master in programını değiştirdiğim zaman atıyorum. Yavaş yavaş yanma yavaş yavaş sönme diye program yazdığım zaman slave de bunu anlayacak oda aynısını yapacak. evrenk kardeşimin ki gibi mesela ama daha üst düzey bir çalışma istiyor sanırım.

Konu şuradan esti ; Arkadaşım bir animasyon kartı satın almış.bana geldi dedi ki bunun programı değişecek, master slave kartı gibi. adama götürdük adam sadece masterin programını değiştirdi slave de aynı yanıp sönmeye başladı ben çok şaşırdım merak ettim uğraştım yapamadım.  Adam sordum animasyon programı var dedi. Bunları burda görsel olarak yapıyorum mikro işlemciye atıyorum yani (anlamam programdan) dedi.Sorun bu yani.

ete

Programla her şey mümkün. Ancak bu soru bu kadar genel sorulmamalı. Zira yapılmasını istediğin şey programa mahsus bir şey. Şöyle düşün, Master ve Slave var. Master yalnızca emir veriyor yada emirleri değiştiriyor.
Slave ise gelen emirlere göre ledleri yakıyor. Sen yalnızca ledlerin yavaş yada hızlı yanmasını değiştireyim diyorsun mesela. Master yolladığı emirlerin arasına hız bilgisinide katarsa o zaman slave de gelen bilgiye göre hızını değiştirir.
Burada önemli olan değişken olan bilgilerin master tarafından üretilip slave lere verilmesidir. Baqşka bir şey gerekmez.
Konu bu kadargenel olmasa direk programda şunu yap bunu yap diyebilirim. Ama genel soruya cevap da genel oluyor maalesef.

Ete

greatgonzo

hasanb arkadaşım program mantığı denen şeyde bu zaten. Değişken tanımlamalar sembol tanımlamaları hep bu amaca hizmet eder. Senin yapman gerekende bunları kavramak mesela kademeli değişken olarak yanıp sönmesi için

PWM PORTB.7,127,100 ' PORTB.7 den duty zamanı  50% olan 100 saykıl PWM sinyalini ele alalım. Portb.7 ye bir sembol yani isim atayıp çağırabilrsin. 127 değeri yerine bir değişken atayabilirsin ve seri olarak yolladığın veri ile atayabilirsin. Aynı şekide 100 saykıl zamanınıda değişkenle halledebilirsin. Yanlış anımsamıyorsam kademeli yanma ve sönmede buna benzer satırlar kullanılıyordu sadece duty zamanını değiştiriyorlardı. Bu durumda da şunu öngörebiliriz.

daty:
for i=0 to 255 step 10           For döngüsünde i değişkeni 0 ile 255 arasında  onar onar arttırılıyor.
PWM PORTB.7,i,100               Her yeni i değeri 100 er atım olarak uygulanıyor. Taki 255 değerini bulana veya aşana kadar
next i                                     Döngü tamamlanınca program yoluna devam ediyor.
for i=255 to 0 step -10          Bu satırlarda üstteki döngünün tersi niteliğinde. Bu satırlar iş görmeyebilir ama mantık kabaca budur
PWM PORTB.7,i,100               Dikkat ettiysen herşey çağırılabilir. Mesela özel bir mesajla pic e daty etiketine atlamasını
next i                                     sağlayabilirsin 0 ve 255 değerlerini değişkenler atayıp seri yolla değiştirebilirsin. step değeri ve diğer
goto daty                              değerlerde değişebilir.

Bence bu mantıkla hareket et ve önce master pic te programını kur. O programa ve akış şemasına hakim ol. Ardındanda master pic diğerlerine derdini nasıl anlatır diye düşünerek hareket et. Bu mantıklar bana göre pic programlada seni baya ileri taşır kanaatindeyim. O tabelacı arkadaşlarında kullandıkları bence buna benzer kapalı bir mantıkla hareket eden programlar. Yani sadece animasyonda işleminde çalışır mucizevi  yada anlaşılması imkansız olduğunu sanmıyorum :-)

Bence program mantığında kodlar üret yine yolla kısmetse bir bakar geliştirmeye ve ilerlemeye çalışırız.

İyi çalışmalar...


hasanb

Bir bakayım yarın pazar öğleden sonra kafa yorarım ancak teşekkürler cevaplar için en kısa zamanda cevap yazmaya çalışırım.

hasanb

Üstatlar şimdi devreyi tasarladım basit bir şekilde aşşağıda yayınlıcam sorun şu kaldı tek pwm sinyali anı bu devrede çalışır şekilde nasıl göndericem :) o kaldı
bakın inceleyin.

greatgonzo

          VER=%00111111
          PAUSEUS BB:gosub gonder
          VER=%00011111
          PAUSEUS BB:gosub gonder
          VER=%00001111
          PAUSEUS BB:gosub gonder
          VER=%00000111
          PAUSEUS BB:gosub gonder
          VER=%00000011

Affına sığınarak söylüyorum yukarıdaki satırlar ve diğerleri biraz gereksiz. Ete hocamın derslerindede vardır takip edersen fark edeceksin VER değişkenindeki veriyi 2 ile çarpan bir döngü yazıp sonucu aktarırsan ledleri sıra ile yakarsın 2 ye bölerekte söndürebilirsin 10 satırda falan aynı işi yaparsın. Sırayla kaydırma içinde << ve >> işaretlerini kullanabilirsin. Çok daha kısa olur ve programlarında hata ihtimalin düşer. Duty kısmınada nasıl birşey yapacaksın acaba kafandaki nedir?
İyi çalışmalara...

hasanb

pwm için diyorum karşıdaki nede pwm için bir sinyal gönderip ardından sürekli veri göndersem nasıl olur denemesini yapacağım dediğin olay aklıma yattı teşekürler yanıt için.

hasanb

pwm i de yaptım ama çok küçük değişim var oda çok etkilemez komut gecikmesi herhalde o sorunda sorun yok programı yaza biliriz herhalde şimdi pwm için port açıp kapama hariç nasıl bir yol izlene bilir acaba daha önce yapmış olan varsa yayımlaya bilirse çok memnun oluruz. yazdığım dene melik program bu fazla uğraşamıyorum iş güç yoğun bu aralar mesai kusuruma bakmayın gecikmeli olarak yazıyorum.

greatgonzo

pwm komutunu kullanarak yaptıysan port değişikliği problem olmaz "PWM PORTB.7,i,100" satırını ele alırsak PORTB.7 için sembol ataması yapabilirsin tabiki diğer portlar için. Duty elemanlarını tanımlarken de , nasıl diğer değerleri yolluyorsan onuda sembolü ile çağırabilirsin. Ama birden fazla pine aynı anda komutu bu şekilde yollayabileceğini zannetmiyorum. Basic bu satırı işlemeden diğerlerine geçmez. Böyle bir gereksinimin varsa sana tavsiyem yine ETE hocamın dersleri olur. Tabiri caizse manuel olarak bir gurup pine yada porta pwm yaptırabiliyordu. ( Her ne kadar ben beceremesemde :-) )  Özellikle led pano için profosyonel bir şeyler yapmak istersen bence o dersi tamamen özümsemen ve tecrübe etmen gerek.

Komut gecikmesine gelince; onu bende tahmin etmiştim ama belirgin olacabileceğine ihtimal vermemiştim. Bundada şöyle bir mantık izleyebilirsin diye tahmin ediyorum. Değişkenleri ve gerekli komutları yollayıp son olarak tek bir tetikleme komutuyla işleme başlartırsın. Birincil olan picte çok ufak bir gecikmeyle senkron sağlanabilir. En azından gözle seçilmeyecek kadar ufak farklar oluur diye tahmin ediyorum.

İyi çalışmalar...

duralikiraz

Bu konuyu baştan aşağı okumaya çalıştım, ancak çok karmaşık geldi. Benim bu "iki micro denetleyicinin haberleşmesi" başlığı altında merak ettiğim ve öğrenmek istediğim olay şu;

Bazı mikrodenetleyici uygulamalarında MCU bacakları yetmeyecek ve  bir MCU yu müdür diğerinide müdür yardımcısı yapacağız. Bu müdür ve yardımcısı kendi aralarında en iyi ve sağlıklı olarak hangi protokol ile haberleşmelidirler? ve Kesme kullanmak hangi metodda mantıklı olur? Tam Senkronize iletişim varmıdır? Zira 1 wire, SPI, rs232 gibi birçok metod olduğunu zannediyorum.

ete

En iyi haberleşme kavramı kişiye görede değişiyor. Bana göre en iyisi RS232 çünki ne gönderen veri yollarken birini bekler nede alan alırken başka bir şey bekler. Tabiiki alan USART kesmesi kullanması şartı ile bu geçerli.
Diğerlerininhepsinde karşılıklı el sıkışmanız gerekir. Dediğin yöntemlerin hepsi geçerli ancak en mantıklısı RS232 veya RS485 (mesafe uzun ise) dir.

Ete

Powered by EzPortal