Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

spi tipi haberlesme

Başlatan selvi, 09 Eylül 2013, 15:00:06

selvi

  spi mantigiyla yapilmis verici ve alici programi kitaptan(serdar cicek-CCS ile pic programlama) esinlenerek duzenledim ama calistiramadim.programlar asagidaki sekilkdedir.

verici:
#include <16f628a.h>
#fuses INTRC,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)

#define SCK pin_b0
#define SDO pin_b1
#define SDI pin_b2
#define CS  pin_b3

#define buton1 pin_a0

int8 i=0,veri1=0x10;

/********* ANA PROGRAM FONKSY'YONU********/

void main ( )
{
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_a(0b00000011);
   set_tris_b(0x00);   // B portu komple çy'ky'?

   output_b(0x00); // ilk anda B portu çikisi sifirlaniyor
   output_high(CS);
   output_low(SCK);
   
 while(TRUE)
 {
   output_high(CS);
   if(input(buton1))
   {
     output_low(CS);
     for(i=0;i<8;i++)
     {
       output_bit(SDO,shift_left(&veri1,1,0));
       
       output_high(SCK);
       output_low(SCK);
     }
     delay_ms(5);
     while(input(buton1));
   }
 }
       
}


alici:
#include <16f628a.h>
#fuses INTRC,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)

#define SCK pin_b0
#define SDO pin_b1
#define SDI pin_b2
#define CS  pin_b3

#define led pin_a3

int8 i=0,data1=0x10;

/********* ANA PROGRAM FONKSY'YONU********/

void main ( )
{
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_a(0b00000011);
   set_tris_b(0b00001101);   // B portu komple çy'ky'?

   output_b(0x00); // ilk anda B portu çikisi sifirlaniyor
   output_high(CS);
   output_low(SCK);
   
 while(TRUE)
 {
   if(CS==0)
   {
     for(i=0;i<8;i++)
     {
       shift_left(&data1,1,input(SDI));
       
       output_high(SCK);
       output_low(SCK);
     }
     if(data1==0x10)
     {
       output_high(led);delay_ms(500);output_low(led);data1=0;
     }
   }

 }
       
}
Yaşam anlamlandırıldıkça kutsaldır....

Kabil ATICI

önce c'de pek iyi değilim;
master durumunda tüm CS, SCK, SDO çıkış ve SDI giriş olacak
slave durumunda           CS, SCK, SDI giriş ve SDO çıkış olacak.

bu durumda slave alet CS durumuna bakacak bu şart saglanmışsa
SCK durumuna bakacak uygun durumda SDI ve/veya SDO işini yapacak.
(önce birini yapta sonrasına  diğerine bak)

Yazdığı programda slave konumundaki alet programı sanki SCK durumuna bakmıyor...
ambar7

selvi

Alıntı Yapfor(i=0;i<8;i++)
     {
       shift_left(&data1,1,input(SDI));
       
       output_high(SCK);
       output_low(SCK);
     }
bu sekilde sck kontrolu var.
Yaşam anlamlandırıldıkça kutsaldır....

sadogan

Alıntı yapılan: selvi - 09 Eylül 2013, 20:53:53
for(i=0;i<8;i++)
     {
       shift_left(&data1,1,input(SDI));
       
       output_high(SCK);
       output_low(SCK);
     }
  bu sekilde sck kontrolu var.
Hem master da hem slave de clock üretilmez.
master clk 'H' olduğunda SDI pindeki bir bitlik datayı almak gerekli.

RaMu

https://www.picproje.org/index.php?topic=47160.0

selvi yukarıdaki linkte spi ile ilgili birşeyler yazmıştım,
aslında basit bir olay, mantığını biliyorum diyorsan programa bakalım,
ama bilmiyorsan linkte bahsettiğim gibi önce spi protokolü nasıl çalışıyor ona bakmak lazım,
uğraşacaksan yardımcı olmaya çalışırım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

salihonur

Alıntı yapılan: selvi - 09 Eylül 2013, 15:00:06
output_high(SCK);
       output_low(SCK);


Arasına biraz gecikme koy. delay_us(1) veya delay_us(2) gibi.

En uygun değeri PIC'in datasheet'ine bakarak ayarlayabilirsin. Max SPI hızını aşmayacak bir hız seçip yarısı kadar gecikme koyman gerekiyor.

selvi

  bahsedilen gecikmeler yaptim bir sey degismedi.spi iletisimi icin 3 farkli yontemle yapilmis.bir tanesi benim onceki mesajlarimda vermistim.digerleri donanim ve yazilim olarak yapilanlari.
   donanisal olarak duzenledigim verici ve alici kodlari asagidaki sekildedir.
  verici:
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlarý

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor

#define buton pin_a0

int8 veri=0x10;  // int8 tipinde deðiþkenler tanýmlanýyor                                // char tipinde deðiþken tanýmlanýyor

/******************* ANA PROGRAM FONKSÝYONU *************************/
void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dýþý
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dýþý
      
   set_tris_a(0x00);
   setup_spi(spi_master| spi_L_to_H | spi_clk_div_4);  // SPI iletiþim ayarlarý belirtiliyor
 
   while(TRUE) // Sonsuz Döngü
   {     
        if(input(buton))
        {
         spi_write(veri);        // Belirtilen adrese yazdýrýlacak veri gönderiliyor
         delay_ms(5);            // Gecikme veriliyor
         while(input(buton));
        }
   }
}


alici:
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlarý

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor

#define led pin_a3

int8 data;  // int8 tipinde deðiþkenler tanýmlanýyor                                // char tipinde deðiþken tanýmlanýyor

#int_ssp // SPI iletiþiminde yazma veya okuma yapýldýðýnda meydana gelen kesme
void SPI_kesmesi()
{
   output_high(pin_c0); // RC0'a baðlý LED yansýn
   delay_ms(250);       // Gecikme veriliyor
   output_low(pin_c0);  // RC0'a baðlý LED sönsün
}


/******************* ANA PROGRAM FONKSÝYONU *************************/
void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dýþý
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dýþý
   
   set_tris_a(0x00);
   set_tris_c(0b00010000);
   
   setup_spi(spi_master| spi_L_to_H | spi_clk_div_4);  // SPI iletiþim ayarlarý belirtiliyor
   
   enable_interrupts(int_ssp);   // SPI kesmesi aktif yapýlýyor
   enable_interrupts(GLOBAL);    // Aktif edilen tüm kesmelere izin ver 

   while(TRUE) // Sonsuz Döngü
   {    
        data=spi_read();
        if(data==0x10)
        {
          output_high(led);delay_ms(500);output_low(led);data=0;
        }
         delay_ms(5);           
   }
}
Yaşam anlamlandırıldıkça kutsaldır....


salihonur

İlk bakışta gözüme çarpanlar kesme içerisinde delay fonsiyonu kullanılamaz. Zaten derlerken hata vermesi gerekir. Hiçbir şekilde de gecikmeye neden olabilecek matematiksel işlem, döngü bulunmamalı. Veri kaybı mutlaka olur.

İkinci bir nokta her ikisi de master tanımlanmış. Biri slave olmalı.

Şu adreste örnekler var: http://www.ccsinfo.com/forum/viewtopic.php?t=26888

Bu da 2-3 sene önce yaptığım 2 PIC'in SPI ile haberleşmesine yönelik deneme devresi ve kodları. Butonlardan birine basınca ikinci PIC'e bağlı LED'in yanıp sönme hızı artıyordu. Hangi buton hatırlamıyorum, denersiniz.

https://hotfile.com/dl/244949873/7c187f3/SPI_HABERLESME.zip.html

selvi

setup_spi(spi_slave| spi_L_to_H | spi_clk_div_4);  // SPI iletiþim ayarlarý belirtiliyor

  yukardaki ayarlari asagidaki sekilde degistirince calisti.
setup_spi(spi_slave| spi_L_to_H | SPI_SS_DISABLED);  // SPI iletiþim ayarlarý belirtiliyor


Yaşam anlamlandırıldıkça kutsaldır....

selvi

      spi iletsimi icin donanim ozelliklerini kullandigimda basit tek bir veri icin calisiyor.ornegin;basta 16 bitlik bir on bilgi gonderip sonrasinda asil veri gondermek istedigimde bu sefer programi calistiramadim.verici ve alici programini tam duzenleyemedim sanki.on bilgi icin:adres_high=0x20,adres_low=0x30,veri=0x10 seklinde bir bilgi yollasam verici ve alicida nasil bir duzenleme yapmak gerekiyor.
Yaşam anlamlandırıldıkça kutsaldır....

salihonur

Eklemiş olduğum dosyada 24 bit haberleşme yapılıyor.

16 bit için birer bayt eksilterek yapabilirsin. Eğer göndereceğiniz asıl veri 16bitten büyük ise paket yapısını en büyüğe göre ayarlarsın.

Ama tavsiyem sabit uzunlukta paket kullan. Daha az uğraşırsın.

Örneğin: 16 bit adres bilgisi ardından 24 bit data göndermek istiyorsun.

Çözüm: Adres bilgisi ve data bilgilerini ayırabilmeniz için ilk önce birer bayt komut yollarsınız. Ve toplam paket uzunluğunu da 4 byte ayarlarsam belirli bir standarta oturtmuş olurum.

Söz gelimi adres bilgisi için 0x01, data için 0x02 belirlemiş olayım.

İlk gönderilen paket.

BYTE 1 = 0x01     // adres bilgisi komutu
BYTE 2 = A          // adres LSB
BYTE 3 = B          // adres MSB
BYTE 4 = önemsiz

Ardından gönderilen paket.

BYTE 1 = 0x02     // data bilgisi komutu
BYTE 2 = K          // data LSB
BYTE 3 = L          // data 2. bayt
BYTE 4 = M         // data MSB

Diyelim ki gönderme sırası da BYTE 1, BYTE 2, BYTE 3, BYTE 4 olsun.


ALICI tarafı

int16 BUFFER(4);

/*

SPI OKUMA RUTİNİ

Burada önemli nokta alış sırası önemli. Eğer BUFFER dizisinin 1. elemanına ilk gelen veriyi atarsan adres LSB 2. sırada olacaktır. Şayet BUFFER dizisinin 4. elemanına gelen veriyi atarsan 3. sıradaki adres LSB olacaktır.

Ben, ilk gönderilenin BYTE 1 olduğunu düşünerek alış sıramı da ilk gelen veriyi BUFFER dizinin 1. elemanına atayacak şekilde ayarladığımı kabul ediyorum.

*/

if( BUFFER[0] == 0x01 )               // adres bilgisi
{
adres_L = BUFFER[1];
adres_H = BUFFER[2];
}

if( BUFFER[0] == 0x02 )               // data bilgisi
{
data_0 = BUFFER[1];
data_1= BUFFER[2];
data_2 = BUFFER[3];

int32 32bitData = make32(0, data_2, data_1, data_0);
}

NOT: Bazı tanımlamalar içeriğin hangi türden olduğunu göstermek içindir. Aynen yazarsan hata verir. Uygun bölgelere yerleştirilmeli.

selvi

#12
  master ve slave kisimlarini transceiver tarzindan duzenledim.slave kismini asagidaki sekilde setup ayari yapinca slave led(buzzer) surekli yanik kaliyor(herhangi bir islem yapmadan master dan)
setup_spi(spi_slave| spi_L_to_H | SPI_SS_DISABLED);  // SPI iletiþim ayarlarý belirtiliyor

  slave kismini asagidaki sekilde setup ayarlarini duzenledigimde butonlara basmama ragmen led yanmiyor.
setup_spi(spi_slave| spi_L_to_H | spi_clk_div_4);


master:
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlarý

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor
#define SECIM_1 pin_a0
#define SECIM_2 pin_a1
#define BUZZER  pin_c0

   int i,y,TxData[4];
   int32 data;
   char t;
   
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   set_tris_a(0b00000011);
   set_tris_b(0x00);
   set_tris_c(0x00);
   
   output_low(BUZZER);
  
  setup_spi(spi_master| spi_L_to_H | spi_clk_div_4);  // SPI iletiþim ayarlarý belirtiliyor
   
   while(TRUE)
   {
         if(SECIM_2)
         {data=0xFFFFFC;y=0xFC;}
         else if(SECIM_1)
         {data=0x999999;y=0x99;}
         else
         {data=0x111111;y=0x11;}
         
         if(SECIM_2 || SECIM_1)
         {
            TxData[0]=make8(data,0);
            TxData[1]=make8(data,1);
            TxData[2]=make8(data,2);
            TxData[3]=0x00;

            for(i=0;i<3;i++)
            {
               t=TxData[i];
               
               spi_write(t);
               
               delay_us(10);
            }
            
         }

         }      
          
           delay_ms(10);

         t=spi_read();
         if(t==0x02)
            output_high(BUZZER);
         else
            output_low(BUZZER);
   }
}


slave:
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlarý

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor

#define BUZZER pin_c0

char RxData[4],S_P;
int SW_DATA;
char SW8_DATA;

#int_ssp
void spi_isr()
{   
         if(S_P<3)
         {
            RxData[S_P]=spi_read(0x01);
            S_P++;
         }   
         else
         {
            RxData[3]=0x00;
            SW_DATA=make32(RxData[3],RxData[2],RxData[1],RxData[0]);
            spi_write(0x02);
            S_P=0;
         }   
}

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   set_tris_c(0b00011000);
   
   enable_interrupts(global);
   enable_interrupts(int_ssp); 
   
  // setup_spi(spi_slave| spi_L_to_H | SPI_SS_DISABLED);  // SPI iletiþim ayarlarý belirtiliyor
  
   setup_spi(spi_slave| spi_L_to_H | spi_clk_div_4);
   
   while(TRUE)
   {

         if(SW_DATA==0xFFFFFC || SW8_DATA==0xFC)
            output_high(BUZZER);
         else
            output_low(BUZZER);
   }
}
Yaşam anlamlandırıldıkça kutsaldır....

salihonur

Seri iletişimde delay kullanmak sıkıntı çıkarabilir. Ayrıca gönderme/geri cevap işlemlerini de interrupt içinden yapmamak gerekir. Nitekim bazı interruptlar gönderme işlemine de izin vermemektedir. Örneğin uart interruptı int_rda sadece alma fonksiyonlarına izin verir. Geri bildirim yapmak isterseniz TX ucunda birşey görmezsiniz. Derleyici de hata vermez.

Onun yerine interrput da buffer dolmuşsa bir bayrak kaldırılıp normal rutinde gerekli işlemler yapılır.

Ayrıca slave tarafında SPI_SS_DISABLED ibaresini kaldırırsan donanımsal CS ucunu pull down yapmak zorunda kalırsın.

Kodları şöyle düzenleyebiliriz: Eğer yine led yanmayacak olursa master tarafında da int_ssp kurul slave dönüşü görülecek mi diye bakmak lazım.

Alıntı yapılan: selvi - 17 Eylül 2013, 14:04:36
master:
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlarý

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor
#define SECIM_1 pin_a0
#define SECIM_2 pin_a1
#define BUZZER  pin_c0

   int i,y,TxData[4];
   int32 data;
   char t;
   
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   set_tris_a(0b00000011);
   set_tris_b(0x00);
   set_tris_c(0x00);
   
   output_low(BUZZER);
  
  setup_spi(spi_master| spi_L_to_H | spi_clk_div_4);  // SPI iletiþim ayarlarý belirtiliyor
   
   while(TRUE)
   {
         if(SECIM_2)
         {data=0xFFFFFC;y=0xFC;}
         else if(SECIM_1)
         {data=0x999999;y=0x99;}
         else
         {data=0x111111;y=0x11;}
         
         if(SECIM_2 || SECIM_1)
         {
            TxData[0]=make8(data,0);
            TxData[1]=make8(data,1);
            TxData[2]=make8(data,2);
            TxData[3]=0x00;

            for(i=0;i<3;i++)
            {
               t=TxData[i];
               
               spi_write(t);
               
               //delay_us(10);
            }
            
         }

         }      
          
           //delay_ms(10);

         t=spi_read();
         if(t==0x02)
            output_high(BUZZER);
         else
            output_low(BUZZER);
   }
}


slave:
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlarý

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor

#define BUZZER pin_c0

char RxData[4],S_P;
int SW_DATA;
char SW8_DATA;
int1 BUFFER_FULL;

#int_ssp
void spi_isr()
{   
         if(!BUFFER_FULL)
         {
            RxData[S_P]=spi_read(0x01);
            
            if(S_P>=3)
            {
              S_P=0;
              BUFFER_FULL=1;
            }else
              S_P++;
         }
         
}

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   set_tris_c(0b00011000);7

   BUFFER_FULL=0;
   
   setup_spi(spi_slave| spi_L_to_H | spi_clk_div_4 | SPI_SS_DISABLED);  // SPI iletiþim ayarlarý belirtiliyor
  
   //setup_spi(spi_slave| spi_L_to_H | spi_clk_div_4);

   enable_interrupts(global);
   enable_interrupts(int_ssp); 
   

   
   while(TRUE)
   {


         if(BUFFER_FULL)
         {
             BUFFER_FULL=0;
             spi_write(0x02);
             SW_DATA=make32(RxData[3],RxData[2],RxData[1],RxData[0]);
          }

         if(SW_DATA==0xFFFFFC || SW8_DATA==0xFC)
            output_high(BUZZER);
         else
            output_low(BUZZER);
   }
}


selvi

#14
  verdiginiz sekilde kodlari denedim slave kismindaki rc0 ledi surekli yanik kaliyor ve sdo,sdi,sck ucu surekli aktif gozukuyor herhangi bir butona basmadan.
 
Alıntı YapEğer yine led yanmayacak olursa master tarafında da int_ssp kurul slave dönüşü görülecek mi diye bakmak lazım.
bahsettiginiz sekilde master kisminda kesme kullandim bu sefer de led yanmiyor.ayriyeten master daki sdi ve slave deki sdo pini sari renk aldi.
master:
#include <16f877.h>     // Kullany'lacak denetleyicinin ba?ly'k dosyasy' tany'ty'ly'yor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarlary'

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullany'lan osilatör frekansy' belirtiliyor


#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

#define SECIM_1 pin_a0
#define SECIM_2 pin_a1
#define BUZZER  pin_c0

   int i,y,TxData[4];
   int32 data;
   char t;
   
 #int_ssp
void spi_isr()
{   
         t=spi_read();
         if(t==0x02)
            output_high(BUZZER);
         else
            output_low(BUZZER);
}
         
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   set_tris_a(0b00000011);
   set_tris_b(0x00);
   set_tris_c(0x00);
   
   output_low(BUZZER);
  
  setup_spi(spi_master| spi_L_to_H | spi_clk_div_4);  // SPI ileti?im ayarlary' belirtiliyor
  
   enable_interrupts(global);
   enable_interrupts(int_ssp); 
   
   
   while(TRUE)
   {
         if(SECIM_2)
         {data=0xFFFFFC;y=0xFC;}
         else if(SECIM_1)
         {data=0x999999;y=0x99;}
         else
         {data=0x111111;y=0x11;}
         
         if(SECIM_2 || SECIM_1)
         {
            TxData[0]=make8(data,0);
            TxData[1]=make8(data,1);
            TxData[2]=make8(data,2);
            TxData[3]=0x00;

            for(i=0;i<3;i++)
            {
               t=TxData[i];
               
               spi_write(t);
               
               //delay_us(10);
            }
            
         }

         }        
   }



mesaj birleştirme:: 18 Eylül 2013, 10:32:05

  pinler deki sari renk master daki sdi giris olarak yonlendirmedigimden dolayi olmus.giris olarak yonlendirdigimde o kisimda normal oldu.programin calismasinda bir degisklik yaratmadi.led yanmiyor.
Yaşam anlamlandırıldıkça kutsaldır....