Tugas Pendahuluan 1 Modul 3
(Percobaan 2 Kondisi 5)
1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Hardware dan Diagram Blok
[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
Dalam rangkaian ini, komunikasi SPI dimanfaatkan antara dua Arduino, yang masing-masing bertindak sebagai master dan slave. Prinsipnya adalah untuk mentransfer informasi mengenai jumlah switch yang aktif dari master ke slave melalui jalur SPI, yang kemudian ditampilkan oleh slave pada seven segment display.
Pada sisi master, pembacaan nilai dari dip switch dilakukan secara berkala untuk mengidentifikasi jumlah switch yang aktif. Setelah itu, nilai tersebut dikirim ke slave melalui jalur SPI untuk ditampilkan pada seven segment display. Di sisi slave, data yang diterima dari master diproses untuk menentukan tata letak tampilan pada seven segment display. Dengan menggunakan protokol SPI, komunikasi antara master dan slave berlangsung dengan efisien, memfasilitasi pertukaran informasi yang akurat dalam waktu singkat.
Rangkaian ini memungkinkan pengendalian yang akurat antara dua Arduino, di mana informasi mengenai jumlah switch yang aktif dapat dengan mudah dipindahkan dan ditampilkan. Oleh karena itu, prinsip operasi rangkaian ini sangat bergantung pada komunikasi SPI yang efisien dan kemampuan masing-masing Arduino untuk membaca dan mengolah informasi dengan tepat.
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
Listing Program :
MASTER:
// Master Arduino
#include <SPI.h> // Library for SPI
int switchPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
int switchStates[] = {}; // Array to store switch states
int activeSwitchesCount = 0; // Counter for active switches
void setup() {
Serial.begin(9600); // Starts serial communication at 9600 baud
for (int i = 0; i < 8; i++) {
pinMode(switchPins[i], INPUT_PULLUP); // Set pins as input with pull-up
}
SPI.begin(); // Initialize SPI communication
SPI.setClockDivider(SPI_CLOCK_DIV8); // Set SPI clock divider to 8 (2MHz)
digitalWrite(SS, HIGH); // Set Slave Select (SS) pin as HIGH
}
void loop() {
byte masterData;
activeSwitchesCount = 0; // Reset active switches counter
// Check the status of each switch
for (int i = 0; i < 8; i++) {
switchStates[i] = digitalRead(switchPins[i]);
if (switchStates[i] == LOW) {
activeSwitchesCount++; // Increment counter for each active switch
}
}
// Begin SPI communication with the slave
digitalWrite(SS, LOW);
masterData = activeSwitchesCount; // Prepare data to send
// Send the count of active switches and print it to the serial monitor
Serial.println(masterData);
SPI.transfer(masterData); // Transmit data to slave
// Add a delay to control the loop timing
delay(1000);
// End SPI communication with the slave
digitalWrite(SS, HIGH);
}
SLAVE:
// Arduino Slave
#include <SPI.h>
const int pinSegmen[] = {9, 8, 7, 6, 5, 4, 3, 2}; // Daftar pin untuk segmen
volatile bool dataDiterima = false; // Flag untuk menunjukkan data diterima
volatile byte dataDariMaster; // Variabel untuk menyimpan data dari master
void setup() {
Serial.begin(9600);
// Mengatur pin sebagai output
for (int i = 0; i < 8; i++) {
pinMode(pinSegmen[i], OUTPUT);
}
// Mengaktifkan SPI dalam mode slave
SPCR |= _BV(SPE);
// Mengatur interupsi SPI
SPI.attachInterrupt();
}
// Fungsi interupsi untuk SPI
ISR(SPI_STC_vect) {
// Simpan data yang diterima dari master
dataDariMaster = SPDR;
// Set flag untuk menunjukkan data telah diterima
dataDiterima = true;
}
void loop() {
// Print data yang diterima ke Serial Monitor
Serial.println(dataDariMaster);
// Jika data telah diterima, tampilkan karakter di segmen
if (dataDiterima) {
tampilkanKarakter(dataDariMaster);
delay(1000);
// Reset flag setelah menampilkan karakter
dataDiterima = false;
}
}
// Fungsi untuk menampilkan karakter pada display 7-segmen
void tampilkanKarakter(int angka) {
// Pola untuk setiap angka (0-9)
byte pola[10][7] = {
{0, 0, 0, 0, 0, 0, 1}, // 0
{1, 0, 0, 1, 1, 1, 1}, // 1
{0, 0, 1, 0, 0, 1, 0}, // 2
{0, 0, 0, 0, 1, 1, 0}, // 3
{1, 0, 0, 1, 1, 0, 0}, // 4
{0, 1, 0, 0, 1, 0, 0}, // 5
{0, 1, 0, 0, 0, 0, 0}, // 6
{0, 0, 0, 1, 1, 1, 1}, // 7
{0, 0, 0, 0, 0, 0, 0}, // 8
{0, 0, 0, 0, 1, 0, 0} // 9
};
// Pastikan input adalah angka 0-9
if (angka >= 0 && angka <= 9) {
// Dapatkan pola untuk angka yang diberikan
int indeks = angka;
// Tampilkan pola di pin segmen
for (int i = 0; i < 7; i++) {
digitalWrite(pinSegmen[i], pola[indeks][i]);
}
}
}
Percobaan 2 Kondisi 5 (SPI-DIP Switch dan Seven Segment) :
Setiap 1 Switch aktif muncul angka sesuai jumlah switch yang aktif pada digit 1
6. Video Simulasi
[Kembali]
7. Download File
[Kembali]
HTML klik disini
File Rangkaian klik disini
Video Percobaan klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Button klik disini
Tidak ada komentar:
Posting Komentar