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

Jumat, 20 Desember 2013

[TUTORIAL] Keypad + LCD + Password



Tutorial berikut ini merupakan kelanjutan dari pembahasan sebelumnya mengenai keypad dan lcd dengan menitikberatkan pada proses input dan pengecekan password. Prinsipnya mudah saja hanya dengan memindahkan penekanan tombol ke array memory dan kemudian membandingkannya dengan password yg diinginkan. Untuk itu agar diperhatikan juga pembahasan mengenai ARRAY.



uint8_t pas[6];  // ARRAY untuk menyimpan inputan tombol
uint8_t pase[6]={ 1,2,3,4,5,6 } ; //ARRAY password yg akan dibandingkan




Langkah pertama mendeklarasikan ARRAY yg akan menyimpan inputan tombol. Kita batasi jumlah password yg diinput 6 angka sehingga array ini memiliki panjang 6. Setiap tombol ditekan maka array pas[ ] akan dimasukkan nilai dari variabel keypad.



Untuk menampilkan karakter diatas scriptnya adalah :


lcd_init(LCD_DISP_ON_CURSOR);  //inisialisasi LCD
lcd_puts(" Input Password:");
lcd_gotoxy(4,1);              //pindah baris



Sedangkan untuk memindahkan inputan keypad seperti berikut:


//jika tombol ditekan (bukan * dan # )
if(keypad!= 100 && keypad !=21 && keypad !=20 ) 
 {  
  

   if( posisi < 6 ) {    //ada 6 buah password
   lcd_putc('*') ; // tampilkan asterix untuk password
   pas[posisi]=keypad; //pindahkan nilai keypad ke array
      posisi++; //tambahkan nilai posisi
 
      }

 

 _delay_ms(150);   
   

   }






 Jika ingin mengoreksi password yg telah dimasukkan , maka cancel diwakili oleh tombol '*' dan scriptnya seperti berikut :


if(keypad == 21 )  // penekanan * berarti hapus 1 kebelakang
 {  
  

 
 if(posisi != 0)  posisi--;  //posisi kursor dikurangi



  

  lcd_gotoxy((posisi +4),1); //mundur 1 posisi 
  lcd_putc(' '); //bersihkan kursor
  lcd_gotoxy((posisi +4),1); //balik lagi


 
 _delay_ms(150);   
   

   }






Berikut ini adalah script untuk membandingkan password :


 if(keypad == 20 )  // penekanan # berarti password bisa dicek
 { 


  if(posisi == 5) { //jika sudah semua password dimasukkan
//berikut ini pembanding
   if( pas[0] == pase[0] && pas[1] == pase[1] && pas[2] == pase[2] && pas[3] == pase[3] && pas[4] == pase[4] && pas[5] == pase[5]  )

    {

     lcd_gotoxy(1,0);
  lcd_puts(" Password Benar "); //jika benar

 }
   else
   {
   
     lcd_gotoxy(1,0);
  lcd_puts(" Password Salah "); //jika salah
   }   
  
  
  }




 _delay_ms(150); 

 }





Hasilnya seperti berikut :





Script selengkapnya dapat didownload disini.



SELAMAT MENCOBA


Share:

Kamis, 19 Desember 2013

[TUTORIAL] KEYPAD to 16 x 2 LCD MATRIX



Sebelum melanjutkan ke tutorial berikut ada baiknya membaca pembahasan terdahulu mengenai keypad dan menulis ke lcd


Episode berikut dari pembahasan mengenai keypad akan membahas mengenai pemindahan data dari keypad menuju LCD Matrix 16x2 . Display LCD yang umum didapatkan di toko hoby elektronika ini berharga dikisaran 40-60 ribu. Sedangkan modul keypad dijual dengan harga 30 ribu (keypad keras) dan 20 ribu untuk keypad pita/tipis. 


Pembahasan mengenai penulisan LCD pernah ditulis dalam blog ini, dimana akan digunakan library langsung pakai yang sangat simple yaitu pfleury. Ada 2 file yang harus dicopykan yaitu lcd.h dan lcd.c yang kemudian akan ditambahkan pada script. Untuk lcd.h perlu dilakukan penyesuaian terhadap penempatan kaki-kaki pin dari lcd terhadap microcontroller yang digunakan. Perhatikan skematik yg digunakan dalam tutorial ini.


klik pada gambar untuk memperjelas



Rangkaian diatas menggunakan AVR ATMEGA8535 , dengan PortA sebagai kontrol LCD dan mode data yg digunakan 4 bit. Jadi pada file lcd.h diubah sebagai berikut :





#define XTAL 1000000 //default clock adalah 1Mhz

#define LCD_LINES 2      // jumlah line LCD
#define LCD_DISP_LENGTH 16 // jumlah karakter per line


#define LCD_IO_MODE 1    // mode 0=8bit, 1=4 bit

// selanjutnya adalah definisi pin yang dipakai, berikut ini hasil edit yang sesuai skematik diatas

#define LCD_PORT PORTA
#define LCD_DATA0_PORT LCD_PORT
#define LCD_DATA1_PORT LCD_PORT
#define LCD_DATA2_PORT LCD_PORT
#define LCD_DATA3_PORT LCD_PORT
#define LCD_DATA0_PIN 3
#define LCD_DATA1_PIN 2
#define LCD_DATA2_PIN 1
#define LCD_DATA3_PIN 0
#define LCD_RS_PORT 
LCD_PORT
#define LCD_RS_PIN 6
#define LCD_RW_PORT 
LCD_PORT
#define LCD_RW_PIN 5
#define LCD_E_PORT 
LCD_PORT

#define LCD_E_PIN 4 

Jangan lupa juga dengan cara menambahkan library lcd.c seperti gambar berikut (AVR STUDIO 4)



Karena penulisan LCD matrix sangat simple , maka script pun menjadi semakin simple. Hanya dengan menggunakan logika sederhana untuk menentukan baris yang akan ditulis maka didapatkan script utama seperti berikut :




int main(void)

{

uint8_t keypad,posisi;
 
DDRA |= _BV(PA0) | _BV(PA1) | _BV(PA2) | _BV(PA3) | _BV(PA4) | _BV(PA5) | _BV(PA6)  ; //LCD PORT yg digunakan
  
    
   //keypad     
    DDRD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD2); //col 
    DDRD |= _BV(PD3) | _BV(PD4) | _BV(PD5) | _BV(PD6); //row


posisi=0; //variabel penanda posisi kursor


lcd_init(LCD_DISP_ON_CURSOR); //inisialisasi LCD

 while(1)

 {
   
keypad=tombol(); //fungsi keypad, silahkan baca pembahasan sebelumnya

if(keypad!= 100 && keypad !=21 && keypad !=20 ) //jika tombol ditekan
 {  
  

   if( posisi < 32 ) {    //ada 32 buah ruang untuk menulis  (16 x 2 )
      lcd_putc( keypad + 48 ) ; //48 adalah ascii dari angka 0
      posisi++; //tambahkan nilai posisi
 
      }

 
 if(posisi == 16){ //jika melewati 16 karakter di baris 1
 
 lcd_gotoxy(0,1); //pindah ke baris kedua

 } 


 _delay_ms(150);   
   

   }
   



if(keypad == 21 )  // penekanan * berarti hapus 1 kebelakang
 {  
  

 
 if(posisi != 0)  posisi--;  //posisi kursor dikurangi



 if(posisi < 16 ){ //baris 1

  lcd_gotoxy(posisi,0); //mundur 1 posisi di baris 1
  lcd_putc(' '); //bersihkan kursos
  lcd_gotoxy(posisi,0); //balik lagi


 } 

 else { //baris 2

  lcd_gotoxy((posisi - 16),1); //mundur 1 posisi di baris 2
  lcd_putc(' '); //bersihkan angka
  lcd_gotoxy((posisi - 16),1); //balik lagi

 }
 
 _delay_ms(150);   
   

   }


else if(keypad == 20 )  // penekanan # berarti bersihkan layar lcd
 { 

posisi = 0;

lcd_clrscr();


 _delay_ms(150); 

 }



}

return 0;

}



Yang menarik dari script diatas adalah karena yg ditampilkan berupa angka saja sedangkan LCD menerima input karakter ASCII, maka untuk merubah dari integer ke ascii cukup dengan menambahkan angka 48. Kenapa ? Karena ascii dari angka 0-9 berurutan dari 48-57 jadi simple saja menggunakan script  lcd_putc( keypad + 48)  Script selengkapnya dapat didownload di sini.


SELAMAT MENCOBA
Share:

Rabu, 18 Desember 2013

[TUTORIAL] Keypad Matrix ke 7 segmen



Catatan : Untuk mempelajari tutorial ini agar memulai dengan praktek dasar input/output dan jam 7segmen


Tombol atau keypad merupakan alat input yg umum digunakan. Sebagai dasarnya adalah tactile switch seperti gambar berikut ini :


Gambar dikiri adalah contoh tactile switch (switch yg sensitif dan sekali sentuh) dan gambar dikanan adalah koneksi umum menggunakan pull up resistor 10k ohm , yang nantinya akan memberikan input dari logika HIGH (vcc) menuju logika LOW (gnd). Fungsi dari resistor adalah sebagai pembatas arus saat tombol ditekan sehingga tidak terjadi short antara vcc dan ground. Pada penekanan tombol yang akan kita cek adalah kondisi turun atau naik (menggunakan interupt) atau kondisi High / Low dengan teknik scanning. Kali ini akan dibahas metode scanning dengan script dasar pembacaan tombol sebagai berikut :


if (bit_is_clear(PIND, PIND5)) //tombol ada di pin D5
{
// kondisi yg diinginkan ditulis disini

_delay_ms(200); // delay untuk mengatasi de-bounching efek

}


Juga agar diperhatikan untuk mengeset pin D5 sebagai pin input pada inisialisasi port. Jika ingin menambahkan tombol lainnya cukup hanya dengan menambahkan rangkaian yg sama dan pencabangan di script if..else if. Jika memerlukan banyak tombol maka banyak pula pin microcontroller yang digunakan. Ada suatu teknik yg umum digunakan yaitu teknik scanning matrix dari tombol dengan mengubah pembacaan input dan output seperti yg biasanya kita dapatkan pada keypad matrix dibawah ini :



Gambar diatas menjelaskan bagaimana kombinasi dari 2 buah pin yang terhubung dan kemudian mewakili penekanan keypad. Keuntungan dari penggunaan matrix ini adalah berkurangnya penggunaan pin micro, yg seharusnya 12 pin menjadi hanya 7 pin Input Output saja. Mekanisme untuk pembacaan adalah dengan melakukan scanning dari kolom atau baris (pilih salah satu , digunakan sebagai OUTPUT) dan kemudian melakukan pembacaan pada pin yg dibuat sebagai INPUT.

Contoh penjabarannya adalah seperti berikut:


  • Row / Baris digunakan sebagai OUTPUT dan Micro akan membaca 3 pin Kolom
  • Micro akan melakukan output scanning "LOW" pada 4 pin baris (0111, 1011, 1101, 1110) secara bergantian
  • Micro kemudian akan membaca adakah input yg juga bernilai "LOW" , semisal saat scanning 0111 (paling kiri row 3), maka jika kolom 0 (sesuaikan pin microcontroller) bernilai "LOW" berarti yg ditekan adalah tombol " * " bintang begitu pula jika kolom 1 bernilai "LOW" maka yang ditekan adalah tombol " 0 ".
  • Pemilihan scanning aktif "LOW" atau "High" tergantung dari perlakuan pull up atau pull down dari pin input dalam hal ini pin kolom.


Secara scipt akan menjadi seperti ini :


uint8_t tombol(void)
{

uint8_t key=100; // nilai awal jika tidak ada penekanan


PORTD &= ~_BV(PD3);

PORTD |= _BV(PD4)|_BV(PD5)|_BV(PD6);  // scanning 0111
_delay_ms(1);


// berikut ini pembacaan tombol kolom sebagai input

if(bit_is_clear(PIND, PIND0))
{
key= 1;    
}
else if(bit_is_clear(PIND, PIND1))
{
key= 2;    
}

else if(bit_is_clear(PIND, PIND2))

{
key= 3;    
}


PORTD &= ~_BV(PD4);

PORTD |= _BV(PD3)|_BV(PD5)|_BV(PD6);  // scanning 1011
_delay_ms(1);

// berikut ini pembacaan tombol kolom sebagai input

if(bit_is_clear(PIND, PIND0)  )
{key= 4;    
}
else if(bit_is_clear(PIND, PIND1) )
{
key= 5;    
}

else if(bit_is_clear(PIND, PIND2) )

{
key= 6;    
}



PORTD &= ~_BV(PD5);

PORTD |= _BV(PD4)|_BV(PD3)|_BV(PD6); // scanning 1101
_delay_ms(1);

// berikut ini pembacaan tombol kolom sebagai input

if(bit_is_clear(PIND, PIND0) )
{key= 7;    
}
else if(bit_is_clear(PIND, PIND1) )
{
key= 8;    
}

else if(bit_is_clear(PIND, PIND2) )

{
key= 9;    
}



PORTD &= ~_BV(PD6);

PORTD |= _BV(PD4)|_BV(PD5)|_BV(PD3); // scanning 1110
_delay_ms(1);

// berikut ini pembacaan tombol kolom sebagai input

if(bit_is_clear(PIND, PIND1) )
{
key= 0;    
}

else if(bit_is_clear(PIND, PIND2))

{
key= 21; //mewakili *   
}
else if(bit_is_clear(PIND, PIND0) )
{key= 20;    //mewakili #
}


return key; // nilai integer dari variable key dikembalikan ke pemanggil




}



Dengan mengasumsikan bahwa pembaca sudah melakukan praktek microcontroller "jam sederhana" maka kita dapat melanjutkan menuju ke praktek sesungguhnya. Skematik dapat dilihat pada gambar berikut, menggunakan micro AVR ATMEGA8535 , micro lain tinggal menyesuaikan.




(klik pada gambar untuk memperjelas)



Sedangkan script lengkap pada percobaan ini sebagai berikut :


#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

uint8_t pencet, angka[4];

void segmen(int digit) // konversi angka ke segmen

{
    switch (digit)        
          {

  case 0 :  
     {

    PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2)  & ~_BV(PC3) 
            & ~_BV(PC4)  & ~_BV(PC5);

            PORTC |= _BV(PC6);
   
   break;
           }
  case 1 :
     {
      
   PORTC &= ~_BV(PC1) & ~_BV(PC2);

            PORTC |= _BV(PC0)|  _BV(PC3)|  _BV(PC4)|  _BV(PC5)|  _BV(PC6);
   
   break;
           }
  case 2 : 
     {
   PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC6) & ~_BV(PC4) & ~_BV(PC3);

            PORTC |= _BV(PC2)|  _BV(PC5) ;
   
      break;
           }  
  case 3 : 
      {

   PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC3) & ~_BV(PC6);

            PORTC |= _BV(PC4)|  _BV(PC5) ;
        
   break;
           }
  case 4 :
     {
      
   PORTC &= ~_BV(PC5) & ~_BV(PC1) & ~_BV(PC2) & ~_BV(PC6) ;

            PORTC |= _BV(PC3)|  _BV(PC4) |  _BV(PC0);
   
   break;
           }
  case 5 : 
     {

   PORTC &= ~_BV(PC0) & ~_BV(PC2)  & ~_BV(PC3) & ~_BV(PC6)  & ~_BV(PC5);

            PORTC |= _BV(PC1) |  _BV(PC4);
   
   break;
           }
  case 6 : 
     {

   PORTC &= ~_BV(PC0) & ~_BV(PC2)  & ~_BV(PC3) & ~_BV(PC6)  & ~_BV(PC5) & ~_BV(PC4);

            PORTC |= _BV(PC1) ;
   
      break;
           }
  case 7 : 
     {

   PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2);

            PORTC |=  _BV(PC3)|  _BV(PC4)|  _BV(PC5)|  _BV(PC6);
   
      break;
           }  
  case 8 : 
     {
   PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2)  & ~_BV(PC3) 
            & ~_BV(PC4)  & ~_BV(PC5)  & ~_BV(PC6);

      break;
           }
  case 9 : 
     {

   PORTC &= ~_BV(PC0) & ~_BV(PC1) & ~_BV(PC2)  & ~_BV(PC3) 
             & ~_BV(PC5)  & ~_BV(PC6);

   PORTC |= _BV(PC4); 

      break;
           }
  case 10 :
     {
         PORTC |= _BV(PC0) |  _BV(PC1) |  _BV(PC2) |  _BV(PC3)|
                _BV(PC4) | _BV(PC5) |  _BV(PC6) ;

      break;
           }



  }
}



void posisi(uint8_t pos) //posisi scanning 7 segmen

{
    switch (pos)   
    {
    case 0 :  
     {

           PORTA &= ~_BV(PA4) &  ~_BV(PA5)& ~_BV(PA6) & ~_BV(PA7) ;
               
   break;
           }

    case 1 :  
     {

            PORTA |= _BV(PA4);

            PORTA &= ~_BV(PA5) & ~_BV(PA6) & ~_BV(PA7) ;
   

               
   break;
           }

    case 2 :  
     {

            PORTA |= _BV(PA5);

            PORTA &= ~_BV(PA4) & ~_BV(PA6) & ~_BV(PA7) ;
           
   break;
           }

    case 3 :  
     {

            PORTA |= _BV(PA6);

            PORTA &= ~_BV(PA4) & ~_BV(PA5) & ~_BV(PA7)  ;
   
                 
   break;
           }


    case 4 :  
     {

            PORTA |= _BV(PA7);

            PORTA &= ~_BV(PA4) & ~_BV(PA5) & ~_BV(PA6)  ;

   break;
           }

         }

}


void tulis(void) //menulis angka ke 7 segmen

{  

    posisi(1);
    
    if( pencet <1) segmen(10); 
    else segmen(angka[0]);
 } 
 
    _delay_us(300);
    segmen(10);
     

    posisi(2);
    
    if( pencet <2) segmen(10);
    else segmen(angka[1]);
 } 
 
    _delay_us(300);
    segmen(10);

    posisi(3);
    
    if( pencet <3) segmen(10);
    else segmen(angka[2]);
 } 
 
    _delay_us(300);
    segmen(10);

    posisi(4);
    
    if( pencet <4) segmen(10);
    else segmen(angka[3]);
 } 
 
    _delay_us(300);
    segmen(10);
 

 


}




uint8_t tombol(void) //penerjemahan penekanan tombol
{

uint8_t key=100;

PORTD &= ~_BV(PD3);
PORTD |= _BV(PD4)|_BV(PD5)|_BV(PD6);
_delay_ms(1);


if(bit_is_clear(PIND, PIND0) )
{key= 1;    

}
else if(bit_is_clear(PIND, PIND1) )
{
key= 2;    

}

else if(bit_is_clear(PIND, PIND2))
{
key= 3;    

}


PORTD &= ~_BV(PD4);
PORTD |= _BV(PD3)|_BV(PD5)|_BV(PD6);

_delay_ms(1);

if(bit_is_clear(PIND, PIND0)  )
{key= 4;    

}
else if(bit_is_clear(PIND, PIND1) )
{
key= 5;    

}

else if(bit_is_clear(PIND, PIND2) )
{
key= 6;    

}



PORTD &= ~_BV(PD5);
PORTD |= _BV(PD4)|_BV(PD3)|_BV(PD6);

_delay_ms(1);

if(bit_is_clear(PIND, PIND0)  )
{key= 7;    

}
else if(bit_is_clear(PIND, PIND1) )
{
key= 8;    

}

else if(bit_is_clear(PIND, PIND2) )
{
key= 9;    

}



PORTD &= ~_BV(PD6);
PORTD |= _BV(PD4)|_BV(PD5)|_BV(PD3);
_delay_ms(1);


if(bit_is_clear(PIND, PIND1) )
{
key= 0;    

}

else if(bit_is_clear(PIND, PIND2) )
{
key= 21;  // mewakili *

}
else if(bit_is_clear(PIND, PIND0) )
{key= 20;  // mewakili #

}


return key;


}




int main(void)

{

uint8_t keypad;
 
   DDRA |= _BV(PA5) | _BV(PA6) | _BV(PA7) | _BV(PA4) ; //scanning 7 segmen 
   DDRC |= _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3) | _BV(PC4) | _BV(PC5) | _BV(PC6) ; //segmen
    
   //keypad     
    DDRD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD2); //col 
    DDRD |= _BV(PD3) | _BV(PD4) | _BV(PD5) | _BV(PD6); //row


pencet=0;

angka[0]=1;
angka[1]=2;
angka[2]=3;
angka[3]=4;

 while(1)

 {
   
keypad=tombol();

if(keypad!= 100 && pencet == 0)
 {  
  
  angka[0]=keypad;
  pencet = 1;

 _delay_ms(150);   
   

   }
   

else if(keypad!= 100 && pencet == 1)
 {  
  
  angka[1]=keypad;
  pencet = 2;

 _delay_ms(150);   
   

   }
   
else if(keypad!= 100 && pencet == 2)
 {  
  
  angka[2]=keypad;
  pencet = 3;

 _delay_ms(150);   
   

   }

else if(keypad!= 100 && pencet == 3)
 {  
  
  angka[3]=keypad;
  pencet = 4;

 _delay_ms(150);   
   

   }



if(keypad == 21 || keypad == 20)  // penekanan * atau # membersihkan 7 segmen
 {  
  
  pencet = 0;

 _delay_ms(150);   
   

   }


}

return 0;

}






SELAMAT MENCOBA 
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