avatar_kartal_0689

SPI Problemi

Başlatan kartal_0689, 21 Nisan 2014, 17:44:51

kartal_0689

Arkadaşlar merhaba,

Bu konu biraz karışık biliyorum. MCP23S08 SPI entegresi var. 8 bitlik bir entegre.
Ben mikroişlemci ile çıkışlarını belirli sürelerle (en kısa=300ms en uzun=900ms) açıp kapatıyorum.(0=1 yaparak blink yapıyorum)
bazen SPI sanki reset alıyormuş gibi davranarak kendini kapatıyor ve hiçbir şekilde işlemlere cevap vermiyor. Cihazı yeniden başlattığımda
ayağa kalkıyor. Şimdi aşağıdaki resimlerde nasıl bağlantı yaptığımı göreceksiniz. Yazılımın bir kısmını da ekliyorum. Bir bilen vardır umarım.

Bu kısım SPI aktif etme;
Procedure SPI_Active;
  begin

        ModulRly_CSpin := 0;Time_5us;Modul1_CSpin :=0;Time_5us;
        Modul2_CSpin :=0;Time_5us;Modul3_CSpin :=0;Time_5us;
        Modul4_CSpin :=0;Time_5us;Modul5_CSpin :=0;Time_5us;
        //Modul5_CSpin :=0;Time_1us;

        SPI2_Write(0x40); // Status Register (01000000) son bit 1 olursa read
        SPI2_Write(0x00); // Control Register (0x00 I/O port configuration)
        SPI2_Write(0x00); // Control Bits (All bits out)

        ModulRly_CSpin := 1;Time_5us;Modul1_CSpin :=1;Time_5us;
        Modul2_CSpin :=1;Time_5us;Modul3_CSpin :=1;Time_5us;
        Modul4_CSpin :=1;Time_5us;Modul5_CSpin :=1;Time_5us;



        ModulRly_CSpin := 0;Time_5us;Modul1_CSpin :=0;Time_5us;
        Modul2_CSpin :=0;Time_5us;Modul3_CSpin :=0;Time_5us;
        Modul4_CSpin :=0;Time_5us;Modul5_CSpin :=0;Time_5us;

        SPI2_Write(0x40); // Status Register (01000000) son bit 1 olursa read
        SPI2_Write(0x06); // Control Register (0x06 I/O Pull up Resistor Register)
        SPI2_Write(0xFF); // Control Bits (All pull up)

        ModulRly_CSpin := 1;Time_5us;Modul1_CSpin :=1;Time_5us;
        Modul2_CSpin :=1;Time_5us;Modul3_CSpin :=1;Time_5us;
        Modul4_CSpin :=1;Time_5us;Modul5_CSpin :=1;Time_5us;
        //Modul5_CSpin :=1;Time_1us;
        //****SPI2 Module Active************************************************
  end;
//******************************************************************************
//******************************************************************************


Bu kısım da spi veri yazma kısmı;
Procedure My_Spi_Write(SpiWriteData : Byte);
  begin

       if (SpiWriteAuthority = 0xFF) then // SPI için yazma izni verildiyse
         begin
              SPI2_Write(0x40);
              SPI2_Write(0x0A);

              SPI2_Write(SpiWriteData);

              Delay_Cyc_Long(1);

              Delay_us(5);
         end;

         SpiWriteAuthority := 0x00; //SPI için yazma izni yok.


  end;
//******************************************************************************
//******************************************************************************


Yazılımda iki tane timer var. Biri 1ms diğeri 10ms.
Spi yazdırma işlemleri 10ms lik timer içerisinde gerçekleşiyor.
1ms timer ın önceliği daha yüksek.
Acaba timerler mı çakışıyor bilemedim ve çözüm bulamadım
yardımcı olabilecek arkadaşlar var mı? :(
TURKEY/ANK

kartal_0689

Bir sey daha eklemek istiyorum, clk,dta,cs ve rst girislerini pull-up yapmadim bunlardan sacmaliyor olabilir mi?
TURKEY/ANK

Powered by EzPortal