Kuliah ini membahas tentang pemrograman mikrokontroler untuk aplikasi instrumen kelautan. Terdapat penjelasan mengenai bahasa C, flow control, fungsi, input output, dan contoh aplikasi pengontrol ROV menggunakan mikrokontroler dan beberapa tombol.
1. Kuliah Instrumentasi Kelautan
Pemrograman Microcontroller
Muhammad Iqbal
barcode_bima@yahoo.co.id
Laboratorium Instrumentasi dan Telemetri Kelautan
Departemen Ilmu dan Teknologi Kelautan
Institut Pertanian Bogor @2009
2. 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
4. 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 <>
5. • 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;
6. • 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
7. 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
8. • Switch
switch(expression)
case constant expression1: statements
case constant expression2: statements
case constant expression3: statements
default: statements
9. • Loops-While, For dan Do-While
while (expression)
{
statements or do stuff
}
for (expression1;expression2;expression3)
{
statements or do stuff
}
10. do
{
statements or do stuff
} while (expression)
11. 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);
…
}
12. 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 */
};
}
14. Hayuuuk kita sedikit berkhayal
ingin membuat
pengkontrol ROV yaitu
tombol
maju, mundur, belok kiri,
belok kanan
15. Bahan yang Tersedia
• Microcontroller ATMega8535
• 4 buah tombol switch
• 2 buah motor DC
• IC L293D
16. 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
17. /* 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
}
}
18. 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
19. 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
}
}
20. 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
26. Penutup
• Explore lagi tentang bahasa C
• Explore lagi tentang Hardware Microcontroller
• Selamat berkreasi lebih
-Terima Kasih-
27. 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
28. • 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
evaluation ditambah 1
29. 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
30. 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