TUJUAN :
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7 segment 3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.
PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler
TEORI DASARSeven segment merupakan segment-segment yang digunakan untuk menampilkan angka-angka atau huruf. Seven segment ini tersusun atas 7 buah LED yang membentuk membentuk angka atau huruf dimana penyusunnya menggunakan label dari ‘a’ sampai ‘g’ dan satu lagi untuk dot point (DP). Salah satu terminal LED dihubungkan menjadi satu sebagai kaki common (biasanya pin-nya berada ditengah)
Gambar 4.1. Skematik Sebuah Seven Segment
Pin 3 dan 8 = untuk mengaktifkan seven segment diberikan logika high (common anode) dan logika low (common cathode). Jenis-jenis Seven Segment:
1. Common Anoda
Semua anoda dari LED dalam seven segment disatukan secara parallel dan semua itu dihubungkan ke VCC, dan kemudian LED dihubungkan melalui tahanan pembatas arus keluar dari penggerak LED. Karena dihubungkan ke VCC, maka COMMON ANODA ini berada pada kondisi AKTIF LOW (led akan menyala/aktif bila diberi logika 0).
27 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara parallel dan dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke GROUND, maka COMMON KATODA ini berada pada kondisi AKTIF HIGH (led akan menyala/aktif bila diberi logika 1).
Gambar 4.2. Bentuk Fisik Seven Segment CC dan CA Prinsip Kerja :
Prinsip kerja seven segment ialah input biner pada switch dikonversikan masuk ke dalam decoder, baru kemudian decoder mengkonversi bilangan biner tersebut menjadi decimal, yang nantinya akan ditampilkan pada seven segment.
Seven segment dapat menampilkan angka-angka desimal dan beberapa karakter tertentu melalui kombinasi aktif atau tidaknya LED dalam seven segment. Untuk memudahkan penggunaan seven segment, umumnya digunakan sebuah decoder( mengubah/ mengkoversi input bilangan biner menjadi decimal) atau seven segment driver yang akan mengatur aktif tidaknya led-led dalam seven segment sesuai dengan nilai biner yang diberikan.
Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit dan memberikan keluaran yang melewatkan arus melalui segmen untuk menampilkan angka desimal. Jenis dekoder BCD ke seven segment ada dua macam yaitu dekoder yang berfungsi untuk menyalakan seven segment mode common anoda dan dekoder yang berfungsi untuk menyalakan seven segment mode common katoda. Percobaan 5.
Buatlah rangkaian seperti dibawah ini untuk sebuah seven segment
28 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
Ketik program berikut dikomputer kemudian lakukan upload pada mikrokontroler const byte numeral[10] = {
//ABCDEFG /dp B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 };
// pins segment dp,G,F,E,D,C,B,A
const int segmentPins[8] = { 5,9,8,7,6,4,3,2}; void setup(){
for(int i=0; i < 8; i++){
pinMode(segmentPins[i], OUTPUT); } }
void loop(){
for(int i=0; i <= 10; i++){ showDigit(i);
delay(1000); }
delay(2000); }
void showDigit( int number){ boolean isBitSet;
for(int segment = 1; segment < 8; segment++){ if( number < 0 || number > 9){
isBitSet = 0; // turn off all segments } else{
// isBitSet will be true if given bit is 1 isBitSet = bitRead(numeral[number], segment);} isBitSet = !isBitSet; //
digitalWrite( segmentPins[segment], isBitSet); }
} Percobaan 6.
Untuk percobaan berikut ini hubungkan rangkaian seven segment 4 bit dengan pin mikrokontroler. Sambungkan C1 dengan dengan pin 11, C2 dengan pin 10, C3 dengan pin 9, dan C4 dengan pin 6, sedangkan datanya pada masing-masing segmen dihubungkan seperti dibawah ini :
Pin pada seven segmen = pin di Arduino segA = A1; //Display pin 14
segB = 3; //Display pin 16
segC = 4; //Display pin 13
segD = 5; //Display pin 3
segE = A0; //Display pin 5
segF = 7; //Display pin 11
29 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
Gambar 4.4. Rangkaian Seven Segment 4 bit
Ketiklah program dibawah ini kemudian lakukan upload pada mikrokontroler :
int digit1 = 11; //PWM Display pin 1
int digit2 = 10; //PWM Display pin 2
int digit3 = 9; //PWM Display pin 6
int digit4 = 6; //PWM Display pin 8
int segA = A1; //Display pin 14
int segB = 3; //Display pin 16
int segC = 4; //Display pin 13
int segD = 5; //Display pin 3
int segE = A0; //Display pin 5
int segF = 7; //Display pin 11
int segG = 8; //Display pin 15
void setup() { pinMode(segA, OUTPUT); pinMode(segB, OUTPUT); pinMode(segC, OUTPUT); pinMode(segD, OUTPUT); pinMode(segE, OUTPUT); pinMode(segF, OUTPUT); pinMode(segG, OUTPUT); pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); pinMode(13, OUTPUT); }
30 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
void loop() {
displayNumber(millis()/1000); }
void displayNumber(int toDisplay) { #define DISPLAY_BRIGHTNESS 500 #define DIGIT_ON HIGH
#define DIGIT_OFF LOW
long beginTime = millis();
for(int digit = 4 ; digit > 0 ; digit--) { //Turn on a digit for a short amount of time
switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); break; case 2: digitalWrite(digit2, DIGIT_ON); break; case 3: digitalWrite(digit3, DIGIT_ON); break; case 4: digitalWrite(digit4, DIGIT_ON); break; }
//Turn on the right segments for this digit
lightNumber(toDisplay % 10); toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us, 500 is pretty good)
//Turn off all segments
lightNumber(10); //Turn off all digits
digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF); }
while( (millis() - beginTime) < 10) ;
//Wait for 20ms to pass before we paint the display again
}
//Given a number, turns on those segments //If number == 10, then turn off number
void lightNumber(int numberToDisplay) { #define SEGMENT_ON LOW
31 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
switch (numberToDisplay){ case 0: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_OFF); break; case 1: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break; case 2: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); break; case 3: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); break; case 4: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break; case 5: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
32 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
case 6: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break; case 7: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break; case 8: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break; case 9: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break; case 10: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break; } }
LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! 3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! 4. Ketiklah program yang diatas pada software Arduino !
33 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! 7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
34 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA