My Link

Photobucket

Mengenal mikrokontroler

Prinsip kerja mikrokontroler
Pemrograman mikrokontroler merupakan dasar dari prinsip pengontrolan kerja robot, dimana orientasi dari penerapan mikrokontroler ialah untuk mengendalikan suatu sistem berdasarkan informasi input yang diterima, lalu diproses oleh mikrokontroler, dan dilakukan aksi pada bagian output sesuai program yang telah ditentukan sebelumnya.
Mikrokontroler merupakan pengontrol utama perangkat elektronika saat ini, termasuk robot tentunya. Mikrokontroler yang terkenal dan mudah didapatkan di Indonesia saat ini ialah 89S51, AVR ATmega 8535, Atmega16, Atmega32 dan Atmega128. Beberapa merek lain yang terkenal misalnya PIC 16F877 dan Basic Stamp 2.
Mikrokontroler memiliki beberapa Port yang dapat digunakan sebagai I/O (input/Output). Gambar Berikut ini merupakan susunan kaki standar 40 pin DIP mikrokontroler AVR ATmega 8535. Sedangkan ATmega128 memiliki kemampuan yang lebih besar, yaitu 128 KB ISP Flash Memory, 4K EEPROM, 4K internal SRAM dan memiliki 5 port I/O.


(a) (b)
Gambar Mikrokontroler ATmega8535 (a) dan ATMega128 (b)

Untuk membangun programmer melalui Parallel Port PC dapat dengan mudah dilakukan dengan merangkai beberapa komponen yang ada pada skema pada gambar 5.2, untuk softwarenya dapat digunakan berbagai software gratis ISP yang dapat Anda download di situs penulis.



Gambar Programmer ISP standar untuk 89S51


Arsitektur Mikrokontroler
Untuk mengoptimalkan performa dan paralelisme, mikrokontroler modern umumnya menggunakan arsitektur Harvard (bus untuk memori dan program dan data terpisah). Jika dilihat lebih detail pada bagian pemroses mikrokontroler ini, terdapat unit CPU utama untuk memastikan eksekusi program. CPU juga dapat mengakses memori, melakukan kalkulasi, pengontrolan dan dan penanganan interupsi, sehingga dihasilkan performa yang tinggi. Hal ini dikarenakan instruksi pada memori program dieksekusi dengan single level pipelining, dengan demikian, pada saat sebuah instruksi dieksekusi, instruksi berikutnya dapat diakses dari memori program. Konsep ini memungkinkan instruksi-instruksi dieksekusi pada setiap siklus clock.


Gambar Arsitektur Mikrokontroler AVR

Fast-access Register File berisi 32x8 bit register keperluan umum dengan waktu akses hanya membutuhkan sebuah siklus detak. Teknik ini membuat operasi ALU (Arithmetic Logic Unit) hanya membutuhkan 1 siklus. Lebih dahsyat lagi, 6 dari 32 register dapat digunakan sebagai 3 buah 16 bit indirect address register pointer untuk pengalamatan ruang data. 1 address pointer dapat digunakan sebagai address pointer untuk look up table pada memori flash program. Setiap alamat memori program berisi instruksi sebesar 16 atau 32 bit.
Pada mikrokontroler AVR ATmega 16, pin PD0 dan PD1 digunakan untuk komunikasi serial USART (Universal Synchronous and Asynchronous Serial Receiver and Transmitter) yang mendukung komunikasi full duplex ( komunikasi 2 arah). Gambar berikut ini menampilkan model hubungan antara mikrokontroler dengan PC melalui format serial.



Gambar Model pengkonversi level serial


Untuk mengirimkan data serial menggunakan CodeVision AVR, bisa menggunakan fungsi putchar, puts atau menggunakan I/O register UDR. Konfigurasi yang umum untuk komunikasi dengan baud rate 9600bps (bit per second) menggunakan kristal 4 MHz, seperti contoh berikut:
unsigned char judul[]={"ROBOTIKA"};
//Inisialisassi USART
//Format frame; 8 data, 1 stop bit, no parity
//USART Receiver & Transmitter ON
//USART mode: Asinkron
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0X00; // Baud rate 9600bps, pada kristal 4 MHz
UBRRL=0X19;
puts(judul); //tampilkan pesan dan ganti baris
UDR=’O’;
Jika menggunakan sistem polling, maka flag RXC(USART Receive Complete, UCSRA.7) akan diperiksa. Jika flag RXC =1 berarti ada data pada I/O register UDR yang diterima dan belum dibaca, sebaliknya maka ada data yang diterima sudah dibaca/belum ada data baru. Blok diagram USART dapat dilihat pada gambar di bawah ini:

Gambar Blok diagram USART
Pada gambar di atas, terdapat 3 buah register yaitu UCSRA, UCSRB dan UCSRC. Clock generation logic membangkitkan clock untuk transmitter dan receiver. USART ini mendukung 4 mode operasi clock yaitu Normal Asynchronous, double speed asynchronous, master synchronous dan slave synchronous. Bit UMSEL pada USART Control And Status Register C (UCSRC) memilih operasi asinkron atau sinkron tersebut.

MEMPROGRAM ROBOT LINE FOLLOWER

Ada banyak program yang dapat digunakan sebagai editor dan compiler program mikrokontroler. Yang paling mudah dikenal ialah CodeVision AVR yang berbasis bahasa C. Oleh karena itu pada buku ini menggunakan program tersebut selain Bascom AVR yang jauh lebih mudah. Berikut ini contoh pemrograman dasar mikrokontroler pada robot menggunakan kit mikrokontroler handal ST-8535 USB Version yang mendukung pemrograman melalui USB, silahkan pesan di sini.

Gambar di bawah menampilkan skematik sistem minimum mikrokontroler AVR standar.



Gambar Contoh skema rangkaian sistem minimum AVR (ST 8535 Delta)


Gambar Kit Mikrokontroler AVR (ST-8535 USB version)
Anda perlu memperhatikan kemampuan driver aktuator jika ingin robot Anda memiliki kemampuan gerak yang tinggi, misalnya apakah cukup driver dengan beban maksimal 1A, 2 A atau 5A bahkan lebih, gambar berikut menampilkan contoh driver motor DC L293D dan L298N yang umum digunakan untuk mobile robot.



(a) (b)
Gambar Driver Motor DC 1A(1) dan 2A (b)
Sebagai contoh pertama, cobalah Anda memprogram robot line follower, yaitu robot yang mengikuti garis menggunakan sensor garis berbasis Infra red. Sensor terpasang pada Port C.0 dan C.1, sedangkan driver motor DC dipasang pada Port B.0, B1. B.2 dan B.3. Blok diagram dari robot line follower sederhana dapat dilihat pada gambar di bawah:



Gambar Blok diagram robot line follower dari e-Technology Center

Karena menggunakan motor DC sebagai aktuator, maka diperlukan driver motor DC. Berikut ini data cara menggerakkan motor DC pada kit driver motor DC seperti SPC Driver Motor DC :

Tabel 1. Penggunaan SPC DC Motor
Pin Nama Seting Fungsi
S1 Run 1 Stop /Run Untuk menjalankan atau mematikan motor DC 1
Stop berlogika 1
Run berlogika 0
S2 Dir 1 CW/CCW Untuk arah putaran motor DC 1
CW berlogika 1
CCW berlogika 0
S3 Run 2 Sto/Run Untuk menjalankan atau mematikan motor DC 2
Stop berlogika 1
Run berlogika 0
S4 Dir 2 CW/CCW Untuk arah putaran motor DC 2
CW berlogika 1
CCW berlogika 0

Setelah rangkaian dirakit, isilah program mikrokontroler tersebut menggunakan Codevision AVR, dengan menggunakan kode berikut ini :

Linefollower.c:
// Program Robot Line Follower Berbasis
// AVR Atmega8535 dan sensor Infrared
#include
#include

void main(void)
{
DDRB=255;
PORTB=255;
DDRC=0;
PORTC=0;
while(1)
{
if (PINC.0==0 && PINC.1==0) //maju
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
delay_ms(20);
}
else if (PINC.0==1 && PINC.1==0)// belok kanan
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
delay_ms(100);
}
else if (PINC.0==0 && PINC.1==1) //belok kiri
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
delay_ms(100);
}

else //mundur
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
delay_ms(20);
}}}

Setelah program diisi ke mikrokontroler, cobalah dijalankan pada jalur berwarna hitam, robot harus mampu mengikuti track tersebut, pengaturan ketinggian sensor sangat mempengaruhi sensitifitas sensor garis tersebut. Untuk mengatur kecepatan putar motor dapat digunakan teknik PWM (Pulse Width Modulation). Hasil robot dapat dilihat pada gambar di bawah :



Gambar Robot line follower yang sukses dijalankan.

MEMPROGRAM ROBOT AVOIDER

Contoh berikutnya ialah penggunaan sensor jarak pada robot. Langkah-langkah perakitan robot avoider ini :
1. Siapkan perangkat yang dibutuhkan :
• System mikrokontroler AVR
• Driver DC Motor
• Roda trolley
• Sensor jarak Sharp GP2D12
Programmer yang digunakan dapat berbasis USB atau Port Paralel dan serial. Hubungkan keluaran sensor Sharp GP2D12 di port A.0. Berikut ini blok diagram sistem :


Gambar Blok diagram robot avoider

RobotAvoider.c:
// Percobaan baca data sensor jarak Sharp GP2D12
// Untuk Robot Avoider (Penghindar halangan)
// SPC DC Motor di Port B.0,B.1, B.2 dan B.3
// Sensor Jarak Sharp GP2D12 di Port A.0
// pasang LCD 2x16 di port C

#include
#include
#include
// include the LCD driver routines
#include

#define ADC_VREF_TYPE 0x60
flash unsigned char string1[]={"data adc: %d; "};
// Baca 8 bit terpenting
unsigned char read_adc(unsigned char adc_input) {
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Mulai konversi ADC
ADCSRA|=0x40;
// Tunggu konversi ADC selesai
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm


void main(void) {
// Inisialisasi Port B dan D sebagai output
PORTB=0xFF;
DDRB=0xFF;
PORTD=0xFF;
DDRD=0xFF;
// initialize the LCD for
// 2 lines & 16 columns
lcd_init(16);

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
// ADC initialization
// ADC Clock frequency: 31,250 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
// Menggunakan 8 bit data
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
SFIOR&=0x1F;
while (1)
{
PORTD=read_adc(0); // Baca data sensor di
//PA.0
printf(string1,PORTD); //Tampilkan di
// Hyperterminal PC
if (PORTD<100)
{
PORTB=10; // Maju
lcd_gotoxy(0,1);
// tampilkan pesan
lcd_putsf("Maju");
delay_ms(100;
}
else
{
PORTB=0; // Mundur
delay_ms(100);
PORTB=1; //Belok kanan
lcd_gotoxy(0,1);
// tampilkan pesan
lcd_putsf("Belok Kanan");
delay(ms(50);

}
};
}

Sensor jarak mengeluarkan tegangan analog yang sesuai dengan jarak yang terukur, meskipun kekurangan sensor infrared ini ialah tidak linear, oleh mikrokontroler tegangan analog tersebut dirubah menjadi data digital untuk kemudian nilainya dibandingkan dengan program, apakah nanti harus maju, belok atau mundur. Lalu mikrokontroler memberikan sinyal tertentu ke driver motor DC agar menggerakkan motor DC sesuai dengan yang telah kita tentukan di program.

0 komentar: