İki PIC arasında SPI haberleşme sorunu

Başlatan _MeRKeZ_, 16 Aralık 2014, 15:29:12

_MeRKeZ_

Merhaba Arkadaşlar,

İki adet PIC'in SPI üzerinden haberleşeceği bir uygulama geliştiriyorum. Uygulamanın çalışmasını deneme amacıyla da örnek olarak 8 bayt verinin iletimini yapmayı denedim. Sunucu her bir baytı yolladıktan sonra istemci de ona karşılık yine bir bayt yolluyor ancak ilk veri iletimi esnasında sorun çıkıyor. Sunucu veriyi doğru bir şekilde iletiyor ancak gelen değer 0 olması gerekirken 49 -yani 1 değerinin asci karşılığı dönüyor- Dönen verinin 49 olmasının sebebi ise, haberleşmeyi başlatacağım zaman sunucudan gönderdiğim '1' değeri. Bu durumu nasıl çözebilirim sizce?

Teşekkürler.

Sunucu


            output_low(Istemci1);
            spi_write('1');
            output_high(Istemci1);
           
            for(i=0;i<8;i++)
            {
               if(denetim==1)
               {
                  denetim = 0;
                  gelenVeri = 0;
                  output_low(Istemci1);
                  spi_write(veri[i]);                 
                  while(!spi_data_is_in());
                  gelenVeri = spi_read();
                  output_high(Istemci1);
                  denetim= 1;
                  printf(lcd_putc,"\fVeri: %d",gelenVeri);
                  delay_ms(500);
               }
            }



İstemci


         if(spi_data_is_in())
         {
         
            veri = spi_read();
            delay_ms(5);
           
            if(veri == '1')
            {
               for(i=0;i<8;i++)
                {   
                  while(!spi_data_is_in());
                  veri = spi_read();
                  delay_ms(5);
                  spi_write(i);
                }
             }
          }

Burak

#1
C dilini bilmiyorum ama kullandığın PIC'lerin donanımsal SPI arabirimleri mevcutmu ?
Ω Gens Una Sumus Ω

_MeRKeZ_

Mevcut hocam.

Sorunun sebebini -sağolsun- bir arkadaş açıkladı

         if(spi_data_is_in())
         {
         
            veri = spi_read();
            //delay_ms(5); bunun olmaması gerekiyor
           
            if(veri == '1')
            {
               for(i=0;i<8;i++)
                {   
                  spi_write(i) //veri yazma işlemi sunucudan saat sinyali gelmeden yapılması gerektiği için de bu kodun burada olması gerekiyor
                  while(!spi_data_is_in());
                  veri = spi_read();
                  //delay_ms(5); bunun olmaması gerekiyor
                }
             }
          }


Burak

Peki haberlesirken kullandigin veri kac bytelik ? Aslinda bende asenkron usart haberlesmeyide onermek isterim . Biliyosun 628a gibi islemcilerde donanimsal iki byte derinliginde fifo buffer mevcut ... İki byte'i saklar sen gider okursun .. Tek yapman gereken rcif bayragini okumak ;)
Ω Gens Una Sumus Ω

Powered by EzPortal