"Kembali Ke Dasar Elektronika Digital ... "

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Animasi LED Dengan IC 4017

    IC 4017 adalah IC 16-pin CMOS dekade counter dari seri IC CMOS 4000. Sangat berguna jika ingin membuat animasi lampu atau LED secara sederhana seperti led berjalan, tulisan berjalan , counter/timer dan masih banyak kegunaan lainnya

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • BIKIN PCB SEDERHANA TAPI GA MURAHAN

    Bikin PCB itu ga susah kok..dengan software EAGLE CAD dan teknik sterika kamu dapat membuat PCB untuk berbagai project elektronika mu ...

Tampilkan postingan dengan label led matrix. Tampilkan semua postingan
Tampilkan postingan dengan label led matrix. Tampilkan semua postingan

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:

Jumat, 15 November 2013

REVISI : 3 Led Matrix - Overlimit RAM usage !



Setelah beberapa pembaca mengeluh karena gagal pada project 3 led matrix ...dan saya juga bingung dibuatnya, akhirnya terdeteksi bahwa saya menggunakan script dengan ARRAY yang melebihi RAM seperti gambar berikut ini :



JADI MOHON DIMAAFKAN !!

Share:

Jumat, 21 Juni 2013

Tutorial: Text berjalan 3 Led Matrix




REVISI


Setelah beberapa pembaca mengeluh karena ga bisa jalan itu script...dan saya juga bingung dibuatnya, akhirnya terdeteksi bahwa saya menggunakan script dengan ARRAY yang melebihi RAM seperti gambar berikut ini :



JADI MOHON DIMAAFKAN !!



Atas permintaan seorang pembaca blog dengan id kaskus sn0bi, kali ini kita akan bahas perancangan 3 LED MATRIX yang menggunakan ATMega 8535. Sebenernya ini adalah perpanjangan dari project LOVE HURT yang hanya menggunakan 1 buat Led Matrix. Untuk mengurangi jumlah komponen yang dipakai, maka ukuran led matrix jangan melebihi dari 2" (inch) . Untuk dapat dirancang diatas breadboard / projectboard dipilihlah led matrix berukuran 1 inch.

Bahan-bahan dan skematiknya seperti berikut ini :

klik untuk memperjelas
*) catatan : perhatikan port ISP yg digunakan 6 pin..sesuaikan dengan yg kamu gunakan



Dari skematik diatas dapat dijelaskan bahwa ATMEGA8535 menggunakan clock internal / default 1MHz dan dot/led matrix diparalel dibagian baris. Untuk scanning kolom digunakan portD 0-7 dan portC 0-6. Sebenarnya kalo dilihat dari gambar diatas, kaki-kaki ATMega masih cukup untuk 1 buah led matrix (tinggal penyesuaian di script nya saja). Scanning cukup dilakukan dengan menggeser bit (active low) dari kiri ke kanan. Secara lengkap scriptnya seperti berikut :

#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>

#define cepat 8  //ubah ini untuk mengatur kecepatan scroll

//UPDATED JUNE 9 2014 ...www.aisi555.com ....

const char textset[] PROGMEM  = 
{0x30, 0x4a, 0x4a, 0x4a, 0x7c,//a
0x7f, 0x28, 0x44, 0x44, 0x38,//b
0x80, 0x38, 0x44, 0x44, 0x44,//c
0x38, 0x44, 0x44, 0x28, 0x7f,//d
0x38, 0x54, 0x54, 0x54, 0x18,//e
0x08, 0x7e, 0x09, 0x09, 0x02,//f
0x08, 0x54, 0x54, 0x54, 0x3c,//g
0x7f, 0x08, 0x04, 0x04, 0x78,//h
0x80, 0x44, 0x7d, 0x40, 0x80,//i
0x20, 0x40, 0x44, 0x3d, 0x80,//j 
0x80, 0x7f, 0x18, 0x24, 0x42,//k
0x80, 0x41, 0x7f, 0x40, 0x80,//l
0x7c, 0x04, 0x78, 0x04, 0x78,//m
0x7c, 0x08, 0x04, 0x04, 0x78,//n
0x38, 0x44, 0x44, 0x44, 0x38,//o
0x7c, 0x14, 0x14, 0x14, 0x08,//p
0x08, 0x14, 0x14, 0x14, 0x7c,//q
0x7c, 0x08, 0x04, 0x04, 0x08,//r
0x48, 0x54, 0x54, 0x54, 0x24,//s
0x80, 0x04, 0x3f, 0x44, 0x44,//t
0x3c, 0x40, 0x40, 0x20, 0x7c,//u
0x1c, 0x20, 0x40, 0x20, 0x1c,//v
0x3c, 0x40, 0x30, 0x40, 0x3c,//w
0x44, 0x28, 0x10, 0x28, 0x44,//x
0x0c, 0x50, 0x50, 0x50, 0x3c,//y
0x44, 0x64, 0x54, 0x4c, 0x44,//z
0x3e, 0x51, 0x49, 0x45, 0x3e, //0
0x80, 0x42, 0x7f, 0x40, 0x80, //1
0x42, 0x61, 0x51, 0x49, 0x46, //2
0x41, 0x41, 0x45, 0x4b, 0x31, //3
0x18, 0x14, 0x12, 0x7f, 0x10, //4
0x27, 0x45, 0x45, 0x45, 0x39, //5
0x3c, 0x4a, 0x49, 0x49, 0x31, //6
0x01, 0x71, 0x09, 0x05, 0x03, //7
0x36, 0x49, 0x49, 0x49, 0x36, //8
0x06, 0x49, 0x49, 0x29, 0x1e, //9
0x7e, 0x11, 0x11, 0x11, 0x7e, //A
0x7f, 0x49, 0x49, 0x49, 0x36, //B
0x3e, 0x41, 0x41, 0x41, 0x22, //C
0x7f, 0x41, 0x41, 0x22, 0x1c, //D
0x7f, 0x49, 0x49, 0x49, 0x41, //E
0x7f, 0x09, 0x09, 0x09, 0x01, //F
0x3e, 0x41, 0x49, 0x49, 0x7a, //G
0x7f, 0x08, 0x08, 0x08, 0x7f, //H
0x80, 0x41, 0x7f, 0x41, 0x80,//I
0x20, 0x40, 0x41, 0x3f, 0x01, //J
0x7f, 0x08, 0x14, 0x22, 0x41, //K
0x7f, 0x40, 0x40, 0x40, 0x40, //L
0x7f, 0x02, 0x04, 0x02, 0x7f, //M
0x7f, 0x04, 0x08, 0x10, 0x7f, //N
0x3e, 0x41, 0x41, 0x41, 0x3e, //O
0x7f, 0x11, 0x11, 0x11, 0x0e, //P
0x3e, 0x41, 0x51, 0x21, 0x5e, //Q
0x7f, 0x09, 0x19, 0x29, 0x46, //R
0x46, 0x49, 0x49, 0x49, 0x31, //S
0x01, 0x01, 0x7f, 0x01, 0x01, //T
0x3f, 0x40, 0x40, 0x40, 0x3f, //U
0x1f, 0x20, 0x40, 0x20, 0x1f, //V
0x3f, 0x40, 0x38, 0x40, 0x3f, //W
0x63, 0x14, 0x08, 0x14, 0x63, //X
0x07, 0x08, 0x70, 0x08, 0x07, //Y
0x61, 0x51, 0x49, 0x45, 0x43, //Z
0x80, 0x80, 0x80};//""


const char textreal[] PROGMEM= { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ' } ;


char blk = 0x80;
char fulltext[17] ; 
char scrolltext[500];//panjang kalimat 300 dibagi 6 (5 kolom + 1pembatas)
//UBAH besar ARRAY scroltext[XXX] sesuaikan besar RAM IC yg dipakai..
char textnya[] = "3 Led Matrix ATMega8535 AHOCOOL SurabayA 2013";


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

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

}


void convert_text(char *texte)
{

uint8_t a,b,max_text;
int c,d;

char dummy[1];

max_text=strlen(texte);

for(a=0 ; a<max_text; a++)

  {    
      for(b=0;b<65;b++)  // maximum jumlah definisi text di database array
     
   {
            strncpy_P(dummy,&textreal[b],1);
         
   if ( texte[a] == dummy[0]) break; 

   }
      
        d=b*5;          
      
      if(dummy[0] != ' ') for(c=d; c<d+5; c++) strncat_P(scrolltext,&textset[c],1); //spasi
      else  for(c=d; c<d+3; c++) strncat_P(scrolltext,&textset[c],1);
      
   strncat(scrolltext,&blk,1);
  }

}


void tulis_text(void)
{
uint8_t a;
int b,speed;

a=0;
speed=5;//UBAH NILAI speed sesuai keinginan dan kedip led


 
 while(a<16)

  {
 
 
for(b=0;b<speed;b++ ) 
{
    
 if(a<8 ) 
 
 {
    
 
 PORTD = ~(1<<a) ;
 PORTC =0b11111111;

 }
  
  else
 {
    
    PORTC = ~(1<<(a-8)) ;
 PORTD =0b11111111;
 
 }

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

    PORTA=0x80;  //biar tidak berbayang


  }



 a++;
  } 


   
  }


void scrol(char *scrtxt)
{  uint8_t q,r,step =0;
   int maxstep;

    maxstep = (strlen(scrtxt) * 6) ;
   
    convert_text(scrtxt);
     

  while(step < ( maxstep + 30)   )
   {
  if(step < 15)
       {
        
     for(q=0; q <(16-step) ; q++ )       
               
  {   fulltext[q]= 0x80;      }
  
     for(q=(15-step); q <16 ; q++ )       
  {   fulltext[q]=scrolltext[q - 15 + step];    }
            
 for(r=0;r<cepat;r++) tulis_text(); 


  }  
       

  else if( step > (maxstep + 15 ) )
     {


     for(q=0; q <(maxstep + 30 - step) ; q++ )       
  {   fulltext[q]=scrolltext[step -15 + q];    }

  for(q=(maxstep + 30 - step); q <16 ; q++ )       
               
  {   fulltext[q]= 0x80;      }
          
        for(r=0;r<cepat;r++) tulis_text();   
        }


    else
 {

     for(q=0; q <16 ; q++ )       
  {   
  
  fulltext[q]=scrolltext[q + step -15];   
  
   }
            
  for(r=0;r<cepat;r++) tulis_text();  


  }  
      

 
 
  
      
   step++;
 
 
   }




}


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
  
  

 while(1)
  {
     scrol(textnya);  
     cleartext();


  }



 
 

 
return 0;
}

proses geser-geser yang terpenting adalah bagian berikut :

Scanning kolom  :

void tulis_text(void)
{
uint8_t a;
int b,speed;

a=0;
speed=20;//UBAH NILAI speed sesuai keinginan

while(a<16)
  {
  
for(b=0;b<speed;b++ ) 
{
if(a<8 ) 
{
PORTD = ~(1<<a) ;
PORTC =0b11111111;

}
  else
{  
 PORTC = ~(1<<(a-8)) ;
PORTD =0b11111111;
}
PORTA=fulltext[a];
_delay_us(300);   

    PORTA=0x80;  //biar tidak berbayang
  }

a++;

}


Dari script scanning  diatas dapat dilihat script   PORTD = ~(1<<a) ; yang berfungsi untuk menegasi pergeseran bit 1 menjadi active low. Jika menggunakan 4 buah matrix maka dialkukan penyesuaian kondisi if ketika port nya loncat ke seri port yg berbeda.


Geser Kiri :

void scrol(char *scrtxt)
{  int q,step =0;
   int maxstep;

  maxstep = (strlen(scrtxt) * 6) ;
convert_text(scrtxt); 

  while(step < ( maxstep + 30)   )  //30 = 15 awal + 15 akhir 
   {
if(step < 15)   //start awal
       {
    
   for(q=0; q <(16-step) ; q++ )   
               
{   fulltext[q]= 0x80;      }
   for(q=(15-step); q <16 ; q++ )   
{   fulltext[q]=scrolltext[q - 15 + step];  }
tulis_text(); 
}  
else if( step > (maxstep + 15 ) )    //akhir kalimat
   {
   for(q=0; q <(maxstep + 30 - step) ; q++ )   
{   fulltext[q]=scrolltext[step -15 + q];  }

for(q=(maxstep + 30 - step); q <16 ; q++ )   
               
{   fulltext[q]= 0x80;      }       
      tulis_text();
        }
    else
{

   for(q=0; q <16 ; q++ )   
{   
fulltext[q]=scrolltext[q + step -15]; // ditengah-tengah 
}         
tulis_text(); 
}  
 step++;

   }
}


Bagian terpenting adalah ketika memberikan efek kosong pada awal dan akhir dari urutan kalimat. Variable "maxstep" merupakanjumlah step scanning kolom maksimum dari kalimat, sedangkan variable "step" adalah langkah pergeseran. Untuk 3 buah matrix maka terdapat 15 step scanning kolom pada setiap kali penampilan huruf di matrix. Jadi jika menggunakan 4 matrix cukup merubah unsur penghitungan kolom yang ditampilkan saja (step = 20). Untuk geser atas atau animasi lainnya dapat dikreasikan dari project love hurt.

Hasil dari project ini yang dilakukan rekan sn0bi dari makasar seperti pada video berikut :




seperti biasa, jika ingin membeli bahan-bahannya bisa lewat aku, atau paket belajarnya di "custom" dengan 3 led matrix ? bisa...harga nego via contact aku ya...

SELAMAT MENCOBA
Share:

Kamis, 06 Juni 2013

Tutorial: Text Scroll 12 Led Matrix



Ayo kita bikin scroll text dengan led matrix yang panjang. Pada paket belajar microcontroller yang dijual disini terdapat project terakhir yaitu 1 led  matrix yang bisa ditulisi text yang dinamakan project LOVEHURT (pembahasan script disini). Bagaimana dengan led matrix yang lebih panjang ? Wah kaki microcontroller pasti habis tuh ? Tenang saja, kita pernah bahas membuat LED BERJALAN yang panjang dengan cara cascading 4017. Jadi clock dan reset dari 4017 dikendalikan oleh microcontroller, sedangkan outputnya akan melakukan scanning kolom dari led matrix [5 x N(jumlah led matrix)]. Sedangkan untuk 7 bit baris akan diparalel dan data text dikirim sesuai timing scaning kolom.

Skematiknya agak ribet, bisa dilihat disini ya .. (klik untuk memperjelas)




*) Pin CLK dari  semua 4017 dihubungkan ke PE1
*) pin 4017 terakhir (scan ke 61) dapat juga dihubungkan ke Reset 4017 pertama menggunakan diode 1n4148
untuk IC AVR lain silahkan menyesuaikan


Untuk mendrive setiap kolom maka diperlukan IC ULN 2003 sebagai inverter logika "1" dari output scanning 4017 ke Ground dan ada keuntungan lainnya yaitu dengan komponen transistor darlington pada ULN akan menyeragamkan nyala tiap dot dari LED MATRIX walaupun yang menyala hanya 1 buah atau 7 buah dalam tiap scanning. Skematik dibawah merupakan kreasi penulis untuk memudahkan penyusunan ULN2003 ke LED MATRIX agar lebih simple dan tidak memerlukan kabel yang banyak.




Jika rangkaian sudah disusun kemudian downloadkan script program yang sudah saya upload disini. Untuk contoh program dari script yang dulu saya buat untuk rekan dari aceh yang kita gunakan adalah internal memori dan eeprom untuk text dan animasi. Terdapat juga script untuk kalender dimana tombol untuk setting kalender dihubungkan ke pin INT (yang ada resistor pull up) sehingga switch diharuskan menghubungkan  pin ke GND. Contoh ini menggunakan xtal 8MHZ atau internal default 1MHZ juga bisa asal dilakukan penyesuaian pada script.

Pada contoh script yang menggunakan xtal 7.3728 MHz ditujukan untuk kontrol via PC/ komputer melalui program SecureCrt (silahkan cari di google) dan dihubungkan menggunakan serial port atau USB to serial converter jika serial port tidak tersedia. SecureCrt sangatlah memudahkan programing karena ada fasilitas scripting Visual Basic sehingga perintah serial dapat dikirimkan secara otomatis.

Cara Me-Run script pada SecureCrt
Contoh-contoh script VB - SecureCrt ada pada file yg sama yang didownload sebelumnya (script).


Hasilnya yang bisa bikin ngiler kayak gini nih .....





Kepingin ? Bahan-Bahannya dapat dibeli dari saya kok, tapi asal sudah ada dasar microcontrollernya,kalo ndak ya kudu belajar dulu via paket belajar disini ..... Silahkan hubungi kontak saya ya...
Share:

Jumat, 05 Agustus 2011

Bermain Dengan Dot Matrix "LoveHurt"


=== REMAKE 2020 BISA DIBACA DISINI ====





  =======================================================




Siapkan bahan-bahan seperti berikut:





Attiny 2313
Led matrix 7x5
R 10K
Diode 4148
PCB lobang
Header 2x5 buat ISP programmer (optional - Bisa diprogram di Breadboard)
Socket 20 untuk ATtiny, dan soket 14 ( dibelah dua ) buat tempat Led matrix

rangkaiannya seperti ini :




Kemudian komponen dirangkai diatas PCB lobang, ato bisa juga memakai bahan lain( disesuaikan dengan tempat yg mau di pake, misale kotak hadiah , papan tripleks dan lain sebagainya)




letakkan LED MATRIX sesuai dengan SOCKET IC yg dibelah tadi



karena ga ada baterai ( punya tempatnya doang) jadi pake adaptor 3 Volt aja




Script code dalam Bahasa C /WinAvr seperti berikut:


#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h> 
#include <string.h>
#include <avr/eeprom.h>

//Progmem simpannya di FLASH memory

const char love1[] PROGMEM =
{
0b0011110,
0b0100001,
0b1000010,
0b0100001,
0b0011110

};

const char love2[] PROGMEM =
{
0b0001100,
0b0010010,
0b0100100,
0b0010010,
0b0001100

};

const char L[] PROGMEM ={0x7f, 0x7f, 0x40, 0x40, 0x20}; 
const char O[] PROGMEM ={0x3e, 0x7f, 0x41, 0x41, 0x3e};
const char V[] PROGMEM ={0x3f, 0x7e, 0x40, 0x20, 0x1f};
const char E[] PROGMEM ={0x7f, 0x7f, 0x49, 0x49, 0x41};
const char H[] PROGMEM ={0x7f, 0x7f, 0x08, 0x08, 0x7f};
const char U[] PROGMEM ={0x3f, 0x7f, 0x40, 0x40, 0x3f};
const char R[] PROGMEM ={0x7f, 0x7f, 0x11, 0x29, 0x46};
const char T[] PROGMEM ={0x03, 0x03, 0x7f, 0x03, 0x02};

const char creature[]={0x4e, 0x31, 0x35, 0x31, 0x4e}; //simpan di memory/RAM aja

uint8_t EEMEM tengkorak[5]= {0x1e, 0x75, 0x61, 0x75, 0x1e}; //simpan di EEPROM

uint8_t EEMEM pacman[5]= {0x26, 0x67, 0x67, 0x7f, 0x3e}; //simpan di EEPROM


char dotnya[5],scrolnya[7];



void tulis(uint8_t lama)
{
  uint8_t a,b;

for(a=0 ; a<lama ; a++)
{
 for(b=0 ; b<5 ; b++)   
  
{

PORTB = ~(1<<b) ;
PORTD = dotnya[b];
            _delay_ms(2);

     
}

}



}


void geser(uint8_t lama)
{
  uint8_t a,b;

 for(a=0 ; a<11 ; a++)   
  
{

  if( a<6) 
   { 
 for(b=0 ; b<(5-a) ; b++)  dotnya[b]=0x80;
              for(b=(5-a); b<5 ;b++) dotnya[b]=scrolnya[b-5+a];
 
 tulis(10);
             
             }
  else if (a==6) tulis(lama);

  else 
             {  for(b=0 ; b<11-a ; b++) dotnya[b]=scrolnya[a-5+b];
   for(b=(11-a); b<11 ;b++) dotnya[b]=0x80;  
 
                tulis(10);
              }

          }
 
   
                
     

 
}

void naik (uint8_t lama)

{
{  uint8_t q,step=0;
  
  
  while(step!=16)
   {
if( step <8)
  {   
for(q=0 ; q < 5 ; q++) dotnya[q] = scrolnya[q] << (7 - step) ; 

           tulis(10);
        } 
   
    else if (step == 8)
  {    
        tulis(lama); 

       }      
else 
  {   
         for(q=0 ; q < 5 ; q++)  dotnya[q] = scrolnya[q] >> (step - 7) ;  
          
  tulis(10);

     step++; 

}    

}




}


int main(void)
{
DDRD = 0b1111111; // untuk baris
DDRB = 0b11111;  // untuk kolom

PORTD =0; // Set all pins low
PORTB =0b11111; //matikan layar
    
    


while(1)
{
// yang ini nulis langsung 
  
     strncpy_P(dotnya,love2,5);
     tulis(20);
     strncpy_P(dotnya,love1,5);
     tulis(40);
strncpy_P(dotnya,love2,5);
     tulis(20);
     strncpy_P(dotnya,love1,5);
     tulis(40);
     strncpy_P(dotnya,love2,5);
     tulis(20);
     strncpy_P(dotnya,love1,5);
     tulis(40);     

//yang ini pake function geser 

strncpy_P(scrolnya,L,5);
     geser(50);
strncpy_P(scrolnya,O,5);
     geser(50);
strncpy_P(scrolnya,V,5);
     geser(50);
strncpy_P(scrolnya,E,5);
     geser(50);
strncpy_P(scrolnya,H,5);
     geser(50);
strncpy_P(scrolnya,U,5);
     geser(50);
strncpy_P(scrolnya,R,5);
     geser(50);
strncpy_P(scrolnya,T,5);
     geser(50);

//geser ambil dari RAM

strncpy(scrolnya,creature,5);  //tanpa _P karena ambil di RAM
     naik(50);

//ambil dari eeprom ..mengirit..

     eeprom_read_block((void*)&scrolnya,(const void*)&tengkorak, 5); 
naik(50);

     eeprom_read_block((void*)&scrolnya,(const void*)&pacman, 5); 
geser(50);

}

return 0;
}


Script code diatas dibuat dalam mode FLASH, RAM, dan EEPROM, jadi ketika download program ke IC harus memprogram FLASH dulu kemudian dilanjutkan dengan EEPROM.
FLASH extensinya .hex sedangkan isi EEPROM extensinya .eep




hasil akhirnya seperti di video berikut :





SELAMAT MENCOBA
Share:

Rabu, 03 Agustus 2011

DOT MATRIX


Pada dasarnya DOT matrix adalah Display LED yg disusun sedemikian rupa sehingga untuk menghidupkan led ke (x,x) dibutuhkan kombinasi tegangan antara Pin baris & kolom








Penanda kaki nomer satu adalah tulisan marking, paling kiri no 1....paling kanan no 7
Menyebrang ke kanan atas no 8 sampai ke kiri atas itu nomer 14

Beberapa kaki memang tidak dipakai jadi dibarkan tidak terhubung



Kemudian untuk mempermudah kontrol dan menghemat pin maka diperlukan proses scanning ( biasanya kolom...) sedangkan pada baris diberikan bit sesuai huruf/karakter yang akan ditampilkan yang bersesuaian dengan posisi scanning.

Scanning untuk kolom dimaksud memberikan "1" high ( untuk common katoda) atau"0" untuk common anoda , untuk kolom lainnya diberi nilai negasi dari kolom yg diberi nilai 1 tadi .....begitu selanjutnya untuk kolom berikutnya sampai kolom terakhir dari rangkaian led matrix..dan berulang dari depan lagi. Proses ini dilakukan sangat cepat sehingga mata kita melihatnya tetap sebagai suatu karakter yg diam.

misalnya ingin menampilkan huruf A , secara umum digambarkan sebagai berikut:


0000000
0000000
0000000
0000000
0000000
0000000
0000000


dari gambar diatas logikanya seperti ini :

- saat kolom pertama ( scan kolom 1 = 1 / high/2.4 v) maka bit yg diberi pada baris berupa "1110000", sehingga jika ketemu 1 vs 1 ga ada arus mengalir, jadi LED mati, jika 1 ketemu 0 maka arus mengalir, led menyala

- begitu juga untuk kolom kedua, ketika kolom kedua diberi tegangan maka pada baris bit yg diberikan adalah "1101011"

- Dan seterusnya, ketika kolom nya mencapai ujung maka akan diulang ke kolom 1 lagi

- Untuk melakukan scanning biasanya dilakukan dengan memanfaatkan shift register, atau paling sederhana dengan menggunakan IC 4017 yang di cascade menjadi led berjalan yang panjang. (buka di sini )




Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (6) 7 segmen (3) adc (4) amplifier (2) analog (10) android (11) antares (3) arduino (14) attiny (1) attiny2313 (17) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (35) display (3) esp8266 (3) gcc (1) iklan (1) infrared (2) Input Output (3) iot (16) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (12) komputer (3) komunikasi (1) kontrol (4) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (55) mikrokontroller (7) mikrotik (5) ninmedia (2) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (38) pcb (2) praktek (2) project (33) proyek (1) python (1) radio (3) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (3) signage (1) sinyal (1) sms (6) software (18) tachometer (2) telepon (7) televisi (72) television (5) transistor (1) troubleshoot (3) tulisan (59) tutorial (78) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika