"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 ...

Selasa, 19 Juni 2012

Membuat Game Pacman "PaKMan" sederhana dengan ATTiny2313

Setelah mendapatkan ilmu yg cukup dari beberapa sumber di internet, akhirnya kesampaian juga untuk membuat game pacman sederhana, dan kita namakan ..

LONELY PAKMAN




Kenapa Lonely ? karena dia memang kesepian, sendirian gerak-gerak di layar TV.

sebaiknya membaca dulu pembahasan dasar televisi di: part#1  part#2

Siapkan Bahan-bahan berikut ini:

1. Micro-AVR ATTiny 2313
2. Breadboard
3. Power suply 5v , atau adaptor 12v dan diregulasi 7805
4. Resistor 10K, 470
5. Tombol push button
6. Xtal 20Mhz + capasitor 22pF
7. Programer AVR
8. Pesawat TV yg nganggur ( jangan sampai bertengkar dengan sodara yg lagi nonton sinetron)

Kemudian skematik yg digunakan seperti gambar berikut :


Klik pada gambar buat memperjelas gambar




Ntar hasilnya seperti berikut ini :








Listing program dari game lonely pakman sebagai berikut :

//==========LONENLY PAKMAN=======
//    by  : ahocool@gmail.com
//   http://aisi555.blogspot.com
//=========== 2012 ===============
#define F_CPU 20000000UL   //xtal yg digunakan
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

#define HSYNC PORTB=0; //H sinkronisasi
#define BLACK PORTB=1; // warna hitem  
//deklarasi variable 
uint8_t textnya,pakline,arah;  
static uint16_t x,y,tick;
char pakman1[12] =  // memory penyimapan data gambar pakman

   {  //kanan mangap
0b00000000,
0b01111100,
0b11001100,
0b11001000,
0b11110000,
0b11100000,
0b11000000,
0b11100000,
0b11110000,
0b11111000,
0b01111100,
0b00000000,
};


char pakman2[12] =
   {    //kanan mingkem
0b00000000,
0b01111100,
0b11001110,
0b11001110,
0b11111110,
0b11111110,
0b11111110,
0b11111110,
0b11000000,
0b11111110,
0b01111100,
0b00000000,
};


char pakman3[12] =

   {  //kiri mangap
0b00000000,
0b01111100,
0b01100110,
0b00100110,
0b00011110,
0b00001110,
0b00000110,
0b00001110,
0b00011110,
0b00111110,
0b01111100,
0b00000000,
};


char pakman4[12] =
   {   //kiri mingkem
0b00000000,
0b00111100,
0b01100110,
0b01100110,
0b01111110,
0b01111110,
0b01111110,
0b01111110,
0b00000110,
0b01111110,
0b00111100,
0b00000000,
};


char pakman5[12] =

   {   //bawah mangap
0b00000000,
0b01111100,
0b11111110,
0b11110010,
0b11110010,
0b11001110,
0b11001110,
0b11000010,
0b10000010,
0b10000010,
0b10000010,
0b00000000,
};


char pakman6[12] =
   {   //bawah mingkem
0b00000000,
0b01111100,
0b11111110,
0b11110010,
0b11110010,
0b11111110,
0b10111110,
0b10111110,
0b10111110,
0b10111110,
0b10111100,
0b00000000,
};

char pakman7[12] =

   {  //atas mangap
    0b00000000,
    0b10000010,
    0b10000110,
    0b10000110,
    0b10000110,
    0b11011110,
    0b10110010,
    0b11110010,
    0b11111110,
    0b01111100,
    0b00000000,
};


char pakman8[12] =
     { //atas mingkem
    0b00000000,
    0b10111100,
    0b10111110,
    0b10111110,
    0b10111110,
    0b10111110,
    0b11110010,
    0b11110010,
    0b11111110,
    0b01111100,
    0b00000000,
};

void timer_init(void){ 
//inisialisasi timer per rasterline 64us (PAL TV) 
TCCR1B |= (1<<WGM12);
TIMSK |= (1<<OCIE1A);
OCR1A = 1280; //64 us dengan xtal 20Mhz, untuk 16Mhz= 1024;
TCCR1B |= (1<<CS10); //full speed
}



//interupt timer untuk menampilkan gambar
ISR (TIMER1_COMPA_vect) {
static uint16_t rasterline=0; //baris
uint16_t a;
uint8_t out=0; // variabel simpan memory byte pakman

HSYNC;
        
//posisi berdasarkan nilai x,y dengan lebar 12 baris
if( rasterline > (18 + y)  && rasterline <= (30 +y) ) { 
_delay_us(4);
BLACK;
_delay_us(7);
        for(a=0;a<x;a++) asm("nop");
      // tampilkan sesuai arah dari pakman
 if(arah==0){
 if(tick<5000)out= pakman1[pakline];
 else out= pakman2[pakline];
      } 
 else if(arah==1){
 if(tick<5000)out= pakman3[pakline];
 else out= pakman4[pakline];
      }       
 if(arah==2){
 if(tick<5000)out= pakman5[pakline];
 else out= pakman6[pakline];
      }
 if(arah==3){
 if(tick<5000)out= pakman7[pakline];
 else out= pakman8[pakline];
      }
//geser bit untuk tampilkan data gambar ke pakman ke TV 
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
       out <<=1;
 PORTB= (out & 0x81) + 1;
      

      pakline++;  //tambahkan index array dari gambar pakman



// Vsync ada disini tanpa membedakan genap ganjil 
else if( rasterline >= 0 && rasterline < 5 ) {
_delay_us(27);
BLACK;
_delay_us(5);
HSYNC;
_delay_us(27);
BLACK;
} else if( (rasterline >= 5 && rasterline <= 10) ) {
_delay_us(2);
BLACK;
_delay_us(28);
HSYNC;
_delay_us(2);
BLACK;
} else if( rasterline >311-6 ) {
_delay_us(2);
BLACK;
_delay_us(28);
HSYNC;
_delay_us(2);
BLACK;
} else { 
_delay_us(3);
BLACK;
pakline=0;
  }

rasterline++;
tick++; //variabel timer untuk mangap & mingkem
    if(tick >10000) tick=0;

if( rasterline > 311 )rasterline = 0; //maksimum baris/raster
}


void tombol(void) // membaca tombol
{
if(bit_is_clear(PIND, PIND3)) 
{x--;
arah=1;
if(x<1)x=125;
_delay_ms(50);
}

else if(bit_is_clear(PIND, PIND4))
{
x++;
arah=0;
if(x>125)x=1;
_delay_ms(50);
}

else if(bit_is_clear(PIND, PIND5))
{y-=3;
arah=3;
if(y<3)y=280;
_delay_ms(50);
}

else if(bit_is_clear(PIND, PIND6))

{y+=3;
arah=2;
if(y>280)y=0;
_delay_ms(50);
}

}
int main() {  //Main Program
x=1;
y=13;
arah=0;
 DDRD &=~(1<<PD3) & ~(1<<PD4) & ~(1<<PD5) & ~(1<<PD6); //tombol
DDRB = (1<<PB7)|(1<<PB0); //PB0=1K, PB7=470 ohm

timer_init();
sei();

for( ;; )tombol();

}



SELAMAT MENCOBA 
Share:

Senin, 11 Juni 2012

KIT BELAJAR LED MATRIX



Kabar bagus buat pecinta dunia solder menyolder dan elektronika digital

Mau dapetin KIT yg ini ?












Murah aja kok..cuma 300 rb saja 






Paket KIT terdiri dari:


- PCB
- Microcontroller ATtiny 2313 ( pre-programmed jam digital)
- LED
- Komponen pendukung
- Petunjuk Program



DAPATKAN HARGA DISKON 600 RIBU JIKA MEMBELI PAKET BELAJAR MICRO+ KIT LED MATRIX 
(paket disesuaikan dengan komponen yg sudah tersedia)






Silahkan hubungi :


HP: 085733889569 , 087882045949
Mail : ahocool@gmail.com
ym :ahokleng
fb: www.facebook.com/nyoman.yudi
twiter: @ahocool


Share:

Minggu, 10 Juni 2012

Operasi geser Byte pada Win-AVR GCC untuk AVR microcontroller

Byte, bit, mega byte, giga byte ...itu hanya susunan 101010101010 loooo..
ah..cuma 2 angka ...eitt..jangan sepelekan...ini adalah penemuan paling brilian abad ke 20 yg memungkinkan kita bermain game , PC, internet blaa..blaaa....tanpa berlama-lama langsung kita goyang teory & operasi byte pada microcontroller dan bahasa C (win Avr)


"ingat , Micro AVR itu 8 bit ! , jadi semua data berpola 00000000-11111111" 


Kita akan mengambil contoh AVR yg paling sering digunakan pada blog ini yaitu ATTINY 2313
attiny2313dip.jpg (877×525)

ukuran memory FLASH (program) adalah 2kbyte (2048 byte), RAM 128 Byte dan EEPROM 128 byte juga.
Port input/output berjumlah 18 (Max) dengan register I/O A, B  dan D (paling umum digunakan register I/O B & D)IO port B berjumlah 8 (PB0-PB7) dan D berjumlah 7(PD0-PB6)  sedangkan portA jarang digunakan karena berhubungan dengan xtal dan reset.

attiny2313isp.jpg (530×291)


Operasi byte berguna saat melakukan perubahan register, memory dan juga input output. Semisal kita ingin melakukan setting PORT D menjadi output semua, maka kita tuliskan di listing seperti ini :

DDRD=0b1111111;
atau
DDRD=0x7F;
atau
DDRD=127;


begimana kalo ingin membuat port D0 input, port D2 output port D6 output ...gampang ...kita bikin aja seperti ini :

DDRD=0b1000010;

tapi tiba-tiba ditengah tengah program, ada pin yg ingin kita ubah menjadi fungsi yg berbeda tanpa menghiraukan bit yg lainnya? sebenernya bisa aja kita pake cara yg tadi...tapi percaya deh, cara ini lebih gampang dan akan berguna suatu saat nanti

semisal....kita ingin hanya memperhatikan port D3 sebagai output , yg laen gua ga peduli ...begini caranya: 

GESER YUKKK....

kita memanfaatkan angka 1 dimana 1 secara biner juga dipanggil 0b0000001. Jika kita ingin merubah port D3 sebagai output maka kita perlu menuliskan :

DDRD=0b0001000; 

hubungan antara 0b0000001 dan 0b0001000  adalah bergesernya bit 1 dari paling kanan ke 3 posisi disebelah kiri. Secara aritmetika binner dan bahasa C , operasi ini dapat dipanggil dengan :

 (1<<3)

artinya angka 1 digeser 3 kali ke kiri...dapet deh.. trus gimana jika kita ingin mengubah jadi input..ya sama aja kita geser aja nilai 0 ke kiri 3 kali (0 <<3) , tapi cara ini tidak elegan menurut para programmer. 

nah ... operasi diatas hanya bisa dilakukan jika nilai yg laennya 0 dan dilakukan di awal inisialisasi program, jika dilakukan ditengah2, kita perlu melakukan operasi laen yaitu operasi exclusive or (XOR) dan negasi AND. Cara ini efektif jika kita ingin merubah suatu register di posisi selaen awal program (semisal berubah ditengah2)

semisal kita pengen ngidupin led di port 4 dan 6  aja, tanpa menghiraukan port laen, kita tulis seperti ini :       

PORTD |=(1<<4) | (1<<6); 


sedangkan jika kita ingin mematikan LED di port 2 & port 5 maka yg kita tulis seperti ini (cara ini yg disarakan):

PORTD &=~(1<<2) & ~(1<<3); 


nah...hal ini berfungsi banget jika inisialisai register2 yg rumit didalam AVR, seperti contoh inisialisai timer berikut :


   TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode
   TIMSK |= (1 << OCIE1A); // Enable CTC interrupt 
   OCR1A  = 62499; //compare the CTC A 1 sec
   TCCR1B |= (1 << CS11)|(1 << CS10); // Start timer at Fcpu/64


jadi kita tidak pusing-pusing lagi menyusun bit satu persatu, hanya perlu mencari nama register yg perlu di on / off ( 1/ 0)   kan ...beress dahhh...simple bukan ?


SELAMAT MENCOBA

Share:

Senin, 04 Juni 2012

BERMAIN DENGAN TV PART#2

Setelah hanya bermain dengan HSYNC ( horizontal scanline) saja pada posting sebelumnya, maka pertanyaan akan muncul gimana jika pengen menampilkan gambar ditengah layar TV.

standar TV analog PAL memiliki teknik scanning line sebanyak 625 line, dengan teknik penggabungan penembakan elektron garis ganjil dulu dilanjutkan dengan line genap. seperti gambar dibawah ini :

pal_tv_diagram_interlace.jpg (402×514)


untuk memberikan pembeda antara awal scan genap dan ganjil , dilakukan dengan memberikan pulsa yg berbentuk 0 - 0,3v dan dengan durasi 'short' selama 2us dan 'long' yang artinya 32 us. Agak ribet memang , tp lama-lama juga bakalan ngerti. kalo dilihat secara osciloscop seperti ini :


*)keterangan : us = micro second

Jadi untuk VSYNC ganjil, aturannya seperti ini :

- Dimulai dari baris ke 623, pulsa sebanyak 6x (0v selama 2us , 0,3v selama 32us ) selajutnya dinamakan LONG SYNC
- Setelah itu penanda start vsync 5x (0v selama 32us , 2us untuk level 0,3v) selanjutnya dinamakan SHORT SYNC
- Diakhiri dengan long sync sebanyak 5x
- Tidak semua baris tampil di tabung TV, umumnya tabung kelihatan mulai baris ke 50


Sedangkan untuk VSYNC GENAP, sebagai berikut:

- Dimulai dari baris ke 311, dengan LONG SYNC 5x
- Short Sync 5x
- Diakhiri dengan LONG SYNC 4x
- Beda antara baris yg berdempetan (Ganjil & Genap) adalah 312

nah sekarang kita ingin membuat garis vertikal ....seperti gambar :




programmingnya seperti berikut :



#define F_CPU 16000000UL

#include <avr/io.h>

#include <util/delay.h>

#define SYNC  PORTB=0

#define ABU   PORTB=0b10

#define ITEM  PORTB=0b01
#define PUTIH PORTB=0b11

int line;
void hsync(void)
  //sync  
   SYNC;
   _delay_us(4);
   ITEM
   _delay_us(8); 

   if(line == 50 || line == 100 || line == 150|| line == 200 || line == 250) ITEM
   else  ABU;  
   _delay_us(50);
line++;
}

void vsync(uint8_t ganjilgenap)
{
uint8_t a,b;
if(ganjilgenap == 0) b=6;
else b=5;
for(a=0; a<b ; a++) //6x atau 5x long sync
{
SYNC;
_delay_us(2);

PORTB=1;
_delay_us(30);
}
for(a=0; a<5 ; a++) //5x short sync
{
SYNC;
_delay_us(30);

PORTB=1;
_delay_us(2);
}

if(ganjilgenap == 0) b=5;
else b=4;
for(a=0; a<b ; a++) //5x atau 4x long sync
{

SYNC;
_delay_us(2);
PORTB=1;

_delay_us(30);
}

if(ganjilgenap == 0) line=5;
else line=317;
}
int main(void)
{  
  line=622;
  //Inisialisasi port input

   DDRB =0b11;  
   while(1)
   {   
   if(line == 622) vsync(0);  //genap
   else if(line == 310) vsync(1); //ganjil

   else hsync();

   }
}

selanjutnya dengan penggabungan antara VSYNC dan HSYNC kita bisa menggambar diatas TV, tentunya dengan keterbatasan timing dari AVR, susah juga kadang menemukan timing yg pas. dengan menggunakan delay.h tidak bisa dijamin delay yg bener sebab tiap perintah /syntax dari GCC memerlukan waktu eksekusi yg memakan waktu juga . begitu pula dengan menggunakan counter interrupt, timing nya terbatas untuk interupt yg pas digunakan, sebab jika CTC 1us maka hampir semua program didominasi oleh interupt timer.

kalo yg kayak gini mau ? 



kalo mau...contact aja aku ... atau mau lanjut ke part ke 3
Share:

Sabtu, 02 Juni 2012

BERMAIN DENGAN TV ... PART#1


sebenernya sudah sejak dulu pengen maenin AVR buat bikin karakter di TV. Baru kesampean sekarang dan ubek-ubek google aku baca2 di mari: http://www.rickard.gunee.com/project.../pic/howto.php

nah...ternyata tidak segampang yg ku kira, banyak teory analog yg mesti dikuasai. Salut deh buat yg pertama ngerancang TV ..trus yg pertama bikin VIDEO GAME otaknya pasti tokcer banget .

sebelum ke skematik dan listing, kita perhatikan dulu bagaimana gambar TV (PAL) itu terbentuk. Gambarannya seperti berikut :



gambar di scan oleh electron secara bergantian per baris, ganjil dulu baru baris genap ( kelembaman mata membuat terlihat sebagai gambar)  dengan total scanline 625 untuk PAL. 






Dari sebuah raster sebesar 64us, 4 us pertama sinyal berupa 0v, 8 us kemudian ada jeda (biasanya untuk colorbust) sinyal 0,3v (black blank level). selanjutnya sisanya 58us merupakan data gambar. beruntung sekali level dari sinyal composite maksimal 1 V (warna putih), sehingga dengan pembagian resistor sederhana dapat di peroleh level hitam dan putih hanya dengan menggunakan 2 buah resistor












dan...percobaan pertama adalah membuat gambar seperti ini :



jadi dikiri bikin kotak abu2, ditengah garis item, di kanan kotak putih


Kita rangkai AVR ATTINY 2313 dengan PORT B0 disambung ke R 1K dan PORT B1 menuju resistor 470ohm , seperti gambar diatas. Ujung kedia resistor menuju ke port composite / AVin dari tv. Clock yg digunakan xtal 16MHz - 20MHz




klik untuk lebih jelas

SCRIPT :


#define F_CPU 16000000UL  //clock xtal
#include <avr/io.h>
#include <util/delay.h>

#define SYNC  PORTB=0
#define ABU   PORTB=0b10
#define ITEM  PORTB=0b01
#define PUTIH PORTB=0b11



int main(void)

{  
   //Inisialisasi port yg digunakan
   DDRB =0b11;  
   while(1)
   {   

  //sync  horiz 
   SYNC;
   _delay_us(4);

 // blanking
   ITEM;
  _delay_us(8);  

   ITEM;
   _delay_us(5);
   ABU;
  _delay_us(20);
   ITEM;
  _delay_us(1);
   PUTIH;
   _delay_us(20);
   ITEM;
  _delay_us(7);    

 }


}


Dengan merubah dikit..dikit, terutama di susunan delay dari raster kita dapat membikin gambar seperti ini :




bersambung ke part ke 2
Share:

Kontak Langsung



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

ANTI SPAM !



Blog Ini Mendukung Blogger Indonesia Yang Jujur dan Memberikan Informasi Sebenarnya, Bukan Menyampah Demi $Rp$ Yang Hanya Merendahkan Blogger Indonesia

Site View

Categories

555 (6) 7 segmen (3) adc (3) amplifier (1) analog (9) android (11) attiny (1) attiny2313 (16) blog (1) bluetooth (1) cmos (1) dasar (31) display (2) gcc (1) infrared (2) Input Output (3) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (9) komputer (3) komunikasi (1) kontrol (2) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (48) mikrokontroller (1) mikrotik (4) paket belajar (19) palang pintu otomatis (1) parabola (7) pcb (2) project (33) proyek (1) radio (3) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (2) sms (5) software (16) tachometer (2) telepon (7) televisi (31) transistor (1) troubleshoot (3) tulisan (36) tutorial (69) vu meter (1) vumeter (1) wav player (3) wayang (1) wifi (1)

Diskusi


kaskus
Forum Hobby Elektronika