Blue Spinning Frozen Snowflake Vidi Fitriansyah Hidarlan's Blog
WELCOME TO MY BLOG :: Share Tips & Trik Tutorial Gadget dan Tugas Kuliah :: "Indahnya Berbagi"

Selasa, 27 Agustus 2019

Membuat Simulasi Running Text Dot Matrix dengan ATMEGA & IC 74HC595

        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 textRunning 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 :

  1. Membuat program running text pada CV AVR dengan cara mengklik "Create new file or project" seperti pada gambar berikut.
  2. Setelah terbuka jendela "Create New File" pilih "Project" pada "File Type" kemudian klik OK.
  3. Pada jendela "CodeWizardAVR" pilih "AT90, ATiny, ATmega, FPSLIC" pada jenis chip AVR.
  4. 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.

  5. Setelah itu pilih tab "Chip" untuk memilih jenis mikrokontroler AVR yang ingin digunakan, di sini menggunakan ATmega16 dengan clock speed (internal) 8 MHz.
  6. Selanjutnya klik menu "Program" dan pilih "Generate, Save dan Exit".
  7. 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.


  8. Setelah semua file yang dibutuhkannya disimpan maka akan terlihat seperti berikut.
  9. Selanjutnya mengedit bagian program running text dot matrix-nya menggunakan sourcecode berikut.
    1. /*****************************************************
    2. This program was produced by the
    3. CodeWizardAVR V2.05.3 Standard
    4. Automatic Program Generator
    5. © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    6. http://www.hpinfotech.com

    7. Project : Running Text Dot Matrix
    8. Version : 
    9. Date    : 26/08/2019
    10. Author  : Vidi Fitriansyah Hidarlan
    11. Company : Personal
    12. Comments: 


    13. Chip type               : ATmega16
    14. Program type            : Application
    15. AVR Core Clock frequency: 8,000000 MHz
    16. Memory model            : Small
    17. External RAM size       : 0
    18. Data Stack size         : 256
    19. *****************************************************/

    20. #include <mega16.h>
    21. #include <delay.h>
    22. #include <io.h>
    23. #define data_hi     PORTD.0=1
    24. #define data_lo     PORTD.0=0
    25. // Declare your global variables here

    26. void clock()
    27. {
    28.     PORTD.1=0; //Clock
    29.     PORTD.2=1; //Latch
    30.     PORTD.1=1; //Clock
    31.     PORTD.2=0; //Latch
    32.     delay_us(1);
    33. }
    34. void main(void)
    35. {
    36. // Declare your local variables here
    37.     char data_huruf[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//spasi karakter kosong
    38.     0b11111111,0b11111111,0b11011011,0b11011011,0b11011011,0b11011011,0b11000011,0b11000011,0,//huruf E
    39.     0b11111111,0b11111111,0b00000011,0b00000011,0b00000011,0b00000011,0,//huruf L
    40.     0b11111111,0b11111111,0b11011011,0b11011011,0b11011011,0b11011011,0b11000011,0b11000011,0,//huruf E
    41.     0b11111111,0b11111111,0b00111100,0b01100110,0b11000011,0b10000001,0,//huruf K
    42.     0b11000000,0b11000000,0b11000000,0b11111111,0b11111111,0b11000000,0b11000000,0b11000000,0,//huruf T
    43.     0b11111111,0b11111111,0b11001100,0b11001110,0b01111011,0b00110001,0,//huruf R
    44.     0b01111110,0b11111111,0b11000011,0b11000011,0b11000011,0b11000011,0b11111111,0b01111110,0,0,0,//huruf O
    45.     0b11111110,0b11111111,0b00000011,0b00000011,0b00000011,0b00000011,0b11111111,0b11111110,0,//huruf U
    46.     0b11111111,0b11111111,0b01110000,0b00111000,0b00011100,0b00001110,0b11111111,0b11111111,0,//huruf N
    47.     0b01110010,0b11111011,0b11011011,0b11011011,0b11011111,0b01001110,0,//huruf S
    48.     0b01111110,0b11111111,0b11000011,0b11000011,0b11000011,0b11000011,0b11111111,0b01111110,0,//huruf O
    49.     0b11111111,0b11111111,0b11011011,0b11011011,0b11011011,0b11011011,0b11000011,0b11000011,0,//huruf E
    50.     0b11111111,0b11111111,0b11000011,0b11000011,0b01111110,0b00111100,0,//huruf D
    51.     };
    52.     char PORT[8] = {1,2,4,8,16,32,64,128}; //nilai pin dari port 2^0,2^1,2^2……2^7
    53.         int x,a,i;//deklarasi variabel x,a,i dengan tipe data integer
    54. // Input/Output Ports initialization
    55. // Port A initialization
    56. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    57. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    58. PORTA=0x00;
    59. DDRA=0x00;

    60. // Port B initialization
    61. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    62. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    63. PORTB=0x00;
    64. DDRB=0x00;

    65. // Port C initialization
    66. // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    67. // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    68. PORTC=0x00;
    69. DDRC=0xFF;

    70. // Port D initialization
    71. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out 
    72. // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0 
    73. PORTD=0x00;
    74. DDRD=0x07;

    75. // Timer/Counter 0 initialization
    76. // Clock source: System Clock
    77. // Clock value: Timer 0 Stopped
    78. // Mode: Normal top=0xFF
    79. // OC0 output: Disconnected
    80. TCCR0=0x00;
    81. TCNT0=0x00;
    82. OCR0=0x00;

    83. // Timer/Counter 1 initialization
    84. // Clock source: System Clock
    85. // Clock value: Timer1 Stopped
    86. // Mode: Normal top=0xFFFF
    87. // OC1A output: Discon.
    88. // OC1B output: Discon.
    89. // Noise Canceler: Off
    90. // Input Capture on Falling Edge
    91. // Timer1 Overflow Interrupt: Off
    92. // Input Capture Interrupt: Off
    93. // Compare A Match Interrupt: Off
    94. // Compare B Match Interrupt: Off
    95. TCCR1A=0x00;
    96. TCCR1B=0x00;
    97. TCNT1H=0x00;
    98. TCNT1L=0x00;
    99. ICR1H=0x00;
    100. ICR1L=0x00;
    101. OCR1AH=0x00;
    102. OCR1AL=0x00;
    103. OCR1BH=0x00;
    104. OCR1BL=0x00;

    105. // Timer/Counter 2 initialization
    106. // Clock source: System Clock
    107. // Clock value: Timer2 Stopped
    108. // Mode: Normal top=0xFF
    109. // OC2 output: Disconnected
    110. ASSR=0x00;
    111. TCCR2=0x00;
    112. TCNT2=0x00;
    113. OCR2=0x00;

    114. // External Interrupt(s) initialization
    115. // INT0: Off
    116. // INT1: Off
    117. // INT2: Off
    118. MCUCR=0x00;
    119. MCUCSR=0x00;

    120. // Timer(s)/Counter(s) Interrupt(s) initialization
    121. TIMSK=0x00;

    122. // USART initialization
    123. // USART disabled
    124. UCSRB=0x00;

    125. // Analog Comparator initialization
    126. // Analog Comparator: Off
    127. // Analog Comparator Input Capture by Timer/Counter 1: Off
    128. ACSR=0x80;
    129. SFIOR=0x00;

    130. // ADC initialization
    131. // ADC disabled
    132. ADCSRA=0x00;

    133. // SPI initialization
    134. // SPI disabled
    135. SPCR=0x00;

    136. // TWI initialization
    137. // TWI disabled
    138. TWCR=0x00;

    139. while (1)
    140.       {
    141.       // Place your code here
    142.         for(x=0;x<125;x++)//jumlah elemen matriks char data_huruf (perulangan pergeseran baris dot matrix
    143.         {
    144.                 for(a=0;a<30;a++)//mengulang kolom dot matriks (mengatur kecepatan running text)
    145.                 {
    146.                     
    147.                     for (i=0;i<=18;i++)//menggeser kolom dot matrix (mengatur kecepatan & arah running text)
    148.                     {
    149.                         clock();//sebagai pulsa data keluaran
    150.                         if(i==1)
    151.                         data_hi;//LED dot matrix mati jika variabel i=1
    152.                         else
    153.                         data_lo;//data low
    154.                         PORTC = ~data_huruf[i+x];//inisialisasi port C sebagai negasi data_huruf dengan array i+x
    155.                         delay_us(100);//waktu tunda 100 microseconds
    156.                     }
    157.                                     
    158.                 }
    159.         }
    160.       }
    161. }
  10. 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.
  11. 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.
  12. 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.
  13. 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 :
    1. ATmega16 : sebagai kontrolernya
    2. IC 74HC595 : untuk shift register (menggeser inputan tiap clock, digunakan untuk mengekspansi PORT pada mikrokontroler supaya hemat penggunaan PORT-nya)
    3. MATRIX-8x8-(warnanya sabeb)
    4. Resistor (opsional kalo buat simulasi).
  14. 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".
  15. Taraa... selesei deh !!!
Untuk hasil simulasinya dapat dilihat pada video berikut.

Sekian dan Terimakasih atas kunjungannya...
Mau copas? Boleh kokk, Asalkan kau bahagia
Ehh maksudnya asal cantumkan sumber aslinya dari blog ini ya guys ;)
Atas