30
Pemrograman Microcontroller Kuliah Instrumentasi Kelautan Muhammad Iqbal Laboratorium Instrumentasi dan Telemetri Kelautan Departemen Ilmu dan Teknologi Kelautan Institut Pertanian Bogor @2009 [email protected]

Pemrograman Mikrokontroller

  • Upload
    iqbalsun

  • View
    2.682

  • Download
    14

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Pemrograman Mikrokontroller

Pemrograman Microcontroller

Kuliah Instrumentasi Kelautan

Muhammad Iqbal

Laboratorium Instrumentasi dan Telemetri Kelautan

Departemen Ilmu dan Teknologi Kelautan

Institut Pertanian Bogor @2009

[email protected]

Page 2: Pemrograman Mikrokontroller

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

Page 3: Pemrograman Mikrokontroller

Diagram Proses Pemrograman Microcontroller

Page 4: Pemrograman Mikrokontroller

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

Page 5: Pemrograman Mikrokontroller

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

Page 6: Pemrograman Mikrokontroller

• 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

Page 7: Pemrograman Mikrokontroller

Flow Control• If-Else dan Else-If

if (expression)statemen1

else statemen2

Atauif (expression)

statemen1else if (expression2)

statemen2else if (expression3)

statemen3else

statemen4

Page 8: Pemrograman Mikrokontroller

• Switch

switch(expression)

case constant expression1: statements

case constant expression2: statements

case constant expression3: statements

default: statements

Page 9: Pemrograman Mikrokontroller

• Loops-While, For dan Do-While

while (expression)

{

statements or do stuff

}

for (expression1;expression2;expression3)

{

statements or do stuff

}

Page 10: Pemrograman Mikrokontroller

do

{

statements or do stuff

} while (expression)

Page 11: Pemrograman Mikrokontroller

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

Page 12: Pemrograman Mikrokontroller

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

}

Page 13: Pemrograman Mikrokontroller

Jokes

Page 14: Pemrograman Mikrokontroller

Hayuuuk kita sedikit berkhayal

ingin membuatpengkontrol ROV yaitu

tombol

maju, mundur, belok kiri, belok kanan

Page 15: Pemrograman Mikrokontroller

Bahan yang Tersedia

• Microcontroller ATMega8535

• 4 buah tombol switch

• 2 buah motor DC

• IC L293D

Page 16: Pemrograman Mikrokontroller

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

Page 17: Pemrograman Mikrokontroller

#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 */

Page 18: Pemrograman Mikrokontroller

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

Page 19: Pemrograman Mikrokontroller

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

Page 20: Pemrograman Mikrokontroller

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

Page 21: Pemrograman Mikrokontroller

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

Page 22: Pemrograman Mikrokontroller

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

Page 23: Pemrograman Mikrokontroller

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

Page 24: Pemrograman Mikrokontroller

find your own style of programming

Page 25: Pemrograman Mikrokontroller

Good reference

Page 26: Pemrograman Mikrokontroller

Penutup

• Explore lagi tentang bahasa C

• Explore lagi tentang Hardware Microcontroller

• Selamat berkreasi lebih

-Terima Kasih-

Page 27: Pemrograman Mikrokontroller

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

Page 28: Pemrograman Mikrokontroller

• 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

Page 29: Pemrograman Mikrokontroller

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

Page 30: Pemrograman Mikrokontroller

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