Arduino
Light Emitting Diode atau sering disingkat dengan LED adalah komponen elektronika yang dapat memancarkan cahaya monokromatik ketika diberikan tegangan maju. LED merupakan keluarga Dioda yang terbuat dari bahan semikonduktor.
//MASTER
#include <SPI.h>
void setup (void) { Serial.begin(115200); //set baud rate to 115200 for usart digitalWrite(SS, HIGH); // disable Slave Select SPI.begin (); SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8 }
void loop (void) { char c; digitalWrite(SS, LOW); // enable Slave Select // send test string for (const char * p =
"Hello, world!\r" ; c = *p; p++) { SPI.transfer (c); Serial.print(c); } digitalWrite(SS, HIGH); // disable Slave Select delay(2000); } |
//SLAVE
#include <SPI.h> char buff [50]; volatile byte indx; volatile boolean process;
void setup (void) { Serial.begin (115200); pinMode(MISO, OUTPUT); // have to send on master in so it set as
output SPCR |= _BV(SPE); // turn on
SPI in slave mode indx = 0; // buffer empty process = false; SPI.attachInterrupt(); // turn on interrupt } ISR (SPI_STC_vect) // SPI interrupt routine { byte c = SPDR; // read byte
from SPI Data Register if (indx<sizeof buff) { buff [indx++] = c; //
save data in the next index in the array buff if (c == '\r') //check
for the end of the word process = true; } } void loop (void) { if (process) { process = false; //reset
the process Serial.println (buff); //print the array on serial monitor indx= 0; //reset button to zero } } |
1. 1. Apakah kit dapat menggunakan lebih dari 1 master? Jelaskan alasannya
Jawab:
Tidak bisa karena untuk komunikasi SPI biasanya terdapat 1 perangkat “master” tunggal yang memulai komunnikasi dan memasok jam yang mengontrol laju transfer data. Dan untuk slavenya bisa menggunakan beberapa slave.
2. Jelaskan pengaruh input pullup dan pulldown pada rangkaian !
Jawab:
Pengaruh input pullup yaitu hubungan antara pin I/O dan tegangan suplai,dengan sakelar terbuka yang dihubungkan antar I/O dan ground ,menjaga masukkan tetap tinggi sedangkan pulldown hubungan antar pin I/O dan ground ,dengan sakelar terbuka yang terhubung antara I/O dan +supply,menjaga masukan tetap rendah.Pull up dan Pulldown bekerja dengan konsep yang sama,keduanya adalah untuk mencegah terjadinya floating(kondisi mengambang).jadi pada rangkaian pull up berarti penambahan resistor ke sinyal high sedangkan pull down berarti penambahan resistor ke sinyal low.
3. Jelaskan prinsip kerja SPI pada rangkaian
Jawab:
Pada rangkaian terdapat dua simulino uno yaitu master dan slave ,button dan led red.Pin 10 master terhubung ke 10 slave,pin 11 master terhubung ke 11 slave ,pin 12 master terhubung ke 12 slave dan pin 13 master terhubung ke 13 slave.Pada pin 2 master terhubung ke button lalu terhubung ke ground yang mana menjadi inputnya.Pada pin 2 slave terhubung ke led red laluke ground yang akan menampilkan outputnya. Pada program Arduino master pertama dideklarasikan library SPI ,setelah itu dideklarasikan button pada pin 2 ,lalu dibuat void setup dimana semua kode didalam fungsi ini hanya di baca satu kali.Setelah itu di set baud rate 115200,lalu dibuat digitalWrite(SS, HIGH), setelah itu dimatikan slave select SPI.begin (),setelah itu pembagi clock dengan 8.Setelah itu,dibuat fungsi void loop dimana semua kode yang berada dalam fungsi ini dibaca berulang.setelah itu dibuat char c ,int nilai=digitalRead(button) ,jika if(nilai==0) lalu digunakan enable select digitalWrite(SS, LOW),lalu dikirim test string maka dibuat for (const char * p = "Hello, world!\r" ; c = *p; p++) setelah itu dibuat SPI.transfer , Serial.print(c) lalu dibuat disable slave select, digitalWrite(SS, HIGH) dan terdapat delay 2000.
Pada program slave,pertama dibuat library SPI dan dideklarasikan led sebagai output pada pin 2,lalu dibuat char buff [50],volatile byte indx ,volatile boolean process.setelah void setup () yang man dibaca sekali ,setelah itu di set baud rate 115200.lalu pinMode(led, OUTPUT) yaitu menjadikan led sebagai output.selanjutnya menghidupkan SPI pada mode slave ,lalu diberi indeks =0 setalah itu jika proses false maka dibuat SPI.attachInterrupt() .lalu dibuat ISR (SPI_STC_vect), setelah itu dibaca byte berupa variabel c dari data register SPI. Lalu dibuat if (indx < sizeof buff), buff [indx++] = c, if (c == '\r') lalu proses benar. Selanjutnya dibuat fungsi void loop dimana fungsi ini dapat dibaca secara berulang.Jika if (process) maka digitalWrite(led, HIGH),lalu proses false maka direset proses lalu dibuat Serial.println (buff) dan indx = 0 .tearkhir ada delay 1000.dan selain kondisi itu else maka digitalWrite(led, LOW) LED mati.
Pada rangkaian input diberikan oleh button saat ditekan dan tidak ditekan,lalu sinyal clock dialirkan dari master ke slave yang berfungsi untuk singkronisasi.master dapat memilih slave mana yang akan dikirimkan data melalui slave select,kemudian data dikirimkan dari master ke slave melalui MOSI .Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO.jika button ditekan maka data akan ditransmisikan melalui MOSI dan perlu disinkronisasikan ,sehingga led menyala walau agak ada delay dan apabila dibiarkan ditekan maka led mati lalu hidup kembali .jika button tidak ditekan maka akan ditransmisikan sesuai prinsip diatas sehingga led mati.
Tidak ada komentar:
Posting Komentar