Kuliah Instrumentasi Kelautan
Pemrograman Microcontroller Muhammad Iqbal
[email protected]
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 oleh compiler, tanda ini bisa 1 atau lebih baris */ • Include files ex. #include
#include #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) statemen1 else statemen2 Atau 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) { 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 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
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 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 Kanan
0
0
1
0
Program tadi menjadi #include 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 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(); //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 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
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 evaluation
X++,y++
Mulanya x ditambah 1, kemudian y ditambah 1
Relational and Logical Operators Operator
Nama
Contoh
Penjelasan
>
Lebih besar dari
X>y
X lebih besar dari y
>=
Lebih besar atau sama dengan
X>=y
X lebih besar sama dengan y
<
Lebih kecil dari
X
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