Display 7Segment dengan IC Max7219

Display 7segment biasa digunakan untuk menampilkan sebuah karakter dengan menggunakan 7 segment led. Cara mengaksesnya pun sangat mudah hanya dengan memberikan tegangan high atau low pada 1 pin segment maka led pada segment tersebut akan menyala. Dengan menggunakan beberapa kombinasi, maka led akan membentuk sebuah character atau angka seperti apa yang diinginkan.

Sebelumnya, perlu kita ketahui cara kerja 7segment, 7segment memiliki dua tipe common yaitu common katoda dan common anoda. Common adalah pin yang tersambung pada setiap segment. Pada common katoda, pin common tersambung pada GND, sehingga kita dapat menyalakan led dengan memberikan nilai positive atau aktif High. Sedangkan pada common anoda, pin common tersambung dengan VCC, sehingga kita dapat menyalakan led dengan memberikan nilai negative atau aktif Low.

Untuk mempermudah mengingat bagaimana katoda dan anoda bekerja, maka bisa dilakukan dengan mengingat kata ” Ka.P.A.N ” yaitu Katoda Positive Anoda Negative, maksudnya pada common katoda 7segment akan menyala apabila kita memberikan nilai positive dan apabila 7segment menggunakan common anoda maka kita dapat menyalakan segment dengan memberikan nilai negative.

Berikut ini adalah perbedaan rangkaian common katoda dan common anoda :

Perbedaan Common Katoda dan Common Anoda

Lanjut ke topik pembahasan, kita akan membuat simulasi menggunakan proteus dan CodeVision AVR untuk mengakses 7segment yang ditambahkan ic max7219. Tujuan menggunakan ic max7219 adalah untuk meringkas penggunaan pin, apabila kita tidak menggunakan ic max7219 dalam artian kita hanya menggunakan pin I/O pada mikro saja, mungkin kita hanya dapat mengakses 4 buah 7segment saja (nb : menggunakan atmega16 yang tergolong memiliki pin I/O yang banyak). Dengan menggunakan ic max7219, kita dapat mengakses lebih dari 24 7segment (saya terakhir menggunakan sebanyak 32 7segment). Ic max7219 diakses dengan menggunakan pin SPI pada mikrokontroller, kita akan menggunakan mosi, ss, dan sck untuk mengakses ic max7219. Datasheet max7219 dapat dibaca disini.

Apa saja yang perlu kita persiapkan? Berikut ini list untuk membuat project kita kali ini :

  1. Proteus (versi 7 keatas)
  2. CodeVision AVR
  3. Do’a dengan menyebut nama Allah, semoga ilmunya barokah. Amiin

Jika alat tempur sudah siap dan do’a sudah dilakukan, kita lanjut ke pembahasan :

1. Membuat Desain pada Proteus

Silahkan buka proteus dan buat desain seperti gambar berikut.

Desain Proteus

Komponen :

a. ATMEGA8 (1 Buah)
b. MAX7219 (2 Buah)
c. 7SEG-MPX8-CC-BLUE (2 Buah)
d. RES 10K (2 Buah)
e. BUTTON (1 Buah)
f. GROUND (1 Buah)
g. POWER (2 Buah)

2. Membuat Program di CodeVision AVR

Pada sesi ini kita akan membuat program untuk mengakses MAX7219 menggunakan SPI dan menyalakan 7segment, berikut ini source codenya :

#include "mega8.h"
#include "delay.h"

#define PIN_SCK PORTB5
#define PIN_MOSI PORTB3
#define PIN_SS PORTB2

#define PIN_SS1 PORTB1

#define ON 1
#define OFF 0

#define cs_lo PORTB |= (1<<PIN_SS)
#define cs_hi PORTB &= ~(1<<PIN_SS)

#define cs1_lo PORTB |= (1<<PIN_SS1)
#define cs1_hi PORTB &= ~(1<<PIN_SS1)

#define MAX7219_MODE_DECODE 0x00
#define MAX7219_MODE_INTENSITY 0x0A
#define MAX7219_MODE_SCAN_LIMIT 0x0B
#define MAX7219_MODE_POWER 0x0C
#define MAX7219_MODE_TEST 0x0F
#define MAX7219_MODE_NOOP 0x00

#define MAX7219_DIGIT0 0x01
#define MAX7219_DIGIT1 0x02
#define MAX7219_DIGIT2 0x03
#define MAX7219_DIGIT3 0x04
#define MAX7219_DIGIT4 0x05
#define MAX7219_DIGIT5 0x06
#define MAX7219_DIGIT6 0x07
#define MAX7219_DIGIT7 0x08

#define MAX7219_CHAR_BLANK 0xF
#define MAX7219_CHAR_NEGATIVE 0xA

char jumlah_digit = 8;

void spiSendByte (char databyte)
{
SPDR = databyte;
while (!(SPSR & (1 << SPIF)));
}

void MAX7219_writeData(char data_register, char data,unsigned char chip)
{
cs_hi;
if(chip==0)
{
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(data_register);
spiSendByte(data);
}
if(chip==1)
{
spiSendByte(data_register);
spiSendByte(data);
spiSendByte(MAX7219_MODE_NOOP);
spiSendByte(MAX7219_MODE_NOOP);
}
cs_lo;
}

void displaySegment()
{
//display 0
MAX7219_writeData(MAX7219_DIGIT0, 0b01001110,0);
MAX7219_writeData(MAX7219_DIGIT1, 0b01111110,0);
MAX7219_writeData(MAX7219_DIGIT2, 0b00011111,0);
MAX7219_writeData(MAX7219_DIGIT3, 0b01110111,0);

//display 1
MAX7219_writeData(MAX7219_DIGIT0, 0b01111110,1);
MAX7219_writeData(MAX7219_DIGIT1, 0b00110000,1);
MAX7219_writeData(MAX7219_DIGIT2, 0b01101101,1);
MAX7219_writeData(MAX7219_DIGIT3, 0b01111001,1);
MAX7219_writeData(MAX7219_DIGIT4, 0b00110011,1);
MAX7219_writeData(MAX7219_DIGIT5, 0b01011011,1);
MAX7219_writeData(MAX7219_DIGIT6, 0b01011111,1);
MAX7219_writeData(MAX7219_DIGIT7, 0b01110000,1);
}

void main(void)
{
unsigned int j;

DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS)| (1 << PIN_SS1);
SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1);

for(j=0;j<2;j++)
{
MAX7219_writeData(MAX7219_MODE_DECODE, 0xFF,j);
MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT, jumlah_digit-1,j);
MAX7219_writeData(MAX7219_MODE_INTENSITY, 8,j);
MAX7219_writeData(MAX7219_MODE_POWER, ON,j);
}

while(1)
{
displaySegment();
delay_ms(1000);
}
}

Program untuk mengganti tampilan pada segment berada pada fungsi displaySegment(). Untuk menampilkan karakter pada 7segment digunakan bilangan biner 1 dan 0, 1 untuk menyalakan led dan 0 untuk mematikan led (common catode).

3. Running Test Program

Buka desain proteus kembali, kemudian masukkan program dengan format .hex yang telah di build oleh codevisionAVR, kemudian running simulasi berada pada pojok kiri bawah. Jika semua langkah berjalan dengan baik, maka didapatkan hasil seperti pada gambar uji coba berikut ini :

Hasil Running Test

Banyak sekali pengaplikasian dari 7segment, kita bisa membuat sistem papan skor, jam digital, running text dan masih banyak lagi sesuai kebutuhan. Jika berminat belajar lebih lanjut atau ada yang perlu didiskusikan, silahkan berkomentar dibawah ya. Terimakasih.

Add a Comment

Your email address will not be published. Required fields are marked *