Advertise here

Sabtu, 16 Maret 2019

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

Circuit Wiring



            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

Advetise banner