Program Kodları
//___________________MASTER_________________
#include<SPI.h>
void setup()
{
SPI.setClockDivider(SPI_CLOCK_DIV4); //clock bölme 4 yapıldı.
SPI.begin(); //SPI iletişim başlatıldı
}
void loop()
{
digitalWrite(SS, LOW); //slave seçme biti LOW yapılarak slave cihaz ile iletişim başladı.
SPI.beginTransaction(SPISettings(16000000, MSBFIRST, SPI_MODE0)); //Max SPI hızı:16Mhz, Bitlerin gönderim sırası, SPI iletişim modu.
SPI.transfer(48);
delay(1000);
SPI.transfer(49);
delay(1000);
SPI.endTransaction();
digitalWrite(SS, HIGH); //slave seçme biti HIGH yapılarak slave cihaz ile iletişim kapatıldı.
}
//______________________SLAVE___________________
#include<SPI.h>
int gelen;
void setup()
{
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
SPCR = (1 << SPE) | (0 << MSTR); //SPE=1 ile SPI iletişim etkinleştirildi.
//MSTR=0 ile Arduino slave moda alındı.
SPI.attachInterrupt(); //SPI kesmesi aktif edildi. Kesmeyi aktif
//etmek için SPCR kayıtçısnın 7. biti olan
//SPIE=1 yapılarak da SPI kesmesi aktif edilebilir.
}
void loop()
{
if (gelen == 48)
{
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
}
else
{
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
}
}
//slave Arduino'ya veri geldiğinde çalışan kesme fonksiyonu
ISR(SPI_STC_vect)
{
gelen = SPDR; //slave cihaza gelen veri SPDR kayıtçısına kaydedilir.
//Buradaki veri gelen değişkenine atandı.
}
Devre Şeması
0 comments:
Yorum Gönder