Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Senin, 09 Juni 2014

[Tutorial] 4 Led Matrix dengan Mega8535/16




Bahan-Bahan:


  • ATMega 8535/16/32 
  • 4 buah Led matrix 7x5
  • 3 bh Resistor 10K
  • 2 Tombol tactile switch
  • Breadboard / projectboard
  • Kabel secukupnya



Dasar yg harus dikuasai:

Dasar I/O, Led Matrix Lovehurt ,  Counter/Timer


Skematik :



Klik untuk lebih jelas, baca keterangan pada gambar


Script Jam Led matrix


#define F_CPU 1000000UL //ubah sesuai clock micro
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 
#include <string.h>

//ARRAY UNTUK MENYIMPAN DATA ANGKA
const char textset[] PROGMEM  = 
{0x7f, 0x41, 0x7f, //0
0x80, 0x80, 0x7f, //1
0x79, 0x49, 0x4f, //2
0x49, 0x49, 0x7f, //3
0x0f, 0x08, 0x7f, //4
0x4f, 0x49, 0x79, //5
0x7f, 0x49, 0x79, //6
0x01, 0x01, 0x7f, //7
0x7f, 0x49, 0x7f, //8
0x4f, 0x49, 0x7f, //9
};



char titik_dua = 0x14;  // :
char blk = 0x80; // BLANK
char fulltext[22] ; //ARRAY TAMPILAN led matrix
char detik,menit,jam; //variabel jam

void cleartext(void)  // MEMBERSIHKAN datanya menjadi kosong
{  uint8_t i;

     
  for(i=0 ; i <20 ; i++)
    { fulltext[i] = 0 ; }  

}

void ubah_angka(char angka1, char angka2, char angka3, char angka4)
{
//routine mengubah angka waktu ke tampilan led matrix
uint8_t a,b;
//jam
  b=angka1*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); //spasi
  strncat(fulltext,&blk,1);

  b=angka2*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1);
  strncat(fulltext,&blk,1);   strncat(fulltext,&blk,1);

 // untuk tampilan titik dua berkedip
  if(detik%2 == 0)strncat(fulltext,&titik_dua,1);
  else strncat(fulltext,&blk,1);
  
  strncat(fulltext,&blk,1);   strncat(fulltext,&blk,1);

//menit
  b=angka3*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); 
  strncat(fulltext,&blk,1);

  b=angka4*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1);

 
}


//routine untuk scanning & menulis ke led matrix
void tulis_text(void)
{
uint8_t a;
int b,speed;

a=0;
speed=5;//UBAH NILAI speed sesuai kedip dan kecerahan yg diinginkan



while(a<21)

 {


for(b=0;b<speed;b++ ) 
{
   
if(a<8 ) 

{

PORTD = ~(1<<a) ;
PORTC =0b11111111;
PORTB =0b1111;

}
 
 else if(a>=8 && a<16)
{
   
   PORTC = ~(1<<(a-8)) ;
PORTD =0b11111111;
PORTB =0b1111;

}
else if(a>=16 && a<21)
{
   
   PORTB = ~(1<<(a-16)) ;
PORTD =0b11111111;
PORTC =0b11111111;

}

PORTA=fulltext[a];
_delay_us(50);   

   PORTA=0x80;  //biar tidak berbayang


 }

a++;
 } 


  
 }


ISR(TIMER1_COMPA_vect) //vector interupt untuk 1/2 detik

{ 
detik++; //dibuat 1/2 detik agar mudah menampilkan : kedap kedip

if(detik==120) // 1 menit
  {
     menit++;

 if(menit==60) //1 jam
 {
   jam++;

if(jam==24)jam=0; // 1 hari

       menit=0;
     }
    detik=0;
} 


cleartext();
ubah_angka(jam/10, jam%10, menit/10, menit%10); //tampilkan


}


void init_timer(void)
{

 TCCR1B |= (1 << CS11)|(1 << CS10); // Set up counter dengan prescale 64
  //Baca datasheet untuk mencari konfigurasi prescaler micro yg sesuai
  TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode       
  TIMSK |= (1 << OCIE1A); // Enable CTC interrupt
  OCR1A = 7812; // nilai atas dari TCNT1, untuk perhitungan 1 detik

sei();   //hidupkan interupt


}
int main(void)
{
//bagian ini sesuaikan dengan port micro yg kamu gunakan
 DDRA = 0b11111111; // portA = data text dot matrix
 DDRC = 0b11111111; //scanning kolom
 DDRD = 0b11111111; //scanning kolom
 DDRB = 0b11001111; //scaning, PB5 & PB4 sebagai tombol
 
jam = 10; 
menit = 23;

init_timer();

while(1)
 {
    tulis_text();

  //ini untuk pembacaan tombol  
if (bit_is_clear(PINB, PINB4)) // membaca tombol jika port input B#4 di clear LOW / 0 
        {
         
           menit++;
           if(menit>=60) menit=0;
          _delay_ms(200);

        }
    
if (bit_is_clear(PINB, PINB5)) // membaca tombol jika port input B#5 di clear LOW / 0 

        {
         
            jam++;
            if(jam>=24) jam=0;
            _delay_ms(200);

        }


 }

return 0;
}



Hasil







SELAMAT MENCOBA 



.
Share:

2 komentar:

  1. Sore Gan, jarang mampir di Kaskus lagi ya Gan :(

    BalasHapus
  2. Terimakasih atas informasi mengenai tutorial diatas, sangat menarik untuk dibaca & menambah wawasan saya mengenai led matrix. Kunjungi balik yaa di http://ps-elektronika.gunadarma.ac.id

    BalasHapus

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (8) arduino (25) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (5) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (7) radio (17) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika