Mikro 2023 Modul 3 Percobaan 2
9:53:00 PM
Percobaan II
Komunikasi SPI
1. Foto Hardware dan Diagram Blok [Kembali]
2. Prosedur Percobaan [Kembali]
- Rangkailah seperti rangkaian berikut
- Buka Arduino IDE dan masukan listing Program
- Upload program ke arduino
- Mencoba rangkaiannya dengan memvariasikan input pada dipswitch.
Gambar 1. Rangkaian Simulasi. Prinsip Kerja: Jalan kerja rangkaian ini ialah dimana dipswitch berfungsi sebagai input di master arduino dan output berupa seven segment di slave arduino, master arduino berfungsi sebagai inputan di pin keberapa yang berlogika 1 apabila ada di pin 9 maka master arduino akan mengirimkan data 9 ke slave arduino. setelah di terimanya data 9 oleh slave arduino maka akan di tampilkan pada seven segment. |
4. Flowchart dan Listing Program [Kembali]
Flowchart:
Listing Program:
Master arduino:
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {};
void setup (){
Serial.begin(9600); //Starts Serial Communication at Baud Rate 9600
for(int i = 0; i < 8; i++){
pinMode(dip[i], INPUT);
}
SPI.begin(); //Begins the SPI commnuication
SPI.setClockDivider(SPI_CLOCK_DIV8); //Sets clock for SPI communication at 8 (16/8=2Mhz)
digitalWrite(SS,HIGH); //Setting slaveselect sebagai 1 maka slave tidak terkoneksi
}
void loop(void){
byte Mastersend;
int x = 1;
for(int i = 0; i < 8; i++){
dipvalue[i] = digitalRead(dip[i]);
if(dipvalue[i] == HIGH){
x = dip[i];
}
}
digitalWrite(SS, LOW); //Memulai komunikasi dengan slave terkoneksi dengan master
Mastersend = x;
SPI.transfer(Mastersend); //Mengirim data yang diterima di master di berikan ke slave
delay(1000);
}
Slave Arduino:
#include<SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
void setup(){
Serial.begin(9600);
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
SPCR |= _BV(SPE); //Turn on SPI in Slave Mode
SPI.attachInterrupt(); //Interuupt ON is set for SPI commnucation
}
ISR (SPI_STC_vect){ //Inerrrput routine function
Slavereceived = SPDR; // Value received from master if store in variable slavereceived
received = true; //Sets received as True
}
void loop(){
if(received){//Logic to SET LED ON OR OFF depending upon the value recerived from master
displayCharacter(Slavereceived);
delay(1000);
}
}
void displayCharacter(int ch) { // Setting nilai bit untuk menampilkan ke seven segment
byte patterns[][9] = {
{0, 0, 0, 0, 0, 0, 1, 1}, // 0
{1, 0, 0, 1, 1, 1, 1, 1}, // 1
{0, 0, 1, 0, 0, 1, 0, 1}, // 2
{0, 0, 0, 0, 1, 1, 0, 1}, // 3
{1, 0, 0, 1, 1, 0, 0, 1}, // 4
{0, 1, 0, 0, 1, 0, 0, 1}, // 5
{0, 1, 0, 0, 0, 0, 0, 1}, // 6
{0, 0, 0, 1, 1, 1, 1, 1}, // 7
{0, 0, 0, 0, 0, 0, 0, 1}, // 8
{0, 0, 0, 0, 1, 0, 0, 1}, // 9
};
if ((ch >= 0 && ch <= 9)) {
// Get the digit index (0-9) from the character
int index = ch;
// Write the pattern to the segment pins
for (int i = 0; i < 7; i++) {
}
}
}
Ketika tidak terdapat dipswitch on maka angka yang ditampilkan ialah 1 ketika terdapat yang nyala akan disesuaikan dengan pada pin berapa yang menyala atau berlogika 1, jika pada pin 2 maka akan menampilkan angka 2. dan lain-lainnya
᭒ HTML↠ klik disini
᭒ Aplikasi↠ klik disini
᭒ Gambar Rangkaian↠ klik disini
᭒ Video Percobaan↠ klik disini
᭒ Datasheet 74LS249 (Decoder BCD to Seven Segment) ↠ klik disini