Pengaturan

Gambar

Lainnya

Tentang KASKUS

Pusat Bantuan

Hubungi Kami

KASKUS Plus

© 2024 KASKUS, PT Darta Media Indonesia. All rights reserved

ahocoolAvatar border
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks


Spoiler for apa aja sih yang dibahas?:


Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":




UPDATE 8/JUNI/2014

DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

Selengkapnya dibahas di sini gan !!

CLINOMETER SEDERHANA MEMANFAATKAN ADC

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

Selengkapnya dibahas di post berikut




Spoiler for Buka Jika Mau Paket Belajar:


Proyek2 micro yg sudah jadi
Quote:



I.N.D.E.X F.O.R.U.M

Quote:




Biar ngiler, ane kasih contoh hasil karya TS...






Spoiler for Contact TS lewat dimari yahh:



.
Diubah oleh ahocool 08-06-2014 04:14
0
1M
8.6K
GuestAvatar border
Komentar yang asik ya
Tampilkan semua post
ahocoolAvatar border
TS
ahocool
#5731
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

Atas permintaan seorang kaskuser 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 :


Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks



Dari skematikdiatas 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 :

Code:


#define F_CPU 1000000UL //ubah sesuai clock
#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>

//database huruf
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};//""

//database pembanding ascii
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[600];//panjang kalimat 300 dibagi 6 (5 kolom + 1pembatas)

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,bb,max_text;
int c,d;

char dummy[1];

max_text=strlen(texte);

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

{
for(bb=0;bb<65;bb++) // maximum jumlah definisi text di database array

{
strncpy_P(dummy,&textreal[bb],1);

if ( texte[a] == dummy[0]) break;

}

d=bb*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=20;//UBAH NILAI speed sesuai keinginan dan kelembaban mata



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++;
}



}


void scrol(char *scrtxt)
{ int q,step,maxstep;
step=0;
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]; }

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; }

tulis_text();
}


else
{

for(q=0; q <16 ; q++ )
{

fulltext[q]=scrolltext[q + step -15];

}

tulis_text();


}






step++;


}




}











int main(void)
{


DDRA = 0b11111111; // portA = data text dot matrix
DDRC = 0b11111111; //scanning kolom
DDRD = 0b11111111; //scanning kolom











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


}







return 0;
}



script untuk proses geser-geser text yang terpenting adalah bagian berikut :

Scanning kolom :

Code:

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

a=0;
[color=blue]speed=20;//UBAH NILAI speed sesuai keinginan[/color]


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];
[color=blue] _delay_us(300); [/color]

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 :

Code:


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

maxstep = (strlen(scrtxt) * 6) ;

convert_text(scrtxt);


while(step < ( maxstep + 30) ) //30 = 15 awal + 15 akhir
{
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]; }

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; }

tulis_text();
}


else
{

for(q=0; q <16 ; q++ )
{

fulltext[q]=scrolltext[q + step -15];

}

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 :

0