Assalamu'alaikum Wr. Wb. pada kesempatan ini saya akan menjelaskan bagaimana cara membuat running text LED dot matrix dengan menggunakan Mikrokontroler ATMEGA 16 dan IC 74HC595. Sebelum itu alangkah baiknya kita terlebih dahulu mengetahui apa itu running text. Running text merupakan piranti elektronik yang digunakan untuk menampilkan tulisan bergerak/berjalan. penggunaannya sangat beragam seperti papan informasi, iklan, dll.
Kemudian lanjut saja ke pembahasan yang akan kita lakukan, di sini saya menggunakan perangkat lunak Code Vision AVR untuk membuat dan melakukan kompilasi programnya dan ISIS Proteus untuk membuat desain sistem dan melakukan simulasi.
Berikut langkah-langkahnya :
Sekian dan Terimakasih atas kunjungannya...
- Membuat program running text pada CV AVR dengan cara mengklik "Create new file or project" seperti pada gambar berikut.
- Setelah terbuka jendela "Create New File" pilih "Project" pada "File Type" kemudian klik OK.
- Pada jendela "CodeWizardAVR" pilih "AT90, ATiny, ATmega, FPSLIC" pada jenis chip AVR.
- Kemudian pilih tab "Ports", pada tutorial ini menggunakan PORTC.0 sampai dengan PORTC.7 sebagai keluaran data untuk kolom dan PORTD.0 sampai dengan PORTD.2 data keluaran baris. Di sini juga menggunakan data keluaran active low yang mengindikasikan bahwa PORT akan aktif jika nilai yang diberikan 0. Untuk Port yang lainnya dibiarkan saja.
- Setelah itu pilih tab "Chip" untuk memilih jenis mikrokontroler AVR yang ingin digunakan, di sini menggunakan ATmega16 dengan clock speed (internal) 8 MHz.
- Selanjutnya klik menu "Program" dan pilih "Generate, Save dan Exit".
- Muncul jendela baru untuk menyimpan file yang dibutuhkan CV AVR untuk membuat project. Ada tiga jenis tipe file yang akan disimpan yaitu "*.c","*.prj" dan "*.cwp". untuk tanda "*" isikan sesuai nama yang anda inginkan, usahakan namanya sama agar mudah diingat.
- Setelah semua file yang dibutuhkannya disimpan maka akan terlihat seperti berikut.
- Selanjutnya mengedit bagian program running text dot matrix-nya menggunakan sourcecode berikut.
- /*****************************************************
- This program was produced by the
- CodeWizardAVR V2.05.3 Standard
- Automatic Program Generator
- © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
- http://www.hpinfotech.com
- Project : Running Text Dot Matrix
- Version :
- Date : 26/08/2019
- Author : Vidi Fitriansyah Hidarlan
- Company : Personal
- Comments:
- Chip type : ATmega16
- Program type : Application
- AVR Core Clock frequency: 8,000000 MHz
- Memory model : Small
- External RAM size : 0
- Data Stack size : 256
- *****************************************************/
- #include <mega16.h>
- #include <delay.h>
- #include <io.h>
- #define data_hi PORTD.0=1
- #define data_lo PORTD.0=0
- // Declare your global variables here
- void clock()
- {
- PORTD.1=0; //Clock
- PORTD.2=1; //Latch
- PORTD.1=1; //Clock
- PORTD.2=0; //Latch
- delay_us(1);
- }
- void main(void)
- {
- // Declare your local variables here
- char data_huruf[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//spasi karakter kosong
- 0b11111111,0b11111111,0b11011011,0b11011011,0b11011011,0b11011011,0b11000011,0b11000011,0,//huruf E
- 0b11111111,0b11111111,0b00000011,0b00000011,0b00000011,0b00000011,0,//huruf L
- 0b11111111,0b11111111,0b11011011,0b11011011,0b11011011,0b11011011,0b11000011,0b11000011,0,//huruf E
- 0b11111111,0b11111111,0b00111100,0b01100110,0b11000011,0b10000001,0,//huruf K
- 0b11000000,0b11000000,0b11000000,0b11111111,0b11111111,0b11000000,0b11000000,0b11000000,0,//huruf T
- 0b11111111,0b11111111,0b11001100,0b11001110,0b01111011,0b00110001,0,//huruf R
- 0b01111110,0b11111111,0b11000011,0b11000011,0b11000011,0b11000011,0b11111111,0b01111110,0,0,0,//huruf O
- 0b11111110,0b11111111,0b00000011,0b00000011,0b00000011,0b00000011,0b11111111,0b11111110,0,//huruf U
- 0b11111111,0b11111111,0b01110000,0b00111000,0b00011100,0b00001110,0b11111111,0b11111111,0,//huruf N
- 0b01110010,0b11111011,0b11011011,0b11011011,0b11011111,0b01001110,0,//huruf S
- 0b01111110,0b11111111,0b11000011,0b11000011,0b11000011,0b11000011,0b11111111,0b01111110,0,//huruf O
- 0b11111111,0b11111111,0b11011011,0b11011011,0b11011011,0b11011011,0b11000011,0b11000011,0,//huruf E
- 0b11111111,0b11111111,0b11000011,0b11000011,0b01111110,0b00111100,0,//huruf D
- };
- char PORT[8] = {1,2,4,8,16,32,64,128}; //nilai pin dari port 2^0,2^1,2^2……2^7
- int x,a,i;//deklarasi variabel x,a,i dengan tipe data integer
- // Input/Output Ports initialization
- // Port A initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
- // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTA=0x00;
- DDRA=0x00;
- // Port B initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
- // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
- PORTB=0x00;
- DDRB=0x00;
- // Port C initialization
- // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
- // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
- PORTC=0x00;
- DDRC=0xFF;
- // Port D initialization
- // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out
- // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0
- PORTD=0x00;
- DDRD=0x07;
- // Timer/Counter 0 initialization
- // Clock source: System Clock
- // Clock value: Timer 0 Stopped
- // Mode: Normal top=0xFF
- // OC0 output: Disconnected
- TCCR0=0x00;
- TCNT0=0x00;
- OCR0=0x00;
- // Timer/Counter 1 initialization
- // Clock source: System Clock
- // Clock value: Timer1 Stopped
- // Mode: Normal top=0xFFFF
- // OC1A output: Discon.
- // OC1B output: Discon.
- // Noise Canceler: Off
- // Input Capture on Falling Edge
- // Timer1 Overflow Interrupt: Off
- // Input Capture Interrupt: Off
- // Compare A Match Interrupt: Off
- // Compare B Match Interrupt: Off
- TCCR1A=0x00;
- TCCR1B=0x00;
- TCNT1H=0x00;
- TCNT1L=0x00;
- ICR1H=0x00;
- ICR1L=0x00;
- OCR1AH=0x00;
- OCR1AL=0x00;
- OCR1BH=0x00;
- OCR1BL=0x00;
- // Timer/Counter 2 initialization
- // Clock source: System Clock
- // Clock value: Timer2 Stopped
- // Mode: Normal top=0xFF
- // OC2 output: Disconnected
- ASSR=0x00;
- TCCR2=0x00;
- TCNT2=0x00;
- OCR2=0x00;
- // External Interrupt(s) initialization
- // INT0: Off
- // INT1: Off
- // INT2: Off
- MCUCR=0x00;
- MCUCSR=0x00;
- // Timer(s)/Counter(s) Interrupt(s) initialization
- TIMSK=0x00;
- // USART initialization
- // USART disabled
- UCSRB=0x00;
- // Analog Comparator initialization
- // Analog Comparator: Off
- // Analog Comparator Input Capture by Timer/Counter 1: Off
- ACSR=0x80;
- SFIOR=0x00;
- // ADC initialization
- // ADC disabled
- ADCSRA=0x00;
- // SPI initialization
- // SPI disabled
- SPCR=0x00;
- // TWI initialization
- // TWI disabled
- TWCR=0x00;
- while (1)
- {
- // Place your code here
- for(x=0;x<125;x++)//jumlah elemen matriks char data_huruf (perulangan pergeseran baris dot matrix
- {
- for(a=0;a<30;a++)//mengulang kolom dot matriks (mengatur kecepatan running text)
- {
- for (i=0;i<=18;i++)//menggeser kolom dot matrix (mengatur kecepatan & arah running text)
- {
- clock();//sebagai pulsa data keluaran
- if(i==1)
- data_hi;//LED dot matrix mati jika variabel i=1
- else
- data_lo;//data low
- PORTC = ~data_huruf[i+x];//inisialisasi port C sebagai negasi data_huruf dengan array i+x
- delay_us(100);//waktu tunda 100 microseconds
- }
- }
- }
- }
- }
- Program tersebut dibuat untuk menampilkan tulisan "ELEKTRO UNSOED" berjalan dari kanan ke kiri pada LED dot matrix 8x8. Untuk menggantinya dapat mengubah nilai elemen array data_huruf dengan ketentuan sebagai berikut.
- Kemudian klik menu "Project" pada menu bar dan pilih "Compile" atau bisa juga menggunakan shortcut dengan menekan tombol F9 pada keyboard untuk mengkompilasi dan mengecek apakah terdapat error pada sourcecode program yang telah dibuat.
- Setelah tidak adanya error, maka program dapat di-built dengan memilih "Build All" pada menu "Project" atau dengan menekan tombol Ctrl+F9 secara bersamaan. Tahap ini adalah tahap terakhir untuk pembuatan program running text LED dot matrix.
- Dah seleseii... Eitt bentar dulu kan desain rangkaiannya belum dibuat, gimana mau bisa simulasinya :v. Kalau programnya sudah selesei dibuat dilanjut membuat desain rangkaiannya dulu dengan Proteus. Rangkaiannya seperti pada gambar di bawah dengan komponen-komponen yang diperlukan sebagai berikut :
- ATmega16 : sebagai kontrolernya
- IC 74HC595 : untuk shift register (menggeser inputan tiap clock, digunakan untuk mengekspansi PORT pada mikrokontroler supaya hemat penggunaan PORT-nya)
- MATRIX-8x8-(warnanya sabeb)
- Resistor (opsional kalo buat simulasi).
- Setelah desain rangkaian dibuat, maka dapat dimasukkan program file yang telah dibuat dengan cara mengklik ganda ATMEGA16 kemudian klik gambar file pada "Program File". Kemudian pilih CKSEL Fuses "Int RC 8MHz" yang mengindikasikan clock internal dari ATMEGA16. Tipe file program yang dapat dimasukan dari CV AVR ke ATmega16 di Proteus adalah "*.COFF" dan "*.HEX".
- Taraa... selesei deh !!!
Sekian dan Terimakasih atas kunjungannya...
Mau copas? Boleh kokk, Asalkan kau bahagia
Ehh maksudnya asal cantumkan sumber aslinya dari blog ini ya guys ;)