pemrograman mikrokontroller
DESCRIPTION
TRANSCRIPT
Pemrograman Microcontroller
Kuliah Instrumentasi Kelautan
Muhammad Iqbal
Laboratorium Instrumentasi dan Telemetri Kelautan
Departemen Ilmu dan Teknologi Kelautan
Institut Pertanian Bogor @2009
Apa yang dibutuhkan?
• Board Microcontroller
• Program Penulis => notepad, AVR Studio, BASCOM AVR, CodeVision AVR dll
• Compiler: sangat bergantung bahasa yang digunakan : Assembly, C, BASIC, PASCAL dll
• Downloader dan programnya: alat dan program yang digunakan untuk mendownload program dari komputer ke microcontroller
Diagram Proses Pemrograman Microcontroller
Introduction to C Language
• Comments => menggunakan tanda “//” atau/* ini komentar tidak di eksekusi olehcompiler, tanda ini bisa 1 atau lebih baris */
• Include files
ex. #include <avr/io.h>
#include <avr/delay.h>
#include adalah preprocessor directive (pengarah) yang menginstruksikan compiler mencari file didalam tanda <>
• Expression, Statements dan Blocks
Expression: kombinasi dari variable, operators dan function sehingga menghasilkan satu hasil(value)
PORTD=0xFF-counter++
Statements: kontrol aliran program berdasarkan keywords, expressions dan ataustatement lain.
TempInCelcius=5*(TempInFahrenheit-32)/9;
• Operators
simbol yang memerintahkan compiler untuk melakukan sesuatu misalnya “=“ menyatakan sama dengan sehingga misal DDRB=0xFF memerintahkan compiler untuk membuat nilai DDRB menjadi 0xFF atau “++” pada counter++ memerintahkan compiler menambahkan 1 nilai pada variable counter
Flow Control• If-Else dan Else-If
if (expression)statemen1
else statemen2
Atauif (expression)
statemen1else if (expression2)
statemen2else if (expression3)
statemen3else
statemen4
• Switch
switch(expression)
case constant expression1: statements
case constant expression2: statements
case constant expression3: statements
default: statements
• Loops-While, For dan Do-While
while (expression)
{
statements or do stuff
}
for (expression1;expression2;expression3)
{
statements or do stuff
}
do
{
statements or do stuff
} while (expression)
Function• Is encapsulates a computation• Ok learn by sample • int dosomething (int x, int y, int z)
{int a=0;int b=x+y+z-12;//do stuff
}Selanjutnya.. Di main () program
…..int main() {int a;….a=dosomething(c,d,e);…}
Now Implement to Microcontrollersekedar intro
• Input Output (I/O)int main() {
DDRB=0xff; PORTB=0xff;DDRC=0x00;PORTC=0x00;#asm (“nop”)while (1)
{PORTB.0=PINC.0; /*membaca nilai PINC.0 dan
dan memberikan hasilnya ke PORTB.0 */};
}
Jokes
Hayuuuk kita sedikit berkhayal
ingin membuatpengkontrol ROV yaitu
tombol
maju, mundur, belok kiri, belok kanan
Bahan yang Tersedia
• Microcontroller ATMega8535
• 4 buah tombol switch
• 2 buah motor DC
• IC L293D
Detail of Scenario
• Tombol 1: tombol maju
• Tombol 2: tombol mundur
• Tombol 3: tombol belok kiri
• Tombol 4: tombol belok kanan
• Scenario:Gerak Motor 1 Motor 2
Maju CW Hidup CW Hidup
Mundur CCW Hidup CCW Hidup
Belok Kiri CW Hidup Mati
Belok Kanan Mati CW Hidup
#include <avr/mega8535.h>int void main(){DDRB=0x00; // portb sebagai masukan
PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3while(1) {If (PINB==0x01) { //statement maju} else if (PINB==0x02) { // statement mundur} else if (PINB==0x04) { // statement belok kiri} else if (PINB==0x08) { // statement belok kanan} else { // statement ROV diam}}
/* pertama alur kasar program */
Konfigurasi motor
• Motor Ada di PORTC
sesuaikan dengan pin IC L293D misal saja: PORTC 0 dan 1: motor 1 , dan PORTC 2 dan 3 : motor 2 sehingga setiap gerak di definisikan menjadi :
Gerak PORC.0 PORTC.1 PORTC.2 PORTC.3
Maju 1 0 1 0
Mundur 0 1 0 1
Belok kiri 1 0 0 0
BelokKanan
0 0 1 0
Program tadi menjadi
#include <avr/mega8535.h>int void main(){
DDRB=0x00; // portb sebagai masukanPORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3DDRC=0xff;PORTC=0x00;while(1) {If (PINB==0x01) { PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; //maju} else if (PINB==0x02) {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; //mundur} else if (PINB==0x04) {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; //belok kiri} else if (PINB==0x08) {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; //belok
kanan} else { PORTC=0x00; //ROV diam}}
Rasanya Program tadi ko rumitkelihatanya
• Bagaimana jika menggunakan “function”
• Beberapa fungsi yang ingin saya buat
– Fungsi maju,
– Fungsi mundur,
– Fungsi belok_kiri,
– Fungsi belok_kanan
Let’s write
• Void maju() {PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; }
• Void mundur() {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; }
• Void belok_kiri() {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; }
• Void belok_kanan() {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; }
Gerak PORC.0 PORTC.1 PORTC.2 PORTC.3
Maju 1 0 1 0
Mundur 0 1 0 1
Belok kiri 1 0 0 0
Belok Kanan 0 0 1 0
Program menjadi#include <avr/mega8535.h>void maju() {PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; }void mundur() {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; }void belok_kiri() {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; }void belok_kanan() {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; }
int void main(){
DDRB=0x00; // portb sebagai masukanPORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3DDRC=0xff;PORTC=0x00;while(1) {If (PINB==0x01) {
maju(); //statement maju} else if (PINB==0x02) {
mundur(); // statement mundur} else if (PINB==0x04) {
belok_kiri() ; // statement belok kiri} else if (PINB==0x08) {
belok_kanan(); // statement belok kanan} else { PORTC=0x00; // statement ROV diam}}
Bagaimana jika menggunakan switch#include <avr/mega8535.h>void maju() {PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; }void mundur() {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; }void belok_kiri() {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; }void belok_kanan() {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; }
int void main(){
DDRB=0x00; // portb sebagai masukanPORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3DDRC=0xff;PORTC=0x00;while(1) {Switch (PINC)Case 0x01 : maju();Case 0x02 : mundur();Case 0x04: belok_kiri();Case 0x08: belok_kanan();Default: PORTC=0x00;}
find your own style of programming
Good reference
Penutup
• Explore lagi tentang bahasa C
• Explore lagi tentang Hardware Microcontroller
• Selamat berkreasi lebih
-Terima Kasih-
Lampiran
• Arithmetic Operators
Operator Nama Contoh Penjelasa
* Multiplication x*y Perkalian x dan y
/ Division x/y Pembagian x dan y
% Modulo x%y Sisa x dibagi y
+ Addition x+y x tambah y
- Substraction x-y x dikurangi y
++ Increment x++ x=x+1
-- Decrement x-- x=x-1
- Negation -x Kali x dengan -1
+ Unary plus +x x adalah positif
• Data Acces and Size Operators
Operator Nama Contoh Penjelasan
[] Elemen array X[6] Elemen ke-7 dari x
. Member selection PORTD.2 Bit 2 dari PORTD
-> Member selection pStruct->x Anggota x dari struktur pStruct
* Indirection *p Lokasi memori dari P
& Address of &x Alamat dari varible x
• Miscellaneous OperatorsOperator Nama Contoh Penjelasan
() Function Wait(10) Panggil fungsi wait
(type) Type Cast (double)x Ubah variable x jadi double
?: conditional X?y:z Jika x tidak 0 evaluasi y, sebaliknyaevalusi z
, Seqeuntialevaluation
X++,y++ Mulanya x ditambah 1, kemudian y ditambah 1
Relational and Logical OperatorsOperator Nama Contoh Penjelasan
> Lebih besar dari X>y X lebih besar dari y
>= Lebih besar atau samadengan
X>=y X lebih besar sama dengany
< Lebih kecil dari X<y X lebih kecil dari y
<= Lebih kecil atau sama dengan X<=y X lebih kecil atau samadengan
== Sama dengan (logic) X==y Jika x dan y sama makabenar (1), jika tidak salah
(0)
!= Tidak sama dengan X!=y Jika x dan y tidak samamaka benar, jika sama
maka salah
! Logical not !x 1 jika x=0 , otherwise 0
&& Logical AND X&&y X and y
|| Logical OR X||y X OR y
Bitwise OperatorsOperator Nama Contoh Penjelasan
~ Bitwise complement NOT ~x ubah bit 1 ke 0 dan bit 0 ke 1
& Bitwise AND X&y Bitwise X and Y
| Bitwise OR X|y Bitwise x OR y
^ Bitwise exclusive OR X^y Bitwise x XOR y
<< Left shift X<<2 Geser ke kiri 2 bit dari x
>> Right shift X>>2 Geser ke kanan 2 bit dari x