32 Pin Algılama

Başlatan M_B, 12 Kasım 2015, 10:15:42

M_B

#45
Hocam ana unitede pic18f2620 ve bir tanede P10 Panel var.
Gelen bilgilere göre ekrana yazdıracağım.
Ornek olarak 5 numara butonu basılıysa ekranında 5
veya 1-7-9-12 basılıysa  o rakamları gösterecek.


not: Sema olarak geri mesajlarda vermiştim. Tekrar verebilirim.
Alıntı YapHocam isis cizimi ektedir yalnız simulasyon icin ekranda bir şey göremeyiz. Semadaki baglantılar P10 icindir.
http://www.dosya.tc/server5/3hy4ul/MASTER.rar.html
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

OG

#46
Kaç panel sürüyor pic osc int mi, kaç mhz de calışıyor?
Alınan veri gördüm diye bir işlem yapıp silinmeyecekmi
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

M_B

Hocam sadece tek bir panel olacak.
Verileri bir text te tutup ekranda kaydırmak istiyorum. Eger veri yok sa ( Yani herhangi bir tusa basılı değilse )
Ekranda bir sey yazmayacak . Veya sabit  bir yazı kaydırabilirim.  O kısım kesin belli olmadı.
Hocam tus derken Anahtar gorevi yapacak. Ac kapa gibi. Eger Anahtar kapalıysa master sordugunda slave mastera kapalı diyecek ve masterda ekranda o numarayı gösterecek eger anahtar belli bir süre sonra acıldıysa bir sonraki durumda master anahtarı ekrandan silecek

Ornek olarak:
10. numaralı Slave in Düğmeye  basıldığında ( Anahtar kapalı Kısa-devre )  master sordugunda gelecen cevap anahtar basılı (kapalı )
Master ekranda 10 numarayı gösterecek. Belli bir süre sonra 10. numaralı slavein anahtarına tekrar basıldığında ( bu sefer kapalıydı acıldı acık devre oldu)
Slave mastera anahtar basılı değil bilgisi yollayacak. Masterda Ekranda onceden olan 10 numarayi silecek.

Bu uygulama icin  yapmak istediğim şey
Bir tane Header verisi + ID + Data1 + Data2 +Stop verisi gonderip almak.
anahtar durumlarını Data1 ve Data2 barındıracak.
Data1 ve Data2 8 bit olduğu icin buda bana 16 pin yapıyor.
Bizim ilk aşamada Slave olarak kullanacağımız modul sayısı 16 dı.
Master belli aralıklarla Slave lere Header + ID + Data1+Data2+Stop verisini gonderecek
ID si tutan slave Data1 ve Data2 yi alıp isleme tutacak.
Yapacağı işlem ise Kendisi kac nolu ID ise ilgili bite gelen veriyi 1 veya 0 yapıp ( Anahtar durumuna gore ) tekrar aynı formatta geri yollacak.
Master aldığı Data1 ve Data2 yi Bir baska ID ile tekrar yollacak ve bu son ID ye kadar surecek
en sonunda ise Master Data1 ve Data2 yi birleştirerek bitlerini kontrol edip hangi leri basılıymış onu algıyalacak.
aklımdan gecirdiğim bu.

Not: MAster ilk ID de data1 ve Data2 nin degerini 00 00 olarak gönderecek.


Takıldığım nokta
https://www.picproje.org/index.php?topic=62643.msg485116#msg485116 linkte de belirttiğim gibi veriyi alamamak.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

OG

BUTON değil ANAHTAR.
Bunu yeni anladım.

Ve MASTER , sorgulama yaptığı an için anahtarın durumunu istiyor. Doğru anladı isem.

Data1 - Data2 yi ise anlamadım.
SLAVE den gelecek bilgi zaten 1 bit, açık veya kapalı, neden 2 byte kullanıyorsun. İletişimde gereksiz zaman kaybı.
MASTER da o unitenin durumu saklamak için ise
1 adet 32 bit değişken tanımlarsın, Her bit bir slave içindir, 0...31 bit toplamı 32 adet. Gelen cevabe göre ilgili biti set veya clear yaparsın.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

M_B

Alıntı YapVe MASTER , sorgulama yaptığı an için anahtarın durumunu istiyor. Doğru anladı isem.
Dogrudur hocam.  Yanlıs anlatmış ta olabilirim. ( ilk zamanlar )

Alıntı YapData1 - Data2 yi ise anlamadım.
SLAVE den gelecek bilgi zaten 1 bit, açık veya kapalı, neden 2 byte kullanıyorsun. İletişimde gereksiz zaman kaybı.
MASTER da o unitenin durumu saklamak için ise
1 adet 32 bit değişken tanımlarsın, Her bit bir slave içindir, 0...31 bit toplamı 32 adet. Gelen cevabe göre ilgili biti set veya clear yaparsın
Evet Hocam buda farkli bir bakış acısından cok guzel bir cozum.

Teşekkürler.

İş şimdi verileri düzenli alıp vermede kaldı.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

@OG hocam;
Veri gonderme ve alma yontemini sizin bahsetiginiz gibi hallettim.
1 Master 2 Slave baglantı yapıp test ettigimde herhangi bir sorun yok.
Taki Slave sayısını 2 den fazla yaptıgımda veri alımlarında sıkıntı cıkıyor. (3. Slaveden biri ara sıra cevap vermiyor.)
Sorunun kaynagı ise sanırsam SN75176 yi Tx/RX yapmadaki zamanlardan.
İletisim hizim 9600 Baud
Master 3 Byte gonderiyor.
Slaveler 4 Byte veri gonderiyor.
Slaveler TX moduna gectıkten sonra ne kadar zaman sonra RX moduna sokmam Lazım Hattan tam verinin gittigine emin olmak icin.
Bunun puf noktası nedir Hocam.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

#51
Slaveleri Tarama yontemim şu şekilde.

Tx mod.
1ms bekleme
Veri gonderiliyor.
4ms Bekleme : ( Verinin hattan bosalması icin bekleme)
Rx mod
1ms bekleme
sonra
Veri gelmesi icin 1sn bekleme ( Veri alımı USART intrerrupla )
interrup cıkısında tanımlı bayrak 1 yapılıp
gelen veri işlenip
ID bir artırılıp CRC hesabından sonra tekrar veri gonderiliyor.
Taki bu işlem Son ID ye kadar.
code Blogum
void ButonSorgula(void){
   local_timeout=TimeOut;
   TxData.StartAdr=0xFE;      // Her sorgulama ya  geldiginde sifirlaniyor veriler.
   TxData.ID=1;               // bir Numaradan basliyor gondermeye.
   TxData.CRC=0;              // Gondermeden once CRC sıfırlanıyor.
   BtValue=0;                 // Buton degeri her tarama  basinda sıfırlaniyor.
   do
     {
      TxCRC_Olustur();                 // Gonderilecek verilerin CRC si hesaplandı.
      VeriGonder();                    // Hesaplanan veriler gonderiliyor. ve Alma moduna gecildi.
      Delay_ms(250);                   // Belli bir süre bekleme konuyor.
      Delay_ms(250);                   // Belli bir süre bekleme konuyor.
      Delay_ms(250);                   // Belli bir süre bekleme konuyor.
      Delay_ms(250);                   // Belli bir süre bekleme konuyor.
      if(flag==1)
                {
                 ButonBelirle();      // TxData.ID artırıldı.
                 flag=0;
                 RxData.ID=0;         // Veriler karısmasin diye
                 RxData.Buton=0;      // Veriler karısmasin diye
                }
                else
                   {
                    flag=0;
                    while(local_timeout>0)
                                         { 
                                          Delay_ms(1);
                                          local_timeout--;
                                         }
                    local_timeout=TimeOut;
                    TxData.ID++;
                   }
     }while(TxData.ID<17);
         VeriDuzenleme(BtValue);   // Ekrana yansimasi icin düzenlendi.
}


Şu an bu şekilde 8 modul sorunsuz calısıyor.
Hocam 1sn bekleme kısmını azaltınca veri alımında sıkıntılar yasıyorum.
zamanı azaltabilmem icin nasıl bir yontem uygulamam lazım. Oneriniz nedir ?

Teşekkürler

Edit : Kod eklendi.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet