Upload
iqbalsun
View
2.688
Download
14
Embed Size (px)
DESCRIPTION
Citation preview
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