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

Rabu, 27 November 2013

[Script Breakdown] Bikin Jam Di Televisi

Untuk melanjutkan ke project berikut ini disarankan agar menuju ke pembahasan awal mengenai Microcontroller VS Televisi di sini : Part#1 Part#2 Part#3 dan Pakman 







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 2 buah
  6.  Xtal 20Mhz + capasitor 22pF
  7. Programer AVR + header isp (2 x 10)
  8. Pesawat TV yg nganggur (pastikan tidak bentrok dengan jadwal mama nonton tv)

Kemudian skematik yg digunakan seperti gambar berikut :


Klik pada gambar buat memperjelas gambar
*) Rangkaian sama persis dengan project pakman hanya tombol yg digunakan  berada pada INT0 dan INT1


Kita akan breakdown scriptnya secara satu persatu agar pembaca semakin mengerti (atau tambah mumet .....mungkin looo). SIlahkan Baca Penjelasan disela-sela script.

>>> Header <<

#define F_CPU 20000000UL  //Frekuensi xtal yg digunakan, ubah fusebit untuk mengaktifkan
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>


#define FONTHEIGHT 12 //Tinggi font yg diwakili lebar array font

#define HSYNC PORTB=0; //PORTB=0 sebagai bit sinkronisasi horizontal atau penghasil 0 volt
#define BLACK PORTB=1;//PORTB=0 sebagai warna putih
//Berikut ini rumus untuk menampilkan warna dot putih di televisi berdasarkan array
#define COL(r) textnya=word[r][fontzoom];

static uint8_t fontline = 0; //variabel fontline
static uint8_t fontzoom = 0; //variabel zoom font untuk besar karakter yg ditampilkan

//BERIKUT INI ARRAY DOT YG MEWAKILI ANGKA 0 - 9 :
const unsigned char font[12][FONTHEIGHT] PROGMEM = { 
   {    //0
 0b00000000,
 0b01111100,
 0b11000110,
 0b11001110,
 0b11011110,
 0b11010110,
 0b11110110,
 0b11100110,
 0b11000110,
 0b01111100,
 0b00000000,
 0b00000000,
 },
 {//1
 0b00000000,
 0b00010000,
 0b00110000,
 0b11110000,
 0b00110000,
 0b00110000,
 0b00110000,
 0b00110000,
 0b00110000,
 0b11111100,
 0b00000000,
 0b00000000,
 },
 {//2
 0b00000000,
 0b01111000,
 0b11001100,
 0b11001100,
 0b00001100,
 0b00011000,
 0b00110000,
 0b01100000,
 0b11001100,
 0b11111100,
 0b00000000,
 0b00000000,
 },
 {//3
 0b00000000,
 0b01111000,
 0b11001100,
 0b00001100,
 0b00001100,
 0b00111000,
 0b00001100,
 0b00001100,
 0b11001100,
 0b01111000,
 0b00000000,
 0b00000000,
 },
 {//4
 0b00000000,
 0b00001100,
 0b00011100,
 0b00111100,
 0b01101100,
 0b11001100,
 0b11111110,
 0b00001100,
 0b00001100,
 0b00011110,
 0b00000000,
 0b00000000,
 },
 {//5
 0b00000000,
 0b11111100,
 0b11000000,
 0b11000000,
 0b11000000,
 0b11111000,
 0b00001100,
 0b00001100,
 0b11001100,
 0b01111000,
 0b00000000,
 0b00000000,
 },
 {//6
 0b00000000,
 0b00111000,
 0b01100000,
 0b11000000,
 0b11000000,
 0b11111000,
 0b11001100,
 0b11001100,
 0b11001100,
 0b01111000,
 0b00000000,
 0b00000000,
 },
 {//7
 0b00000000,
 0b11111110,
 0b11000110,
 0b11000110,
 0b00000110,
 0b00001100,
 0b00011000,
 0b00110000,
 0b00110000,
 0b00110000,
 0b00000000,
 0b00000000,
 },
 {//8
 0b00000000,
 0b01111000,
 0b11001100,
 0b11001100,
 0b11101100,
 0b01111000,
 0b11011100,
 0b11001100,
 0b11001100,
 0b01111000,
 0b00000000,
 0b00000000,
 },
 {//9
 0b00000000,
 0b01111000,
 0b11001100,
 0b11001100,
 0b11001100,
 0b01111100,
 0b00011000,
 0b00011000,
 0b00110000,
 0b01110000,
 0b00000000,
 0b00000000,
 },
 {//:
 0b00000000,
 0b00000000,
 0b00000000,
 0b00110000,
 0b00110000,
 0b00000000,
 0b00000000,
 0b00110000,
 0b00110000,
 0b00000000,
 0b00000000,
 0b00000000,
 },
 {//blank
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000,
 }};



uint8_t word[7][12]; //array dari dot

int tick; //variabel untuk mendapatkan pulse tiap sync

uint8_t jam,menit,detik,textnya;//variabel jam dan text





>>> TIMER <<

void timer_init(void){ //timer untuk menentukan pewaktu Hsync 64us

 TCCR1B |= (1<<WGM12);
 TIMSK |= (1<<OCIE1A);
 OCR1A = 1280; //64 (us)* 20(Mhz) sesuaikan dengan xtal yg dipakai
 TCCR1B |= (1<<CS10);
}





>>>GESER PER PIXEL <<

void geser(void)
{ uint8_t a;

//loop untuk menggeser Array angka yg ditampilkan dalam 64 us
for(a=0;a<8;a++){ 
PORTB = (textnya & 0x81) + 1;
textnya <<=1;
 asm("nop");
 asm("nop");
 asm("nop");
//sesuaikan banyak asm("nop"); dengan lebar karakter yg diinginkan
}






>>>TIMER INTERRUPT dan RASTER <<

/* Timer interrupt */

ISR (TIMER1_COMPA_vect) { //64 us
 static uint16_t rasterline=0;
 

 HSYNC; //mulai h sync
        //tulis jika diantara line 100 dan 160  
 if( rasterline > 100 && rasterline <= 160 ) {
  _delay_us(4);
  BLACK;
  _delay_us(8);
        asm("nop");
        asm("nop");
        asm("nop");

       //tampilkan dot putih(1) atau hitam(0)sesuai array gambar angka
    COL(0); //tampilkan puluhan jam
    geser();
    COL(1); //tampilkan satuan jam
    geser();
    COL(2); //tampilkan :
    geser();
    COL(3);//tampilkan puluhan menit
    geser();
    COL(4);//tampilkan satuan menit
    geser();
    COL(2);//tampilkan :
    geser();
    COL(5);//tampilkan puluhan detik
    geser();
    COL(6);//tampilkan satuan detik
    geser();
  
  fontline++; //tambahkan line / pindah raster selanjutnya
  if(fontline % 6 ==0)fontzoom++; 
// ubah angka 6 untuk mengatur tinggi karakter yg tampil di tv , fontzoom menyatakan berapa jumlah line raster yg akan ditampilkan (sama) sebelum menuju ke array baris karakter selanjutnya. semakin lama ditampilkan maka karakter akan semakin memanjang. sesuaikan nilai if di atas (  if( rasterline > 100 && rasterline <= 160 )  )


 } 

 //yang ini bagian Vertical sync, hanya menggunakan raster genap saja,  karena efek kelembaban mata tidak perlu menampilkan karakter saat raster ganjil (menghemat memory)
 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 { //yang ini mereset nilai array karakter
  _delay_us(3);
  BLACK;
   fontline = -1;
  fontzoom=0;
   }

 rasterline++;
 //bagian dibawah ketika layar ga tampil maka pindahkan nilai waktu
 if( rasterline > 311 )
   { rasterline = 0;
   

   memcpy_P(&word[0],&font[jam/10],12);
   memcpy_P(&word[1],&font[jam%10],12);
   memcpy_P(&word[2],&font[10],12);
   memcpy_P(&word[3],&font[menit/10],12);
   memcpy_P(&word[4],&font[menit%10],12);
   memcpy_P(&word[5],&font[detik/10],12);
   memcpy_P(&word[6],&font[detik%10],12);
 
      }


//yang ini mengakali nilai 1 detik , karena resource timer  termakan oleh proses sinkronisasi
  tick++;

    if(tick == 15625){ //ubah nilai tick sehingga pas 1 detik
    tick=0;
       detik++;
    if(detik==60){
      menit++;
   detik=0;}

       if(menit==60){
    menit=0;
    jam++;}
    if (jam==24) jam=0;
    }
}





>>>TOMBOL <<

SIGNAL (SIG_INT0)  //Tombol Tambah Jam
{
jam++;

if(jam == 24) jam=0;

detik=0;
}

SIGNAL (SIG_INT1)// Tombol Tambah Menit
{
menit++;  

if(menit == 60) menit =0;


detik=0;
}







>>>MAIN PROGRAM <<

int main() {
tick=0;
jam=00;
menit=00;
detik=00;

 
 
 
 MCUCR |= (1<<ISC01)  |(1<<ISC11) ; // interupt tombol fall edge

 GIMSK |= (1<<INT0) |(1<<INT1); //aktifkan interrupt 0 dan 1

 DDRB = (1<<PB7)|(1<<PB0); //PB0=1K, PB7=470 ohm

 timer_init(); //hidupkan timer
 sei(); // aktifkan interrupt

 for( ;; ); //muter terussssss
}





>>>HASILNYA <<





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:

Senin, 23 September 2013

Panduan Singkat Belanja Di Pusat Elektronika Komponen Pasar Genteng Surabaya



Jika anda pernah kuliah di kota Surabaya dan jurusan yg anda ambil nyerempet ke teknik yg berhubungan dengan listrik, maka nama pasar yang satu ini menjadi pilihan yg paling tepat untuk mencari komponen listrik - elektronika yg cukup terjangkau dengan kantong mahasiswa. Walau sedikit kumuh dan berkesan pasar tradisional (lt.1 memang pasar biasa) maka di lantai 2 akan didapati nuansa hi-tech yg berpadu dengan geliat ekonomi beromzet ratusan juta rupiah perhari. Mungkin suasana pasar dan pajak kios pedagang yg masih mengikuti "tarif" pasar tradisonal menyebabkan para "tacik" mempertahankan suasana dan nuansa yang nyaris tidak berubah dari tahun 80an.


image courtesy of eastjava.com

Adalah sangat tidak menyenangkan ketika anda pertama kali dan pergi sendirian ke pasar genteng lantai 2 tanpa mengetahui gambaran mengenai kios-kios dan jenis barang yang ditawarkan. Secara umum pusat elektronika di kantai 2 terdiri dari :

  • Video-Parabola-CCTV
  • Sound System
  • Komponen Elektronika Analog
  • Komponen Elektronika Digital
  • Komponen Grosir Umum 
  • Komponen spare part Televisi
  • Radio Komunikasi / GPS
  • Kabel dan Komponen Electrical Tegangan Tinggi
  • Panel surya dan Baterai
  • PCB-LED-Display Matrix
  • Service (terpusat di lt. 3)
  • Loak dan Barang ElektronikVintage (kuno)
  • Toko Elektronika Tidak Jelas (jualan tergantung apa yg sedang laku)




Karena blog ini membahas tentang elektronika digital, maka akan saya sesuaikan panduan pada tulisan ini pada tempat belanja yang berhubungan dengan digital. Jangan lupa lokasi dari pasar genteng jika anda belum mengenal kota Surabaya manfaatkan saja google map seperti gambar dibawah ini.

klik pada gambar untuk memperjelas


Landmark atau bangunan penanda yg saya rekomendasikan adalah Tugu Pahlawan - Jalan Tunjungan - Grahadi (Gedung Gubernuran). Ikuti tanda panah diatas yang menunjukkan jalan masuk ke pasar genteng. Apabila melalui Tugu pahlawan menuju Jalan pahlawan atau Kramat gantung ( 2 jalan sejajar) maka ujungnya ada di perempatan SIOLA, ditandai dengan poster besar di jembatan penghubung gedung yg melintang diatas jalan Tunjungan. Dari sini cukup dekat sehingga jika membawa motor maka lampu sein harap dinyalakan ke kiri dan masuk ke pertigaan arah kiri pertama yang ditemui. Kesan pertama yg muncul adalah parkir yg cukup ruwet di pusat oleh-oleh khas surabaya "BHEK".

Apabila melewati Gubernuran (akibat kebablasan dari siola ga belok kiri) maka lanjutkan berputar sampai menuju balai kota Surabaya dan kemudian menuju ke barat yg ditandai dengan jalan dengan pohon yang sangat rimbun (jl. walikota mustajab), disini terkenal dengan sate ondemohen nya dan bisa dicoba loo.... Kemudian jalannya agak ribet karena masuk jalan kecil disebelah hotel Weta sehingga ikuti penanda panah pada gambar diatas saja.



Pemilihan parkir motor/mobil sangat membuat kepala benar-benar pusing jika anda pertama kali kesini, tapi rekomendasi saya adalah parkir sebelah timur karena cukup teduh walaupun sekali lagi parkirnya ga begitu luas. Penulis selalu memarkir motornya disini karena memang aksesnya terasa mudah untuk menjadi penanda awal menuju ke toko-toko elektronika digital. Karena penulis tidak mahir membuat denah,maka akan coba digambarkan saja dengan kata-kata dan saya harap pembaca mampu memahaminya.

Toko Saturn

Paling dekat dengan tangga naik kelantai 2, langsung saja berbelok ke kiri di ujung tangga dan ditandai dengan display LED MATRIX dengan tulisan grafik yg cukup menarik. Barang yg dijual berupa segala sesuatu yg berhubungan dengan LED dan Display Moving Sign. Beberapa kit merek "saturn " juga dijual dan kit ini cukup terkenal dikalangan penghoby elektronika.  Penjaga toko ini 2 orang wanita.

Toko SAN

Toko san ini berada di 2 toko di sebelah kanan tangga naik lantai 2, dengan spesialisasi di komponen digital, alat ukur dan yang paling menarik adalah koleksi kapasitor premiumnya. Jangan kecewa kalau toko ini tutup waktu jam makan siang ya...karena sang pemilik cukup disiplin waktu istirahatnya. penjaganya  cewek 2 orang dan ciri khas pemilik chinese  selalu berada di depan laptopnya.

Toko Mahajaya

Toko paling terkenal di era 80-an dengan koleksi IC TTL dan CMOS yg lengkap dan juga koleksi resistor watt besar, inductor berbagai jenis, relay, koleksi xtal dan perangkat radio. Mungkin sudah sedikit outdate untuk era digital tapi sang pemilik yg sudah uzur masih melayani pembeli dengan memorynya pada jenis komponen lumayan bagus untuk seusianya. Penulis memiliki kesenangan tersendiri ke toko ini karena nuansa elektronika vintage nya terasa, apalagi koleksi xtal untuk radio CB  (27Mhz) nya lumayan lengkap dan satu-satunya tempat yg menjual xtal UART 7372800 hz. Untuk mencari lokasinya dari ujung tangga, 1 lorong didepan ke kanan dan toko ini berhadapan dengan toko perangkat audio/cctv . Penjaga wanita 2 orang  , dengan pemilik chinese rambut putih (sudah super senior) dan kadang-kadang ada orang  chinese gemuk yg entah anaknya atau keponakan si pemilik.

Toko Prima

Toko dengan spesialisasi kabel VGA (katanya penyalur ke semua karaoke di Indonesia timur) dan memiliki koleksi kit dari Innovative terlengkap. Jadi jika ingin membeli kit microcontroller dari innovative disinilah tempatnya. Koleksi Micro Atmel (MCS51/AVR) paling lengkap dengan harga lumayan murah. LCD 16x2 atau 16x4, 7 segmen berbagai jenis dan juga Led matrix terpasang di etalase. Jangan terkejut kalau ramai pelajar dan mahasiswa berjubel disini karena koleksi komponen TTL , OPAMP dan Sensor yang dibilang paling lengkap dengan harga mahasiswa. Penjaga toko berjumlah 2 orang (wanita stw bahenol ) dan biasanya tacik yg punya selalu setia di kios. Ancer-ancer untuk mencarinya adalah lorong ketiga dari tangga parkiran belok kanan 1 blok, atau jika dari tangga masuk utama langsung lurus saja ke lorong di kiri tangga.

Toko Mentari

Toko ini kecil tapi dengan koleksi microcontroller yang bagus. Penjaga toko berjumlah 2 orang cowok dan sang pemilik yang chinese selalu berada di depan laptop. Spesialisasi di robotika , motor servo, stepper dan beberapa komponen impor dari sparkfun. Lokasi agak kedalam , dari toko prima lurus 1 lorong lagi ke kiri didepan toko spesialis audio grosiran.

Toko Eltech

Semua pasti tau eltech, jadi ga saya bahas karena lumayan gede tokonya dengan spesialisasi MOVING SIGN dan Digital yang lumayan kelas atas jadi harga mahal. Letaknya di bagian belakang dan lokasi kios cukup luas.

Toko Jupiter

Sebenernya nama toko ini ga terlalu jelas, akan tetapi saya selalu mengingatnya dengan nama ini. Spesialisasi adalah PCB polos berbagai macam dan ukuran beserta pelarut pcb "FeCl" feri clorit. Disini juga dapat dibeli adaptor switching (bekas tp bagus) biasanya penulis membeli yang tegangannya 5V dan membeli dalam jumlah besar biar murah. Cara yg paling ampuh untuk mencari toko ini adalah dengan menanyakan dimana letak toko jamu karena berdekatan dengan pusat jamu (mungkin diharapkan selain menyolder kita juga harus sehat dengan minum jamu !) Penjaganya seorang chinese cewek yg genit abiss...

Toko Varia


Jika berhubungan dengan elektronika digital-power maka disini tempatnya. Koleksi Mosfetnya lengkap banget dan dioda fast switching juga ada. Harap menyiapkan duit lebih dikantong karena harga MOSFET dkk cukup mahal. Lokasinya di pinggir, dari tangga parkiran ke kiri lurus mentok trus kekanan 2 toko.

Loakan & Komponen jadul

Jika ingin mencari motor stepper, motor gearbox, komponen bekas untuk pengiritan maka cukup mengelilingi toko disekitaran pinggiran pagar lantai 2. Disini beberapa komponen bekas yg masih bagus bisa didapatkan asal dengan perjuangan lebih dalam tawar menawar. Kalau ingin mencari Transistor TABUNG untuk koleksi radio jaman perang disinilah tempatnya. Kata salah satu pemilik toko , pasar genteng menjadi rujukan seluruh Indonesia untuk komponen tabung karena koleksi tabungnya asli (komponen buatan dibawah tahun 90-an, Toshiba-Motorola-RCA) bukan KW yg produksi dari china.


Catatan

Sering penulis mendapati orang yang kebingungan mencari suatu komponen yg "dianggapnya" rusak dan kemudian membawanya ke salah satu toko untuk ditanyakan ke penjaga toko. Hasilnya pasti dapat ditebak 90% si penjaga toko akan geleng-geleng kemudian si pembeli dapat dipastikan dengan expresi muka kecut berkata "kira-kira dimana ya mbak yg jual? " Jangan harap bakal dikasi tau dan bisa-bisa anda akan disesatkan karena sesama penjaga toko umumnya saling bercanda melempar-lempar para pembeli yang bingung. Jadi pastikan komponen yg anda cari adalah komponen diskrit yang umum dipasaran atau setidaknya dijual di toko komponen online atau banyak ditemukan di mesin google. Jika komponennya spesifik pabrik, cobalah mencari komponen itu jenisnya apa? Karena ketika yg anda beli semisal microcontroller dan ternyata ada dijual di salah satu toko, maka masalah tidak berhenti disini. Programnya bagaimana ? Ditancepin ke alat dan dijamin (jika programmingnya internal) akan mengecewakanmu.


SELAMAT BERBELANJA
Share:

Rabu, 18 September 2013

[TUTORIAL] AVR - BLUETOOTH - ANDROID ...... it's easy



Sebelum lanjut ke topik pembahasan, saya pingin ngeluh, bangga atau sedih dengan kenyataan mengenai komponen elektronika pabrikan dari china. Teringat ketika disuatu terminal bis 10 tahun yg lalu pada pedagang asongan yang menjual radio FM mini dengan harga 10 ribu rupiah. Secara saya pernah merakit sendiri radio FM serasa ga masuk akal deh harga segitu. Sekarang di tahun 2013 apa sih komponen yg tidak dibikin murah sama pabrikan china ? Dan kenapa bisa murah ? Yang saya tahu bahwa komponen elektronika di china sudah menjadi industri rumah tangga dan mereka didukung pemerintah komunis untuk memproduksi komponen diskrit kelas rendah seperti resistor, kapasitor , transistor dsb. Hasilnya ya dapat dilihat dari murahnya hasil output barang-barang rakitan atau seperti modul Bluetooth seri HC-XX yang saya beli ini dengan harga tidak masuk akal ! Ohh Indonesiaku kapan bisa seperti itu....


MODUL BLUETOOTH


Kembali ke LAAPPTOPP (gaya tukul arwana) .... Kita akan mulai dengan membuka komponen yg baru dibeli yaitu modul bluetooth HC-05. Kenapa saya pilih HC-05 ? Ya karena beberapa tulisan di internet menyatakan bahwa lebih worthed untuk membeli versi ini karena dapat berfungsi sebagai Master atau Slave. Mode ini menunjukkan bahwa si modul dapat menginisialisasi (ala vicky saskia ghotik) koneksi dan juga standar sebagai penerima koneksi dari perangkat lain. 

Dan yang bikin lumayan pusing adalah modul yg dibeli belum di breakout (yg jual ke saya ternyata bohong), terpaksa deh saya break out pada kaki-kaki yang akan digunakan. Trick nya adalah dengan memanfaatkan kawat atau sisa kaki komponen yang tipis kemudian di solderkan pada lekukan pin modul. Lakukan dengan hati-hati karena cukup kecil ukurannya. Juga yang menjadi perhatian adalah space antar lekukan yang tidak standar seperti space pin komponen umum, sehingga perlu di kreasikan agar pas seperti contoh yang saya buat di gambar berikut.





Seperti halnya komponen jaman sekarang yg biasa digunakan pada perangkat bertenaga baterai maka HC-05 (harus diingat dalam-dalam)  level tegangan yang dipakai adalah 3.3V. Akibatnya semua logic dan supply tenaga yang diberikan memiliki range yang berbeda dengan level TTL yang 5V. Komunikasi yang akan kita pakai adalah UART serial sederhana tapi memiliki level 3.3 volt. Jadi sebelum berkomunikasi dengan microcontroller ataupun menuju ke PC via RS232 (kali ini memakai MAX232) maka cukup diberikan level shifter yang dapat dibuat dengan komponen sederhana seperti berikut ini.


Untuk menghasilkan tegangan 3.3v saya gunakan regulator tegangan AIC 1722-33 yg sangat simple dengan bentuk seperti transistor (TO-92). Apabila mengalami kesusahan mencari komponen ini maka dapat digunakan regulator variabel LM317 yang mudah didapatkan atau bisa juga memakai 7805 dengan modifikasi sebagai berikut.


Atur resistansi R2 sampai output mencapai 3.3V

SKEMATIK

Oke ilmu awal sudah cukup, dan sebaiknya langsung aja dirakit biar ga pusing (biasanya kalo dibiarkan ide atau keinginan menyolder mengendap di otak akan menimbulkan kegalauan tingkat tinggi) . Skematiknya seperti berikut, harap di klik biar jelas.



IC AVR yg digunakan ATMega16, bisa juga menggunakan ATMega 8535/32I


Jika rangkaian sudah dirakit kita lanjut dengan membahas rangkaian diatas. Microcontroller avr merupakan otak dari semua system. HC05 melalui level shifter akan berkomunikasi dengan micro menggunakan mode serial UART. Selain itu harus diingat ketika HC05 keluar pabrik memiliki baudrate 38400 bps dengan nama bluetooth "HC05" passkey : "1234". Untuk merubah nama dan setting lainnya diperlukan koneksi ke UART PC melalui Max232. Seperti alat komunikasi standar maka AT command merupakan metode perintah yang akan digunakan walaupun agak berbeda sedikit dengan AT command untuk perangkat telepon yang pernah dibahas disini.

Untuk menuju ke mode AT command, maka hubungkan jumper serial port ke arah MAX232 dan pasang jumper Key sehingga pin key mendapat logika 1 (high). Jika ini dilakukan sebelum diberikan tegangan maka mode UART menjadi 38400 (otomatis), sedangkan jika jumper dipasang setelah power dinyalakan maka baudrate mengikuti baudrate yg telah diset sebelumnya (semisal 9600). Gunakan software terminal seperti Putty untuk memasukkan command, dan  yang umum adalah :

AT+NAME? , AT+NAME=[masukkan nama] , AT+PSWD? , AT+PSWD=[pasword baru], AT+UART?  

Selengkapnya dapat di download commandnya disini . Ketika mode AT dijalankan maka LED pin 31 akan menyala pelan dan akan menyala terus atau mati terus saat memberi respon ke kita. Ingat command yang dikirim tidak diketik ulang (echo) oleh modul dan reply akan keluar terus menerus sampai ada penekanan tombol keyboard. Jadi agak sedikit berbeda dengan AT command pada modem wavecom.

Setelah tersetting seperti keinginan (kali ini baudrate kita set 9600), maka kita menuju ke pemrograman pada AVR dan ini tidak jauh berbeda dengan pembahasan sebelumnya mengenai kontrol via serial . Jika pembahasan terdahulu komunikasi serial melalui kabel USB to serial dan kontrol dilakukan di PC maka sesuai judul kita akan menggunakan smartphone ANDROID dengan software terminal "SENA Bterm".


SCRIPT

#define F_CPU 4000000UL //sesuaikan dengan xtal yg dipakai
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 


#define USART_BAUDRATE 9600  //sesuaikan dengan baudrate Bluetooth
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) 

//teks reply, sesuaikan dengan keinginan
const char menu[] PROGMEM = " \ntest BLUETOOTH by ahocool\n\r" ;
const char satu[] PROGMEM = " \ntombol 1 \n\r";
const char dua[] PROGMEM = " \ntombol 2 \n\r";
const char tiga[] PROGMEM = " \ntombol 3 \n\r";



void USART_Tx(unsigned char data)
{   
    
   while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
    UDR = data; // Send data to the computer

}

void kirim_text(const char *data)
{
   while (pgm_read_byte(data) != 0x00)
     USART_Tx(pgm_read_byte(data++));
} 




void init_usart(void)
{

cli();

   UCSRB |= (1 << RXEN) | (1 << TXEN);   
   UCSRC |= (1 << UCSZ0) | (1 << UCSZ1); 
   UBRRL = BAUD_PRESCALE; 
   UBRRH = (BAUD_PRESCALE >> 8);
   UCSRB |= (1 << RXCIE);  //interupt serial usart
sei();
  }




ISR(USART_RX_vect)
{ 
 char databyte;
 
  
  databyte = UDR;   

  
     switch (databyte)        
 
  {
 //sesuaikan dengan tombol keyboard yg digunakan
     
     case 0xD : {
             kirim_text(menu) ;
    break; }
     case '1' : {
             kirim_text(satu) ;
    break; }
     case '2' : {
             kirim_text(dua) ;
    break; }
     case '3' : {
             kirim_text(tiga) ;
    break; }      
  
  }  
}  





int main(void)
{
 


 init_usart();


 while(1)
  {
    

  }

return 0;
}



MENJALANKAN DI ANDROID

Jika kamu tidak mempunyai android maka bisa memanfaatkan komputer yg memiliki bluetooth atau membeli dongle/usb bluetooth yg harganya murah saja sekitar 30ribuan. Selanjutnya bisa menggunakan koneksi serial via bluetooth dan software terminal untuk mengakses com port yg dihasilkan oleh dongle. Untuk HP ANDROID maka meluncur saja ke GOOGLE PLAY dan di search "SENA BTerm" dan kemudian di install. Software terminal ini mendukung komunikasi serial ke bluetooth.


Hidupkan modul dan AVR yg sudah terprogram, jumper serial /UART terhubung ke micro AVR, Jumper Key dicabut dan kemudian ditandai dengan led pin 31 yg menyala cepat (2hz) yang berarti "ready for pairing". Jalankan SENA BTerm pada hp android dan kemudian pencet tombol menu dan pilih "bluetooth management" kemudian "connect to" ==> " Device Select ". Kemudian lanjutkan dengan scanning perangkat bluetooth dan pilih sesuai nama bluetooth modul HC05 yang telah diseting sebelumnya. Masukkan juga password pairing yang sesuai.



Untuk melakukan koneksi mode serial maka pencet tombol "Connect (ATDxxxx)" sampai ada muncul tulisan connected data.


Berdasarkan script diatas maka ketika tombol enter, 1, 2 dan 3 ditekan maka akan muncul reply seperti berikut :



Selanjutnya kreativitas tak terbatas dapat dibuat dengan komunikasi wireless ini. Tapi ingat bahwa bluetooth hanya berjarak udara cukup pendek kira-kira 10 meter tanpa halangan dan harap ini menjadi perhatian tersendiri jika ingin medesain suatu system remote jarak jauh.


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