Anda di halaman 1dari 79

PROGRAMMING ROBOT USING

BASCOM AVR & CODEVISION AVR


Trend Industri Elektronika dan TI

• Aplikasi berbasiskan controller/mikrokontroler


• Aplikasi harus mendukung antarmuka dengan
USB
• Aplikasi dapat dikontrol/dipantau dengan
software Visual
• Aplikasi harus kompak dan sekecil mungkin
• Daya yang dibutuhkan rendah
• Harga harus kompetitif Solusi
?
Peluang besar bagi yang kompeten pada Embedded System
Peluang karir TI berbasis Elektronika
• Developer aplikasi embedded dan kontrol
(Sistem kontrol, robotika, instrumentasi, Monitoring, PDA, Aplikasi
SMS dll)

• Pengusaha Aplikasi Elektronika (Peluang besar !)


(System minimum, kit-kit elektronika, produk industri dll).

• Pengajar dan Peneliti aplikasi embedded dan kontrol


(Robotika, Instrumentasi, sistem kontrol, Wireless application dll)

• Engineer /Teknisi profesional

Menggunakan Software : Visual Basic .net, C++, Visual C# .Net,


Java, assembly dll.
Kunci Sukses Menguasai Elektronika
dan TI
Software :
• Assembly + C/C++/ Bascom AVR
• Pemrograman & Interfacing Mikrokontroler
• Visual Basic .Net 2010 dan Arduino
• Visual C# .Net 2010 dan Raspberry Pi 3
• Java (J2SE, J2EE dan J2ME)
• Sql Server/Oracle 10g dan MySql

Hardware:
• Pemrograman dan Interfacing mikrokontroler dan PLC
• Memahami dan familiar dengan rangkaian
Bidang Elektronika Saat ini
Mengapa Mikrokontroler ?
Chip teknologi terkini yang mampu melaksanakan tugas-tugas
kontrol sistem, karena di dalamnya umumnya sudah mencakup:
• CPU
• RAM
• ROM
• EEPROM (Tidak semua)
• I/O (Serial /paralel, I2C)
• Timer

Sehingga dimungkinkan membangun Aplikasi


single chip(Aplikasi dengan hanya 1 buah
chip)
MiKrokontroler Umum
Berbagai Mikrokontroler
• Mikrokontroler ATMEL
contoh: 89C51,89S51,89S8252,AVR 89S8535,
90S2313
• Mikrokontroler PIC
contoh : 16F84A,16F628,16F877A,12F625
• Mikrokontroler Basic Stamp
contoh : BS1, BS2, BS2sx (menggunakan PIC)
• Mikrokontroler Raspberry Pi 3
• Mikrokontroler Motorolla
contoh: 68HC11, 6800
• Mikrokontroler Arduino Uno
Aplikasi Mikrokontroler
• Robotika
• Home remote system
• Industrial control
• Kontrol alat over SMS
• Pengontrol mesin pertanian
• Aplikasi hiburan seperti Games dan DVD Player
• Antarmuka PC
• dll
Pertimbangan memilih mikrokontroler

• Ketersediaan IC dan programmer


• Harga
• Banyaknya pengguna di lingkungan Anda
• Mendukung ADC (Pengubah analog ke digital)
dan fitur lainnya
• Bahasa pemrograman assembly/C/Basic
MIKROKONTROLER AVR ATMEGA
8535

Mikrokontroler terdiri dari :

•Port I/O untuk kirim-terima data


( umunya 8 bit dan serial)
•Port sumber detak
•Port serial
•Channel ADC
•Pin sumber detak
Mikrokontroler AVR ATmega8535
• Saluran I/O sebanyak 32 buah, yaitu Port A, Port
B, Port C, dan Port D.
• ADC (Analog to Digital Converter) 10 bit
sebanyak 8 channel.
• SRAM sebesar 512 byte.
• Memori Flash sebesar 8 Kb dengan kemampuan
Read While Write dan dapat ditulis ulang
10.000x
• EEPROM sebesar 512 byte yang dapat
diprogram saat operasi dan dapat ditulis ulang
100.000x
• Mencapai 16MIPS pada 16 MHz
Perbandingan Mikro ATMEL
Flash Memory EEPROM
Type RAM

4 KByte No
AT89C51/ AT89S51 8 X 128 Byte

8 KByte No
AT89C52/ AT89S52 8 X 256 Byte

20 KByte No
AT89C55 8 X 256 Byte

12 KByte No
AT89S53 8 X 256 Byte

8 KByte 2 KByte
AT89S8252 8 X 256 Byte

8KByte 512B
Atmega 8535 512
SISTEM MINIMUM MIKROKONTROLER
U1

1
PB0 (XCK/T0) PA0 (ADC0)
40 Kelip.bas
2 39
PB1 (T1) PA1 (ADC1)
3
PB2 (AIN0/INT2) PA2 (ADC2)
38 ‘Konfigurasi port B sebagai output
4 37
5
PB3 (AIN1/OC0) PA3 (ADC3)
36 Config portb=output
PB4 (SS) PA4 (ADC4)
6 35
PB5 (MOSI) PA5 (ADC5)
LED 7 34
8
PB6 (MISO) PA6 (ADC6)
33
Do ’pengulangan
PB7 (SCK) PA7 (ADC7) Portb=255 ‘hidup semua
14 22 Waitms 100 ’delay 100ms
PD0 (RXD) PC0 (SCL)
15 23
16
PD1 (TXD) PC1 (SDA)
24 Portb=0 ’mati semua
PD2 (INT0) PC2
17
PD3 (INT1) PC3
25 Waitms 100 ’delay 100ms
18 26
19
PD4 (OC1B) PC4
27
Loop
PD5 (OC1A) PC5
20 28
PD6 (ICP) PC6 (TOSC1)
21 29
PD7 (OC2) PC7 (TOSC2)
VCC
9 10
C1
RESET VCC
30 Terdapat 4 PORT sebagai
AVCC
12
XTAL2 AREF
32 I/O yaitu PA, PB, PC dan
13
Cap XTAL1
31 PD
2

18pF GND
11
GND
C2
1

ATmega8535
Cap 11.0592MHz
18pF
Pengubah Analog ke Digital
VCC
VCC
U1
Q1
R3 1 40 R1 R? ADC.bas
PB0 (XCK/T0) PA0 (ADC0)
2N3904
390 2
3
PB1 (T1) PA1 (ADC1)
39
38
1K
10K
Start Adc
PB2 (AIN0/INT2) PA2 (ADC2)
8 X LED
4
5
PB3 (AIN1/OC0) PA3 (ADC3)
37
36
Dim W As Word
PB4 (SS) PA4 (ADC4)
R4 6
PB5 (MOSI) PA5 (ADC5)
35 Channel = 0
390 7 34
8
PB6 (MISO)
PB7 (SCK)
PA6 (ADC6)
PA7 (ADC7)
33 ‘Baca data di channel
14
PD0 (RXD) PC0 (SCL)
22 Do
15 23
16
PD1 (TXD) PC1 (SDA)
24 W = Getadc(channel)
PD2 (INT0) PC2
17
18
PD3 (INT1) PC3
25
26
‘kirim ke port serial
PD4 (OC1B) PC4
19
PD5 (OC1A) PC5
27 Print "Channel " ; Channel ; " value " ;
20 28
21
PD6 (ICP)
PD7 (OC2)
PC6 (TOSC1)
PC7 (TOSC2)
29 W
VCC
9
RESET VCC
10 Portb=w ‘keluarkan ke port B
30
C1
12
AVCC
32 Loop
XTAL2 AREF
Cap
13
XTAL1
31
End
2

18pF GND
11
GND
C2
1

ATmega8535
Cap 11.0592MHz
18pF
SINGLE CHIP SOLUTION FOR ROBOT

2.4 GHz RF

Ext. Serial EEPROM

Serial Com
CMUCam
Speed Encoder

Other I/O

Line Detector
32kB Flash, 2kB SRAM,
1 KB EEPROM,
2 cycle hardware multipler
Bascom AVR (WWW.MCSELEC.COM)
• Bahasa basic
• Paling mudah
• Mendukung pengisian mikro melalui port
Paralel dan serial
Program Kelap Kelip

Kelip.bas:
Config portb=output ‘konfigurasi port B sebagai output
Do
Portb=255 ‘aktifkan semua karena 8 bit
MSB D7 D6 D5 D4 D3 D2 D1 D0 LSB
1 1 1 1 1 1 1 1

Waitms 500 ‘delay 500ms


Portb=0
Wait 1 ‘delay 1 detik ‘
Loop
Langkah mengisi program ke Mikro
• Hubungkan kabel ISP ke Port Paralel Komputer
• Hubungkan ujung kabel ISP ke mikro
• Hubungkan catu daya ke mikro
• Buka Bascom AVR
• Ketik program
• Simpan program
• Kompilasi
• Isi program ke mikro
Terima input dari suatu port
IO.bas:
’Program terima input dari port D keluarkan ke portB

Config portb =output


Config portd=input ‘ port D sebagai input
do
Portb=pind ‘data di port D dikirim ke Port B
Loop
Deteksi input pada suatu pin
Deteksi.bas
’Program mendeteksi input pada suatu pin

Config portB=output
Config pinD.6 =input
Dim w as byte
Do
W=pinD.6 ‘Input di Pin D.6 (1/0)
Portb=w
loop
Set pin
Setpin.bas

’program mengeset bit pada suatu pin di suatu


port
Config portb=output

Portb.1=1 ‘high
Portb.3=1
Portb.5=1
Portb.6=0 ‘low
Rotate
Rotate all bits one place to the left or right.

Dim A As Byte
Config portb =output
Portb=1
Do
Portb = 1
For A = 1 To 8 ‘looping
Rotate Portb , Left 'rotate bits left
Wait 1 ‘delay 1 detik
Next
Shift
Shift all bits one place to the left or right.

Dim a as Byte
a = 128
Shift A , Left , 2
Print a '0
End
Dasar Kendali

kendali.bas:
Config Portc= Input
Config Porta= Output
Dim A As Byte
 
Do ‘lakukan operasi DO..LOOP
A = Pinc.0 ‘pinD.7 -> A
If A = 1 Then ‘ Jika saklar di PinD.7 aktif
Portb = 0 ‘portb = Low
End If ‘akhiran If
If A = 0 Then
Portb=255
End If ‘

Loop
SELECT ..CASE (Penentuan Kondisi)

Dim X As Byte
Do
Input "X ? " , X ‘terima input tampung di X
Select Case X
Case 1 To 3 : Print "1 , 2 or 3 will be ok"
Case 4 : Print "4"
Case Is > 10 : Print ">10"
Case Else : Print "no"
End Select
Loop
End
Aritmatika
Dim X As Single , Y As Single , Result As Single
Dim Z As String * 10

'So this leaves the TRIG functions to be implemented


Input "Enter x " , X 'ask for 2 values
Input "Enter y " , Y

Z = "1234.567"
Result = Val(z) : Print Result
Z = Str(result) : Print Result

'X = 1000.1234
'Y = 5.75
Print "X+Y=" ; : Result = X + Y : Print Result 'calculate
Print "X-Y=" ; : Result = X - Y : Print Result
Print "X/Y=" ; : Result = X / Y : Print Result

If X > Y Then
Print ">"
End If
LCD (Liquid Crystal Display)
Nama Pin Deskripsi Port
NO

1 VCC + 5V VCC
2 GND 0V GND
3 VEE Tegangan Kontras LCD
4 RS Register Select, 0=Input Instruksi, 1=Input Data PD7

5 R/W 1= Read ;0 = Write Ground


6 E Enable Clock PD6
7 D0-D3 Data D0-D3
-
11 D4 Data Bus 4 PC4
12 D5 Data Bus 5 PC5
13 D6 Data Bus 6 PC6
14 D7 Data Bus 7 PC7
15 Anode Tegangan Positif backlight 5V
16 Katode Tegangan Negatif backlight Ground
LCD
dim A As Byte
Config Lcd = 16 * 2 'configure lcd 2baris x 16 karakter
do
cls
Lcd "Hello world." ‘tampilkan pada baris 1
Wait 1
Lowerline ‘ke baris ke 2
Wait 1
Lcd "Shift this." 'display this at the lower line
Wait 1
For A = 1 To 10
Shiftlcd Right geser kanan
Wait 1 'wait a moment
Next
loop
Posisi LCD
Do
Cls 'bersihkan layar lcd
Cursor Blink
Locate 1 , 1 ‘baris 1 kolom 1
Lcd "SmartAVR 8535"
Locate 2 , 1 ‘baris 2 kolom 1
Lcd " ATmega8535“
wait 1
loop
Pulsout
PULSEOUT PORT , PIN , PERIOD

Dim A As Byte
Config Portb = Output 'PORTB all output pins
Portb = 0 'all pins 0
Do
For A = 0 To 7
Pulseout Portb , A , 60000 'generate pulse 60000x1us at 4MHz
Waitms 250 'wait a bit
Next
Loop 'loop for ever
Blok Mobile Robot Sederhaha
Blok Robot Kompleks
Rangkaian Mikro Sederhana
Prinsip Robot Sederhana
Robot Sederhana
Actuator for Robot
FOR COUNTER =1 TO 24
‘turn left ¼ circle
PULSOUT 13, 650
• Servo Cont & Standard PULSOUT 12, 650
PAUSE 20
NEXT

• DC Motor PORTB=2 ‘ right motor


PORTB=1 ‘ left motor
Robot Sederhana AVT
SPC DC Motor
Pin Nama Fungsi
Pada Motor 1
S1 Run 1 Stop berlogika 1, Run berlogika 0
S2 Dir 1 CW berloika 1, CCW berlogika 0

Pada Motor 2
S3 Run 2 Stop berlogika 1, Run berlogika 0
S4 Dir 2 CW berloika 1, CCW berlogika 0
Penerapan Pada Robot
Robot.bas
Config Portb = Output
Dim W As Word
Start ADC
Do
W = Getadc(0) ‘baca sensor jarak
If W < 200 Then ‘jika tdk ada halangan
Portb = 8 ‘maju

Wait 2 ‘delay 2 detik


Else ‘jika ada halangan
Portb = 0 'belok kiri
Wait 2
End If
Loop
Basic Stamp
Led.bs2:
' Lampu LED
' {$STAMP BS2}
' {$PBASIC 2.5}
DO
HIGH 12 ‘beri logika
1
PAUSE 500
LOW 12 ‘beri logika
0
PAUSE 500
LOOP
SENSORS SRF04/8 Ultrasonic Range
Thermal Array Compass
CMUcam Finder
Sensor Sensor

UVtron Flame
detector Photoreflector Lynxmotion Sharp GP2D12 Infrared distance sensor
P5887 director
Contoh pembacaan sensor jarak Ultrasonic SRF04 (3cm -3m)

Infrared GP2D12 (10cm-80cm)

Ultrasonic.bas :
Initialize-Ultrasonic

Distance=US_Front()
If Distance <200 then
InfraredDistance.bas: Portb=8 ‘ Move forward

Do Function US_Front() As Integer


Data=Getadc(0) Portc.0 = 0
If W < 200 Then ‘’ if there is no obstacle Pulseout Portc , 0 , 5
Portb = 8 ‘move forward Pulsein US_Front , Pinc , 1 , 1
End Function
Wait 2 ‘delay 2 second
Sub Initialize_ultrasonic
Else ‘if there is obstacle
Portb = 0 ‘ turn left Config Pinc.0 = Output
Wait 2 Config Pinc.1 = Input
End If End sub
Servo Motor
Gerakan Servo
COUNTER VAR Word
FREQOUT 4,2000,3000 ‘sinyal program start/reset
FOR COUNTER =1 TO 407 ‘gerak maju 10 detik
PULSOUT 13,850 ‘ pin 13 keluarkan sinyal 850
PULSOUT 12,650 ‘ pin 12 keluarkan sinyal 650
PAUSE 20
NEXT
FOR COUNTER =1 TO 24 ‘ belok kiri ¼ putaran
PULSOUT 13, 650
PULSOUT 12, 650
PAUSE 20
NEXT
FOR COUNTER =1 TO 24 ‘ belok kanan ¼ putaran
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
PING
get_sonar : ‘ kode utama
ping =IsLow
PULSOUT ping, trigger
PULSIN ping, isHigh, rawDist
rawDist=rawDist */Scale
rawDist =rawDist/2
RETURN
SRF04
CONFIG ADC = single, PRESCALER = AUTO,
REFERENCE = opt

ADC Running mode. May be SINGLE or FREE.


PRESCALER A numeric constant for the clock
divider. Use AUTO to let the compiler generate
the best value depending on the XTAL
REFERENCE Some chips like the M163 have
additional reference options.
Value may be OFF , AVCC or INTERNAL. See the
data sheets for the different modes.
ADC
ADC.bas
Config Adc = Single , Prescaler = Auto
'Now give power to the chip
Start Adc
'With STOP ADC, you can remove the power from the chip
'Stop Adc
Dim W As Word , Channel As Byte
Channel = 0
'now read A/D value from channel 0
Do
W = Getadc(channel)
Print "Channel " ; Channel ; " value " ; W
Incr Channel
If Channel > 7 Then Channel = 0
Loop
End
LCD
 
Lcd "SMART DataLogger"
Waitms 100
Lowerline
Lcd "e-Technology Center"
Waitms 100
Thirdline
Lcd "Press 1-4"
Waitms 100
Fourthline
Lcd "Press 5 to Go Out"
Waitms 100
Home Third
Home Fourth
Waitms 100
For B = 1 To 15
Shiftlcd Right
Waitms 25
Next
LCD Designer
Sub Displaysuhu()
Cls
Lcd "Suhu:"
Locate 2 , 13
Deflcdchar Print 1 , 12 , 18 , 18 , 12 , 32 , 32 , 32 ,
32
Lcd Chr(1)
Locate 1 , 19
Lcd "C"
Keypad Config Kbd = Portb
Dim B As Byte

'loop for ever


Do
B = Getkbd()
Print B 'when no key is pressed 16 will
‘be returned
Loop
Lcd B
End
7 Segment
Robot Avoider
‘Robot Avoider
Dim A As Byte
Dim B As Byte
Config Portb = Output
Dim W As Byte , Channel As Byte
Declare Sub Bacajarak()
Config Adc = Single , Prescaler = 32 , Reference = Avcc
Enable Adc If W < 150 Then
Enable Interrupts Portb = 10 'maju
Do Waitms 1
call Bacajarak ‘panggil fungsi bacajarak Else
Loop
Portb = 0 'mundur
Waitms 1
Sub Bacajarak()
Portb = 1 'belok kanan
Channel = 0
Waitms 2
W = Getadc(channel)
End If
Start Adc
End Sub
Line Follower
Dim A As Byte
Dim B As Byte
If A = 1 And B = 1 Then
Config Portb = Output
Portb = 10
Config Pinc.0 = Input 'maju
Config Pinc.1 = Input Waitms 5
Dim W As Byte , Channel As Byte End If
Declare Sub Bacajarak()
If A = 1 And B = 0 Then
Portb = 4
Config Adc = Single , Prescaler = 32 , 'belok kanan
Reference = Avcc Waitms 10
Enable Adc End If
Enable Interrupts
Do If A = 0 And B = 0 Then
A = Pinc.0 Portb = 0
'mundur
B = Pinc.1
Waitms 5
End If
Loop
Hexapod Avoider dengan Sharp
GP2D12
Sub Bacajarak()
Dim A As Byte Channel = 0 ‘sensor di ch 0
Dim B As Byte W = Getadc(channel)
Start Adc
Config Portb = Output
If W < 150 Then
Dim W As Byte , Channel As Byte Portb = 10
Declare Sub Bacajarak() Waitms 30
Config Adc = Single , Prescaler = 32 , Else
Reference = Avcc Portb = 5
Enable Adc Waitms 5
Enable Interrupts Portb = 0 ‘mundur
Do Wait 2
Portb = 4 'belok kanan
Call Bacajarak ‘panggil fungsi bacajarak
Wait 1
Loop End If
End Sub
Hexapod Avoider dengan SRF04
Declare Sub Initialize_ultrasonic() Function Ultrasonic_depan() As Integer
Declare Function Ultrasonic_depan() As Integer
Dim Jarakdepan As Integer Portc.0 = 0 '
Dim W As Word Set initial state of trigger pin
Config Portb = Output
Pulseout Portc , 0 , 5
Config Portd = Input ' generate a 5us pulse @ 8 mhz
Config Portc = Output Pulsein Ultrasonic_depan , Pinc , 1 , 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'configurasi ADC ' measure the return pulse
End Function
Start Adc
Call Initialize_ultrasonic
Portb = 2 'mundur dulu
Waitms 500 Sub Initialize_ultrasonic
Do Config Pinc.0 = Output
Jarakdepan = Ultrasonic_depan() Config Pinc.1 = Input
Print "jarak depan :" ; Jarakdepan

End Sub
If Jarakdepan > 40 Then
Portb = 10 'maju
Wait 1
Else

Portb = 0
Waitms 500 'mundur
Portb = 4
Wait 1
End If 'BELOK KANAN
Loop
End
Pemadam Api
Serial

Print “Data yang masuk” ; data


Code Vision AVR
Membuat proyek baru
Konfigurasi Port
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7
DDRD=0x00; // Port D dikonfigurasi sebagai input

DDRB=0; // Port B dikonfigurasi sebagai input


PORTB=0; //internal pull-up aktif

PORTB=PINC; //Semua data di Port C dikirim ke Port B


PORTB.0=PINC.0 ; //Data di Port C.0 dikirim ke Port B.0
Proyek baru
IO1.c:
// Mencoba Membuat Program CodeVision AVR
// Percobaan Output dan delay pada Port B
 
#include <mega16.h>//menyertakan library file mega16
#include <delay.h> //menggunakan delay jadi librarynya harus digunakan
 
void main(void) { //Program Utama bertipe data void
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7
PORTB=255; //Semua Port B mengeluarkan logika 1, jadi semua LED mati

// Program akan berulang terus


while (1) {
PORTB.0=0; //LED PB0 menyala
PORTB.2=0; //LED PB2 menyala
delay_ms(500); //Delay 0.5 detik
PORTB.0=1; //LED PB0 mati
PORTB.2=1; //LED PB2 mati
delay_ms(1000); //Delay 1 detik
}; //akhir looping
} //Akhir program utama
Kompilasi dan Pengisian
Pengendalian relay
Out data
Outportb.c:
// Percobaan Output dan delay pada Port B
#include <mega16.h>//menyertakan library file mega16
#include <delay.h> //menggunakan delay, jadi librarynya harus digunakan
void main(void) { //Program Utama
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7
PORTB=255; //Semua Port B mengeluarkan logika 1 , jadi LED mati
// Program akan berulang terus
while (1) {
PORTB.0=0; //LED PB0 menyala
PORTB.1=1; // LED PB1 mati
PORTB.2=0; //LED PB2 menyala
delay_ms(500); //Delay 0.5 detik
PORTB.0=1; //LED PB0 mati
PORTB.1=0; // LED PB1 menyala
PORTB.2=1; //LED PB2 mati
delay_ms(1000); //Delay 1 detik
}; //akhir looping
} //Akhir program utama
Input Port C ke Port B
// Percobaan Input di Port C dan Output pada Port B
// Saklar di Port C, LED terhubung di Port B
#include <mega16.h> //Menyertakan library file ATmega16
#include <delay.h> //menggunakan delay, jadi librarynya harus digunakan
void main(void) { //Program Utama
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7
PORTB=255; //Semua Port B mengeluarkan logika 1, semua LED mati
PORTC =0; //Matikan internal pull up karena sudah ada
//eksternal pull up pada rangkaian input
#asm ("nop") //persiapan
// Program akan berulang terus
while (1) {
PORTB=PINC ; //Semua push button yang ditekan di Port C, datanya dikirim ke Port B
}; //akhir looping
} //Akhir program utama
Deteksi input Port C ke Port B
DeteksiInputPortCkePortB.c:
// Percobaan deteksi Input di Port C per pin dan Output pada Port B
// Saklar di Port C, LED terhubung di Port B
#include <mega16.h> //Menyertakan library file mega16
#include <delay.h> //menggunakan delay, jadi librarynya harus digunakan
void main(void) { //Program Utama
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu PB0 -PB7
PORTB=255; //Semua Port B mengeluarkan logika 1 sehingga semua LED mati
DDRC=0; //Port C dikonfigurasi sebagai input
PORTC =0; //Matikan internal pull up karena sudah ada
//eksternal pul up pada rangkaian input
#asm ("nop") //persiapan
// Program akan berulang terus
while (1) {
PORTB.1=PINC.0 ; //membaca data di PC0, datanya dikirim ke PB1
PortB.2= ~PINC.2 //Logika PB2 kebalikan dari PC2
}; //akhir looping
} //Akhir program utama
Komunikasi Serial
Contoh program serial
unsigned char judul[]={"Praktikum AVR"};
//Inisialisassi USART
//Format frame; 8 data, 1 stop bit, no parity
//USART Receiver & Transmitter ON
//USART mode: Asinkron
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0X00; // Baud rate 9600bps, pada kristal 4 MHz
UBRRL=0X19;
puts(judul); //tampilkan pesan dan ganti baris
UDR=’O’;
Konfigurasi Hyperterminal
Pembacaan sensor jarak
SharpGP2D12.c:
// Percobaan 10.1, percobaan baca data sensor jarak Sharp GP2D12
// LED terhubung di Port B
#include <mega16.h>
#include <stdio.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
flash unsigned char string1[]={"data adc: %d; "};
ADC

//Baca 8 bit terpenting


unsigned char read_adc(unsigned char adc_input) {
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Mulai konversi ADC
ADCSRA|=0x40;
// Tunggu konversi ADC selesai
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main(void) {
// Inisialisasi Port B
PORTB=0xFF;
DDRB=0xFF;
Pembacaan sensor pada robot
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
// ADC initialization
// ADC Clock frequency: 31,250 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
// Menggunakan 8 bit data
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
SFIOR&=0x1F;
}
Pembacaan sensr pada robot
while (1)
{
PORTB=read_adc(0); // Baca data sensor di PA.0
printf(string1,PORTB);
if (PORTB>100)
{
PORTD=128; //Putar motor DC ke kanan
}
else
{
PORTD=64; //Putar motor DC ke kiri
}
};
Industrial Control
Robot for Human

Don’t you want to develop these ???


Wireless Application

Frequency Range: 2.4~2.524 GHz


Modulate Mode: GFSK
Data Rate: 1Mbps
Multi channel operation: 125 channels,
Data Rate:1,200 - 19.2 K baud
Frequency:433.92 Mhz
(UHF)Transmission 500 ft

Anda mungkin juga menyukai