Jaman kuliah dulu kalau mau bikin rangkaian elektronik ya harus dibikin beneran dengan komponen langsung. Belum ada emulator buat mendesain dan mengetes apakah rangkaian elektronik bisa berjalan atau tidak.
Saat ini semua sudah dimudahkan dengan adanya SPICE buat mendesain dan mengetes rangkaian elektronik analog, spt misalnya amplifier dan filter. Sementara untuk mendesain rangkaian elektronik digital, kita bisa menggunakan Tinkercad dari Autodesk (https://www.tinkercad.com). Meskipun daftar komponen di Tinkercad cukup terbatas, namun sudah cukup untuk belajar dan bermain mendesain rangkaian sederhana. Dan yg membuatnya lebih menarik adalah adanya komponen Arduino sebagai development board berbasis mikrokontroler Atmel.
Gambar di atas menunjukkan desain jam digital dengan bantuan Arduino Uno. Desain ini saya buat untuk membantu teman yg ingin membuat sendiri jam digital untuk gereja. Rangkaian lengkapnya bisa dicoba di sini (perlu login terlebih dahulu untuk mensimulasikan rangkaian ini):
https://tinkercad.com/things/k1uhp8IrAko
Cara kerjanya adalah sbb:
- Di dalam Arduino dilakukan counting detik dari 0 sampai 86400 (1 hari)
- Setiap detik Arduino mengirimkan angka “detik”, “menit”, dan “jam” secara serial dan bertingkat ke deretan SIPO (Serial In Parallel Out) 74HC595
- Setelah semua angka terkirim, Arduino mengirimkan sinyal “latch” untuk membuka SIPO 74HC595 sehingga output parallel-nya terbuka dan dapat digunakan untuk menyalakan seven segment
- Ulangi ke langkah 2
Berikut source code Arduino Uno-nya:
int digit[] = {
// xgfedcba (x = not used)
B11000000, // 0
B11111001, // 1
B10100100, // 2
B10110000, // 3
B10011001, // 4
B10010010, // 5
B10000010, // 6
B11111000, // 7
B10000000, // 8
B10010000}; // 9//Pin connected to ST_CP of 74HC595
int latchPin = 10;
//Pin connected to SH_CP of 74HC595
int clockPin = 8;
//Pin connected to DS of 74HC595
int dataPin = 0;void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}void loop()
{
int i,hari;
int time[6];for(hari=0; hari<1825; hari++)
{
for(i=0; i<86400; i++)
{
time[0] = (i/36000); // Hour
time[1] = (i/3600)%10; // Hour
time[2] = (i/600)%6; // minute
time[3] = (i/60)%10; // minute
time[4] = (i/10)%6; // second
time[5] = i%10; // seconddigitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, digit[time[4]]);
shiftOut(dataPin, clockPin, MSBFIRST, digit[time[5]]);
digitalWrite(latchPin, HIGH);delay(1000);
}
}
}
Selamat berkreasi