Anda di halaman 1dari 30

Kuliah Instrumentasi Kelautan

Pemrograman Microcontroller
Pemrograman Microcontroller

Muhammad Iqbal

barcode_bima@yahoo.co.id

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

Diagram Proses Pemrograman Microcontroller
Introduction to C Language
Introduction to C Language

Comments => menggunakan tanda “//” atau

/* ini komentar tidak di eksekusi oleh

compiler, 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 atau statement 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)

Atau

statemen1

else

statemen2

if (expression)

statemen1

else if (expression2)

statemen2

else if (expression3)

statemen3

else

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)

{

}

Selanjutnya

int a=0; int b=x+y+z-12; //do stuff

Di main () program

int main() { int a; ….

a=dosomething(c,d,e);

}

Now Implement to Microcontroller sekedar 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

Jokes
Jokes

Hayuuuk kita sedikit berkhayal

ingin membuat

pengkontrol 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

/* pertama alur kasar program */

#include <avr/mega8535.h> int void main()

{

DDRB=0x00; // portb sebagai masukan

PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3 while(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

}

}

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

Belok

0

0

1

0

Kanan

Program tadi menjadi

#include <avr/mega8535.h> int void main()

{

DDRB=0x00; // portb sebagai masukan

PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3

DDRC=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 rumit

kelihatanya

Bagaimana jika menggunakan “function”

Beberapa fungsi yang ingin saya buat

Fungsi maju,

Fungsi mundur,

Fungsi belok_kiri,

Fungsi belok_kanan

Let’s write

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

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; }

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 masukan

PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3

DDRC=0xff;

PORTC=0x00;

while(1) { If (PINB==0x01) {

maju();

} else if (PINB==0x02) { mundur();

} else if (PINB==0x04) { belok_kiri() ;

} else if (PINB==0x08) {

//statement maju

// statement mundur

// statement belok kiri

 

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 masukan

PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3

DDRC=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

find your own style of

programming

Good reference

Good reference
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 Operators

Operator

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, sebaliknya

evalusi z

,

Seqeuntial

X++,y++

Mulanya x ditambah 1, kemudian y ditambah 1

evaluation

Relational and Logical Operators

Operator

Nama

Contoh

Penjelasan

>

Lebih besar dari

X>y

X lebih besar dari y

>=

Lebih besar atau sama

X>=y

X lebih besar sama dengan

dengan

y

<

Lebih kecil dari

X<y

X lebih kecil dari y

<=

Lebih kecil atau sama dengan

X<=y

X lebih kecil atau sama dengan

==

Sama dengan (logic)

X==y

Jika x dan y sama maka

benar (1), jika tidak salah

(0)

!=

Tidak sama dengan

X!=y

Jika x dan y tidak sama maka 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 Operators

Operator

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