STM32F103 Scanning 4 Digit Seven Segment
/ 07:46
Introducing
Ciri
khas dari piranti digital salah satunya adalah seven segment yang biasa
digunakan untuk menampilkan berupa angka-angka pada perangkat. Jika diperhatikan
angka angka yang tampil pada seven segment adalah suatu dioda cahaya (LED) yang
disusun membentuk angka 8, dan pada masing masing element angka merupkan
garis-garis LED yang terputus dan ini yang di sebut dengan segment.
Metode
yang digunakan untuk menyalakan segment ini ada berbagai macam cara contohnya
adalah Metode data pararel dimana satu digit seven segment membutuhkan 8 jalur
data, jika memiliki 4 digit itu berarti anda harus menyiapkan sebanyak 24 jalur
data. Wow cukup banyak sekali, sepertinya kalau pakai cara ini port MCU sudah
habis terpakai semua.
Metode pertama nampaknya tidak praktis lagi kalau digunakan, kita beralih ke metode kedua yaitu dengan scanning dimana 1 digit seven segment di scan secara bergantian dengan seven segment lainnya menggunakan frekuensi yang sangat cepat agar tidak timbul kedipan (flicker) biasanya 50-60Hz tiap tiap 1 digit seven segment di scan. Metode ini cukup menghemat pemakaian jalur data yang digunakan misalnya ketika menggunakan 4 digit berarti 8 data untuk tiap tiap segment dan 4 untuk common, jadi totalnya 14 jalur data yang digunakan.
Metode yang ketiga menggunakan data serial, tentu saja ini membutuhkan chip tambahan untuk merubah data serial menjadi pararel, chip-chip yang sering digunakan adalah 74HC595, MAX7219, TM1637, dll. Memang cukup hemat sekali dalam metode ini, penggunaan jalur data yang dipakai untuk 4 digit atau lebih hanya membutuhkan 3 jalur data yaitu Dout, SCK/CLK, dan EN saja.
Metode yang ke-empat menggunakan Serial Peripheral Interface (SPI) metode ini setidaknya membutuhkan 3 jalur data yaitu MOSI, SCK, dan SS/EN.
Metode yang kelima menggunakan Bus I2C, inilah metode yang paling hemat jika ingin digunakan karena hanya membutuhkan 2 jalur data saja yaitu SDA dan SCL.
Setiap metode memiliki kelebihan dan kekurangan masing-masing, ini bergantung kepada keperluan anda. Dalam tulisan ini saya membahas metode yang kedua yaitu scanning karena metode ini tidak membutuhkan perangkat tambahan lagi. Pada metode ini pin dari masing-masing segment dihubungkan sesuai dengan urutan segmentnya misal segment A harus ditemukan dengan segment A, segment B ditemukan dengan Segment B, dan selanjutnya semuanya di pararel sampai segment G dan DP. Ilustrasinya seperti yang ditampilkan pada gambar dibawah ini
Bill Of Material
Bahan-bahan yang diperlukan dalam pengembangan proyek ini adalah:
- Board STM32F103C Blue Pill
- 4 Digit Seven Segment HS220561K Common Cathode
- Bread Board 400 dot point
- Dan beberapa kabel Jumper Female to Male, dan Male to Male
PIN Connection Table
Seven
Segment
|
STM32
|
A
|
PA11
|
B
|
PA12
|
C
|
PB11
|
D
|
PB10
|
E
|
PB1
|
F
|
PB15
|
G
|
PB0
|
DP
|
PA7
|
COM1
|
PB15
|
COM2
|
PB14
|
COM3
|
PB13
|
COM4
|
PB12
|
Program
//Mendifinisikan
nama pin yang dipakai
#define
dig1 PB15
#define
dig2 PB14
#define
dig3 PB13
#define
dig4 PB12
#define
segA PA11 //SEG A
#define
segB PA12 //SEG B
#define
segC PB11 //SEG C
#define
segD PB10 //SEG D
#define
segE PB1 //SEG E
#define
segF PA15 //SEG F
#define
segG PB0 //SEG G
#define
segP PA7 //SEG DP
//Menentukan
tipe common seven segment yang dipakai anode=false atau katode=true
boolean
commonHigh = false;
int
number;
//Data
base pembentuk karakter
int
dig[16] = {
0b1111110, //0
0b0110000, //1
0b1101101, //2
0b1111001, //3
0b0110011, //4
0b1011011, //5
0b1011111, //6
0b1110000, //7
0b1111111, //8
0b1111011, //9
0b1110111, //a
0b0011111, //b
0b1001110, //c
0b0111101, //d
0b1001111, //e
0b0000000, //f
};
void
setup() {
//Konfigurasi seluruh pin yang di pakai
menjadi OUTPUT
pinMode(dig1,OUTPUT);
pinMode(dig2,OUTPUT);
pinMode(dig3,OUTPUT);
pinMode(dig4,OUTPUT);
pinMode(segA,OUTPUT);
pinMode(segB,OUTPUT);
pinMode(segC,OUTPUT);
pinMode(segD,OUTPUT);
pinMode(segE,OUTPUT);
pinMode(segF,OUTPUT);
pinMode(segG,OUTPUT);
}
void
loop() {
//
tampilkan angka 0123 ke seven segment
viewDisp(0,1,2,3);
}
void
writeDigitToDisplay(int digit) {
int
currentBit;
int
bitOn;
//-----------------------------------
currentBit = (1<<(6));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segA, bitOn);
//-----------------------------------
currentBit = (1<<(5));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segB, bitOn);
//-----------------------------------
currentBit = (1<<(4));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segC, bitOn);
//-----------------------------------
currentBit = (1<<(3));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segD, bitOn);
//-----------------------------------
currentBit = (1<<(2));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segE, bitOn);
//-----------------------------------
currentBit = (1<<(1));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segF, bitOn);
//-----------------------------------
currentBit = (1<<(0));
bitOn = (currentBit & dig[digit])!=0;
if(commonHigh) {
bitOn = !bitOn;
}
digitalWrite(segG, bitOn);
}
void
viewDisp(int digit1,int digit2,int digit3,int digit4){
//diplay 1 active
digitalWrite(dig1,LOW);
writeDigitToDisplay(digit1);
delay(3);
digitalWrite(dig1,HIGH);
//diplay 2 active
digitalWrite(dig2,LOW);
writeDigitToDisplay(digit2);
delay(3);
digitalWrite(dig2,HIGH);
//diplay 3 active
digitalWrite(dig3,LOW);
writeDigitToDisplay(digit3);
delay(3);
digitalWrite(dig3,HIGH);
//diplay 4 active
digitalWrite(dig4,LOW);
writeDigitToDisplay(digit4);
delay(3);
digitalWrite(dig4,HIGH);
}
Jika anda ingin mengganti
angka-angka yang ingin ditampilkan anda cukup memanggil fungsi viewDisp(0,1,2,3);
Dari fungsi ini memiliki 4
parameter yaitu viewDisp(digit1,digit2,digit3,digit4);
Sebagai contoh anda ingin menampilkan angka 2019, maka penulisan fungsinya adalah
viewDisp(2,0,1,9);
Test & Result
Hasil
pengujian program dan rangkaian yang sudah dijelaskan diatas nampak seperi
gambar foto dibawah ini, yang menampilkan angka 0 1 2 3. Banyak sekali
pengembangan aplikasi yang memerlukan tampilan seven segment ini, contoh saja
jam digital, indikator tegangan, frekuensi counter, timer, stop watch, dan alat
pengembangan lainnya.
Comments 0
EmoticonEmoticon