Subscribe For Free Updates!

We'll not spam mate! We promise.

Showing posts with label Mikrokontrol. Show all posts
Showing posts with label Mikrokontrol. Show all posts

Friday 22 May 2015

Key Pad (3x4/4x4)

             Pada postingan kali ini penulis ingin memparkan sedikit tentang pengertian Key Pad, bagaimana cara kerjanya dan pemrograman key pad dengan mikrokontrol ATMega dan software CVAVR. Untuk lebih jelasnya lagi mari kita menyimak artikel ini.
Keypad merupakan komponen elektronik yang digunakan sebagai masukan, disususun dari beberapa tombol/switch dengan teknik matrix. Berdasarkan penjelasan tersebut, bahwa sebenarnya keypad merupakan tombol-tombol yang dirangkai menjadi  sebuah paket dengan teknik menghubungkan satu tombol dengan tombol yang lain dengan teknik matrix. Teknik matrix adalah bisa dikatakan array, memiiki kolom dan baris lebih dari satu. Berikut secara ilusrasi penghubungan tombol-tombol pada keypad.
   
Gb. 1a. Skematik koneksi tombol pada keypad (3x4)

Gb. 1b. Skematik koneksi tombol pada keypad (4x4)



Gb. 2a. Keypad berbahan carbon elastic/plastik 4x4
        
              
Gb. 2b Keypad berbahan carbon elastic/plastik 3x4

PERANGKAT KERAS KEY PAD

Gb.3a. Keypad berbahan carbon karet
     
  
Gb.3a. Keypad berbahan carbon karet
Penyusun tombol pada keypad dapat dibuat dari bermacam-macam bahan/komponen, seperti switch metal, switch karbon, dan resistif/kapasitif (touch panel). Penggunaan bahan tersebut disesuaikan dengan kebutuhan akan sensifitas, aksi penekanan, dan kebutuhan akan suatu tombol khusus. Bahan switch metal pada keypad digunakan untuk kebutuhan keypad atau tombol-tombol dengan arus yang besar. Keypad dengan bahan carbon dipakai untuk kebutuhan tombol-tombol dengan arus kecil. Biasanya itu digunakan untuk alat-alat digital yang hanya memiliki tegangan 0 dan 5v. Penerapan bahan banyak kita jumpai seperti pada keypad remot tv, remot ac, joy stick, serta masih banyak lainnya.
Sedangkan bahan penyusun keypad yang bersifat resistif/kapasitif digunakan sebagai panel sentuh pada alat-alat elektronik, seperti hp, smart phone, tablet, computer dan masih banyak lainnya. Dengan bahan resistif/kapasitif dalam pembuatan keypad, pada area yang lebih kecil didapatkan resolusi atau tombol yang lebih banyak. Berikut beberapa bentuk dari keypad yang dipakai sebagai sinyal masikan pada mikrokontroller.
Pemrograman keypad dibutuhkan dua arah komunikasi dalam mengambil data-data masukan dari keypad. Secara algoritma peng-akses-an keypad dapat dituliskan seperti berikut:

    Kirim data biner pada kolom ke-1 keypad
    Ambil data biner (4bit) pada baris keypad
Tunda (us)
...
Kirim data biner pada kolom ke-n keypad
Ambil data biner (4bit) pada baris keypad
Tunda (us)
Pembacaan data masukan dari keypad sesuai dengan algoritma diatas harus didahului dengan pengiriman data kolom. Pengiriman tersebut dimaksudkan sebagai signal yang akan dilewatkan salah satu saklar apabila tombol ditekan/tertutup. Kebanyakan progran mendeteksi signal masukan dari keypad menggunakan sinyal rendah (0/low). Penggunaan instruksi tunda (delay) bisa flexible, apabila ingin mendeteksi masukan dengan cepat maka tunda ditiadakan, selanjutnya sebaliknya.
Guna menterjemahkan symbol/karakter yang akan dilekatkan pada tombol-tombol keypad maka dibutuhkan program tambahan sebagai pengubah dari deteksi sinyal masukan menjadi karakter. Pengubahan ini dapat dilakukan secara langsung ataupun ada anak program yang berfungsi untuk mengubah/menterjemahkannya. Nilai/karakter bisa kita buat sesuai kemauan programmer (tidak ada aturan yang pasti) meliputi karakter huruf (a-Z), angka (0-9) dan symbol (“,+-dst).
Pemasangan keypad dengan mikrokontroller dapat dihubungkan hanya pada salah satu PORT saja, seperti yang digambarkan pada poin “B. Gambar rangkaian hardware” dibawah ini. Secara pengaturan pada codewizard dapat dilakukan dengan langkah seperti yang diilustrasikan sebagai berikut (Misal PORTA).
Pengaturan Keypad.jpg

Gb4. Pengaturan CodeWizard untuk keypad 3x4
    Dalam 1 PORT (Misal POTRA) digunakan menjadi dua fungsi, yaitu masukan Bit0 – Bit3 dan keluaran Bit5 – bit7. Masukan akan men-scanning data baris pada keypad yang sedang terjadi, sedangkan keluaran digunakan untuk mengirim data rendah pada kolom. Proses pengerjaanya dilakukan oleh mikrokontroler sangat cepat, sehingga proses scanning tidak akan nampak kelihatan.
Gb. Koneksi saklar pada keypad
Contoh Program
  1. Program mendeteksi tombol posisi sw 1,1 ditekan pada keypad dengan tampilan LCD
#include <mega16.h>
#include <delay.h>


... ..
Void main()
{
....
While(1)`````````````````````````````````````````````````````
    {
    PORTA.5=0;PORTA.6=0;PORTA.7=1;
    If(PINA.2==0)
          {lcd_putsf(“Sw 1,1 ditekan”);
          Delay_ms(10);
          }
    };
}

  1. Program menampilkan karakter angka pada LCD dengan penekanan 11 tombol (0-9 dan *#,)
#include <mega16.h>
#include <delay.h>


... ..
Void main()
{
....
While(1)
    {
    PORTA.5=0;PORTA.6=1;PORTA.7=1;
    if (PINA.3==0)lcd_putsf(“1”);
    else if (PINA.2==0) lcd_putsf(“4”);
else if (PINA.1==0) lcd_putsf(“7”);
    else if (PINA.0==0) lcd_putsf(“*”);
      delay_ms(1);
    PORTA.5=1;PORTA.6=0;PORTA.7=1;
    if (PINA.3==0)lcd_putsf(“2”);
    else if (PINA.2==0) lcd_putsf(“5”);
else if (PINA.1==0) lcd_putsf(“8”);
    else if (PINA.0==0) lcd_putsf(“0”);
    delay_ms(1);
    PORTA.5=1;PORTA.6=1;PORTA.7=0;
    if (PINA.3==0)lcd_putsf(“3”);
    else if (PINA.2==0) lcd_putsf(“6”);
else if (PINA.1==0) lcd_putsf(“9”);
    else if (PINA.0==0) lcd_putsf(“#”);
    delay_ms(1);
    };
}

Sekian sedikit apa yang dapat saya paparkan pada artikel ini. Semoga dapat bermanfaat dan menambah pemahaman kita akan Key Pad. Sampai bertemu pada artikel berikutnya.

Thursday 5 February 2015

ADC (Analog to Digital Conventer)

ADC (Analog to Digital Conventer) merupakan sebuah system yang berupa rangkaian elektronik dengan fungsi untuk mengubah sinyal/tegangan analog menjadi sinyal atau tanda-tanda digital. Pengubahan ini bertujuan untuk mendapatkan data-data digital berupa hexa atau biner, sehingga microprosesor dapat mengolah data tersebut. Data-data digital yang hasil perubahan ADC merupakan representasi dari masukan yang berupa data tegangan analog.

ADC dalam pembahasan kali ini focus pada ADC yang dimiliki mikrokontroller keluarga AVR. ADC mikrokontroller keluarga AVR yang dimiliki merupakan ADC 8bit. Dengan tegangan referensi yang dapat diatur oleh keinginan programmer. Setiap tipe mikrokontroller AVR dengan seri ATMega xxxx memiliki fasilitas ADC yang dapat programmer digunakan. Setiap tipe memiliki jumlah ADC yang berbeda (lihat pada data sheet), akan tetapi memiliki resolusi yang sama yaitu 8bit. Berikut ilustrasi dari ADC micro yang dalam IC menjadi satu dengan system.
 

Gb.1 fasilitas konfirgurasi ADC pada microkotroller ATMega16

Untitled-2

Gb.2 blog konfigurasi internal ADC microkontroller

Berdasarkan gambar terdapat terminal yang penting dan harus diperhatikan dalam menggunakan fasilitas ADC. Terminal/PIN/Kaki IC tersebut diberikan nama AVCC dan ARef. AVCC merupakan tegangan yang digunakan untuk kerja rangkaian yang ada didalam mikrokontroler. Pin tersebut agar dapat bekerja secara maksimal diberikan tegangan +5VDC. Sedangkan pin ARef merupakan tegangan referensi yang digunakan sebagai tegangan pembanding dan acuan ADC micro dengan mengkonversikan tegangan analog menjadi digital. Tegangan Aref dapat disesuaikan dengan kebutuhan akan kerapatan data dalam pengkorvensiannya. Semakin kecil tegangan referensi maka resolusi pembacaan ADC semakin rapat. Berikut ilustrasi pengubahan Analog ke Digital:
Gb.3 Grafik ilustrasi pengubahan tegangan analog menjadi data digital

Penjelasan gambar diatas terdiri dari dua bentuk sinyal, yaitu sinyal analog dengan sinyal discreet yang nanti dijadikan data hasil konversi digital. Pengubahan  tegangan masukan analog menjadi digital memperhatikan beberapa variabel, seperti V/Aref yang menentukan kerapatan resolusi (tinggi step discreet) dan tipe kemampuan pengolahanADC yang digunakan. Tipe ADC pada keluarga AVR mikrokontroler seperti diatas telah dijelaskan yaitu ADC 8 bit. Guna menghitung kerapatan pengubahan sinyal discrit perlu memperhatikan dua factor tersebut, misalkan terdapat beberapa contoh sebagai berikut
  • ADC 8bit ATMega 16 menggunakan tegangan referensi (Aref) sebesar +5VDC, berapa resolusinya?
Jawaban dari pertanyaan seperti itu adalah:
Resolusi Discreet =Aref(28)-1
Resolusi Discreet=5V255
Resolusi Discreet= 20mV

Sehingga besarnya step discreet terjadi perubahan pembacaan data digital setiap kelipatan 20mV, seperti pada gambar diatas. Setiap kenaikan tegangan masukan 20mV akan mengubah data digital satu tingkat lebih tinggi.
  • Apabila terdapat tegangan masukan ADC sebesar 3,4V maka berapa pembacaan data ADC mikrokontroler?
Jawaban dari Pertanyaannya adalah:

Data ADC =VinResolusi Discreet
Data ADC =3,4V20mV
Data ADC=170
Data ADC sebesar 170 merupakan pembacaan mikrokontroler terhadap masukan tegangan analog sebesar 3,4V.

Tegangan referensi (ARef) sebesar +5V DC digunakan apabila untuk pembacaan tegangan masukan ADC dengan range dan jangkauan yang tinggi. Sedangkan apabila dibutuhkan resolusi pembacaan ADC yang lebih kecil, dapat dilakukan perubahan tegangan referensi yang lebih kecil. Sebagai contoh berikut ini:

  • Jika terdapat sensor suhu LM35 dengan perubahan tegangan 10mV/°C, maka agar suhu dapat dibaca akurat perlu diberikan tegangan referensi sebagai berikut;
ARef= Resolusi Discreet x ((28) - 1)
ARef= 10mV x 255
ARef= 2,5V
Sehingga agar dapat membaca perubahan suhu /°C maka perlu dipasang tegangan referensi sebesar 2,5V. Berikut skematik yang diterapkan agar mendapatkan tegangan referensi 2,5V;
Gb.4 Skematik Aref dengan tegangan 2,5V

Secara rangkaian elektronik dan pengubahan ADC telah dijelaskan diatas, sedangkan dalam pemrograman perlu dilakukan pengaturan pada CodeWizard AVR sebagai berikut;

Gb.5 konfigurasi CodeWizard AVR dalam mengaktifkan penggunaan fasilitas ADC

Setelah pengaturan diatas selesai dan masuk pada area program (Generate, Save and Exit) maka akan muncul sebuah blok fungsi yang sudah dibuah CVAVR sebagai fungsi pembacaan/penkonversian ADC. Beikut program yang dapat dituliskan:
..........
    ..........
    #define ADC_VREF_TYPE 0x20
    // Read the 8 most significant bits
    // of the AD conversion result
    unsigned  char read_adc(unsigned char adc_input
    {
    ADMUX=adc_input (ADC_VREF_TYPE & 0xff);
    // Delay needed for  stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
ADCSRAI=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRAI=0x10;
return ADCH;
}
..........
..........

Sedangkan pada CVAVR sendiri sudah terdapat instruksi/statement yang dapat digunakan untuk meng-akses pembacaan tegangan analog, yaitu;
    read_adc(no ADC)
contoh: (misal terdapat tegangan masukan yang akan dibaca pada ADCo)
    adc=read_adc(0);
Keterangan program  diatas adalah “baca tegangan pada ADCo dan hasilnya dimasukan dalam variabel adc”.

Penggunaan fasilitas ADC pada mikrokontroler harus dibarengi dengan penggunaan suatu tampilan yang dipakai sebagai penampil data. Tampilan data tersebut bisa berupa LED, 7Seg, atau sebuah LCD. Khusus untuk penggunaaan LCD yang digunakan menampilkan data pecahan dari hasil pengolahan suhu, serta menggunakan instruksi program sprintf(...), perlu ada pengaturan yang khusus sebelum program itu di build.

Pengaturan itu dapat dilakukan dengan cara: Menu Project → Configure → C Compiler → kemudian pada sprintf Feature dipilih float width, precision.
Gb.5 Pengaturan sprintf feature


Gambar Rangkaian Hardware

Gb. Rangkaian simulasi ADC dengan sensor LM 35

Contoh program

C1. Program menampilkan data pengubahan data analog menjadi data discreet menggunakan sensor lm35 sebagai masukan  dan LCD sebagai tampilan keluaran.
   #include <maga16.h>
   #include<delay.h>
   ……………..
   unsigned char read_adc(unsigned char adc_input)
   {
   …………….
   …………….
    }
   …………….
    unsigned int data_discreet;
    unsigned char lcd_buffer[30];
    void main (void)
    {
   …….
   …….

   while (1)
    {
    data_discreet=read_adc(0);
    sprint(lcd_buffer,”Discreet = %u”, data_discreet);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(500);
};
    }

C.2 Program menampilkan suhu ruangan dengan menggunakan LM35 sebagai  sensornya, dan LCD sebagai keluaran data.(catatan: keluaran suhu kelipatan 2)
#include<mega16.h>
#include<delay.h>
 …………
unsigned char read_adc(unsigned char_input)
{
…………..
…………..
 }
 …………..
unsigned int data_suhu;
unsigned char lcd_buffer[30];
void main (void)
    {
    ……
    ……


    while(1)
    {
    data_suhu=(read_adc(0)*2);
sprint(lcd_buffer,”Suhu = %d”, data_suhu);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
lcd_gotoxy(9,0);
lcd_putchar(223);
lcd_putsf(“C”);
delay_ms(500);
};
    }