You are on page 1of 14
TUTORIAL PE MROGRAMAN MENGGUNAKAN CODE VISION A VR Chip yang digunakan pada tutor ial ini adalah

TUTORIAL PE MROGRAMAN MENGGUNAKAN CODE VISION A VR

Chip yang digunakan pada tutor ial ini adalah AT mega 16/32/8535, ketiga chip te rsebut memiliki konfigurasi yang sama sehingga kita bisa menggunakan salah satu dari ketiga chi p tersebut. Adapun spesifikasi dari chip ini adalah se bagai berikut:

Mempunyai 32 buah pin Mempunyai 8 buah pin

I/O ADC (Port A)

Mempunyai 2 timer/cou nter 8 bit dan 1 timer/counter 16 bit, dengan be berapa fitur menu didalamnya

Mempunyai 4 channel P WM

Dan masih banyak lagi s pesifikasi yang lain

Adapun konfigurasi Atmega 16/ 32/8535 adalah sebagai berikut.

TUTORIAL PE MROGRAMAN MENGGUNAKAN CODE VISION A VR Chip yang digunakan pada tutor ial ini adalah
  • 1. Modul LED Pemrograman LED seca ra garis besar ada 2 macam, Aktif High dan Aktif Low, perbedaan dari keduanya ada pada kofi gurasi rangkaian led itu sendiri, untuk lebih jelas nya perhatikan gambar dibawah ini.

TUTORIAL PE MROGRAMAN MENGGUNAKAN CODE VISION A VR Chip yang digunakan pada tutor ial ini adalah

Pada rangkaian Aktif Hig h LED akan menyala jika inputannya High, sebali iknya Aktif LOW LED akan menyalaketika inp utannya Low (Tips: untuk rangkaian Aktif Low kit a perlu untuk

memPul-Up AVR, karen a defaultnya AVR akan terus mengirim logika Low perintah). Setelah kita t ahu apa itu Aktif High dan Aktif Low, saatnya kita

ketika tidak ada akan belajar cara

untuk mengcodingnya, sebagai berikut:

proyek yang akan kita buat adalah Running LED d engan ketentuan

Menggunakan

Atmega 16

Menggunakan P ort A

 Menggunakan 8 LED Aktif High  Clok : 11,05920 0 MHz Setting AVR :
Menggunakan 8
LED Aktif High
Clok : 11,05920 0 MHz
Setting AVR :

Coding AVR :

#include <mega16.h > #include <delay.h> //header untuk delay_ms void main(void) {

PORTA=0x00; //pull up non aktif

 Menggunakan 8 LED Aktif High  Clok : 11,05920 0 MHz Setting AVR : Coding

DDRA=0xFF;

//set output pada semua pin A

while (1)

//codingndibawah while terus mengula ng

{

PORTA= 0b00000001; //led paling kiri hidup

delay_ ms(100);

//jeda waktu 100 ms

PORTA= 0b00000010; delay_ ms(100); PORTA= 0b00000100; delay_ ms(100); PORTA= 0b00001000; delay_ ms(100); PORTA= 0b00010000; delay_ ms(100); PORTA= 0b00100000; delay_ ms(100); PORTA= 0b01000000; delay_ ms(100); PORTA= 0b10000000; //led paling kanan hidup delay_ ms(100);

};

}

  • 2. Modul LCD LCD yang akan kita guna kan adalah LCD 16x2, adapun konfigurasi pinnya berikut:

adalah sebagai

2. Modul LCD LCD yang akan kita guna kan adalah LCD 16x2, adapun konfigurasi pinnya berikut:
2. Modul LCD LCD yang akan kita guna kan adalah LCD 16x2, adapun konfigurasi pinnya berikut:
2. Modul LCD LCD yang akan kita guna kan adalah LCD 16x2, adapun konfigurasi pinnya berikut:

Penulisan karakter pada

LCD menggunakan metode sumbu (X,Y). Adapu n karakteristik LCD

adalah sebgai berikut:

Terdapat 16 x 2 karakter huruf yang bisa ditampilkan.

Setiap huruf ter diri dari 5x7 dot-matrix cursor.

Terdapat 192 m acam karakter.

Terdapat 80 x 8 bit display RAM (maksimal 80 karakter).

Memiliki kemam

puan penulisan dengan 8 bit maupun dengan 4 bit.

Dibangun denga n osilator lokal.

Satu sumber teg angan 5 volt.

Otomatis reset

saat tegangan dihidupkan.

Bekerja pada su hu 00C sampai 550C.

Adapun pemrograman d asar LCD adalah sebagai berikut:

lcd_clear();

lcd_gotoxy(x,y);

//berfungsi untuk menghapus layar lc d //berfungsi untuk memberi alamat pad a karakter, apabila tidak menggunakan lcd_gotoxy (x,y); maka alamat karakter otomatis berada pada koordinat (0,0) / setelah karakter sebelumnya.

lcd_putsf(“Karakte r”); //berfungsi untuk menulis stri ng

lcd_putchar(‘C’);

//berfungsi untuk menulis kara kter

tips: untuk mengak ses karakter yang tidak disediakan pada keyboard kita bisa gunakan perintah lcd_putchar(nilai_karakter) ; bisa diisi dari nilai 0-255.

Project yang akan kita b uat adalah menampilkan karakter “Laoading” pa da LCD, dengan spesifikasi sebagai

Project yang akan kita b uat adalah menampilkan karakter “Laoading” pa da LCD, dengan spesifikasi sebagai berik ut:

 Menggunakan Atmega 16   Menggunakan P ORT C Clok : 11,05920 0 MHz Setting
Menggunakan
Atmega 16
Menggunakan P ORT C
Clok : 11,05920 0 MHz
Setting AVR :
Project yang akan kita b uat adalah menampilkan karakter “Laoading” pa da LCD, dengan spesifikasi sebagai

Coding AVR :

#include <mega16.h > #include <delay.h>

int i;

//dekl arasi variabel i dengan tipe data in teger //sett ing lcd dari AVR

#asm

.equ

__lcd_port

#endasm #include <lcd.h>

=0x15 ;PORTC

void main(void) {

PORTC=0x00;

DDRC=0xFF;

//se mua port c menjadi output

lcd_init(16); //se tting lcd dari AVR

while (1)

{

lcd_clear() ; for(i=0;i<1 6;i++) {

//menghapus karakter //looping sebanyak 16 ka li

}

lcd_gotoxy (4,0); lcd_putsf( "Loading."); lcd_gotoxy (i,1); lcd_putcha r(255); delay_ms(8 00); } lcd_clear( ); lcd_gotoxy (5,0); lcd_putsf( "Sukses"); lcd_gotoxy (0,1);

//alamat karakter “loadi ng”

//alamat karakter block //kode karakter block //jeda looping for

lcd_putsf( "Karakter LCD16x2");

delay_ms(2 000);

};

//jeda tampil karakter

} lcd_gotoxy (4,0); lcd_putsf( "Loading."); lcd_gotoxy (i,1); lcd_putcha r(255); delay_ms(8 00); } lcd_clear( ); lcd_gotoxy (5,0);
  • 3. Modul Saklar Saklar sendiri terdiri dar i berbagai macam tipe, diantaranya switch (sakla r yang terus aktif ketika dan setelah ditek an), push button (saklar yang aktif ketika ditekan ) dan lain sebagainnya. Konfiguras i saklar disini dibagi menjadi dua, yaitu Aklif Hig h dan Aktif Low, sebagaimana LED perbe daan saklar hanya pada kondisinya, LED sebagai Output sedangkan saklar sebagai Input. Pa da kesempatan kali ini kita akan membuat progr am untuk kalibrasi 4 buah push button. Adap un spesifikasi project adalah sebagai berikut :

Menggunakan

Atmega 16

LCD PORTC

Push Button me nggunakan PINB 0-PINB 3 Aktif Low

Clok : 11,05920 0 MHz

Setting AVR :

} lcd_gotoxy (4,0); lcd_putsf( "Loading."); lcd_gotoxy (i,1); lcd_putcha r(255); delay_ms(8 00); } lcd_clear( ); lcd_gotoxy (5,0);
} lcd_gotoxy (4,0); lcd_putsf( "Loading."); lcd_gotoxy (i,1); lcd_putcha r(255); delay_ms(8 00); } lcd_clear( ); lcd_gotoxy (5,0);

Coding AVR :

#include <mega16.h > #include <delay.h> #include <stdio.h> int i; char data[100];

// Alphanumeric LC D Module functions #asm

.equ

__lcd_port

=0x15 ;PORTC

#endasm #include <lcd.h>

void cek_tombol() {

lcd_gotoxy (0,0); lcd_putsf("KALIBRASI

TOMBOL\nMULAI.....

satu:

.....!");

delay_ms(1500);

Coding AVR : #include <mega16.h > #include <delay.h> #include <stdio.h> int i; char data[100]; // Alphanumeric

lcd_clear( ); lcd_gotoxy (0,0); lcd_putsf("PINB.0"); delay_ ms(200); if (PINB.0 ==0) {lcd_clear(); lcd_gotoxy(0,0); ;

lcd_putsf("PINB.0\ n[BERHASIL]"); delay_ms(500); goto dua;} goto satu;

dua:

lcd_clear( ); lcd_gotoxy (0,0); lcd_putsf("PINB.1"); delay_ ms(200); if (PINB.1 ==0) {lcd_clear(); lcd_gotoxy(0,0) ; lcd_putsf("PINB.1\ n[BERHASIL]"); delay_ms(500); goto tiga;} goto dua;

tiga:

lcd_clear( ); lcd_gotoxy (0,0); lcd_putsf("PINB.2"); delay_ ms(200); if (PINB.2 ==0) {lcd_clear(); lcd_gotoxy(0,0) ; lcd_putsf("PINB.2\ n[BERHASIL]"); delay_ms(500); goto empat;} goto tiga;

empat:

lcd_clear( ); lcd_gotoxy (0,0); lcd_putsf("PINB.3"); delay_m ms(200); if (PINB.3 ==0) {lcd_clear(); lcd_gotoxy(0,0) ; lcd_putsf("PINB.0\ n[BERHASIL]"); delay_ms(500); goto selesai;} goto empat ;

selesai:

lcd_gotoxy (0,0); lcd_putsf("KALIBRASI

TOMBOL\nSELESAI... } void main(void)

{

PORTB=0x0F;

DDRB=0x00;

PORTC=0x00;

DDRC=0xFF;

.....!");

lcd_init(16);

delay_ms(1500);

while (1)

{

cek_tombol ();

};}

while (1) { cek_tombol (); };} 4. Modul Sensor Photodio de Sensor photodione mer upakan salah
  • 4. Modul Sensor Photodio de Sensor photodione mer upakan salah satu dari keluarga Diode dengan ke mampuan khusus yaitu dapat mengatur te gangan yang yng dikeluarkan berdasarkan seber apa banyak intensitas cahaya yang

mengenainya, sehingga banyak digunakan oleh p ara pembuat robot

Line Follower sebagai ac uan untuk membedakan antara garis dan bagro und. Sensor ini tidak

dapat bekerja sendiri m elainkan butuh sebuah triger cahaya dari LED da n pembatas arus

menggunakan resistor.

Data yang dikelurkan dari photodiode merupaka n data analog,

sehingga perlu diubah m enjadi dat digital untuk dapat diproses oleh AVR R.

Ada 2 cara untuk mengu bah data analog menjadi data digital, yaitu deng an menambahkan rangkaian Op Amp pada rangkaian atau dengan menggunakan menu AD C pada AVR itu sendiri, terdapat 8 buah pin ADC (pin A) pada Atmega 16/32/8535 denga an pilihan 8 bit dan 10 bit, sehingga lebih m emudahkan para programmer untuk mensetting menu ADC menggunakan program.

Project kali ini kita akan menggunakan ADC dan menampilkan data binn er 1 atau 0 pada LCD, untuk membedaka n garis hitam dan putih.

Setting AVR :

while (1) { cek_tombol (); };} 4. Modul Sensor Photodio de Sensor photodione mer upakan salah
while (1) { cek_tombol (); };} 4. Modul Sensor Photodio de Sensor photodione mer upakan salah
Coding AVR: #include <mega16.h > #include <delay.h> #include <stdlib.h > #include <stdio.h> int n=100; //nila i

Coding AVR:

Coding AVR: #include <mega16.h > #include <delay.h> #include <stdlib.h > #include <stdio.h> int n=100; //nila i

#include <mega16.h > #include <delay.h> #include <stdlib.h > #include <stdio.h> int n=100; //nila i pembanding data digital sensor int adc0, adc1, ad c2, adc3, adc4, adc5, adc6, adc7; bit acc0, acc1, ac c2, acc3, acc4, acc5, acc6, acc7; char data[100]; // media penyimpanan dari dasil conver t int-char

#asm

.equ

__lcd_port

#endasm #include <lcd.h>

=0x15 ;PORTC

#define ADC_VREF_T YPE 0x00

// Read the AD con version result unsigned int read_ adc(unsigned char adc_input) { ADMUX=adc_input|AD C_VREF_TYPE; // Start the AD co nversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0 x10)==0);

ADCSRA|=0x10;

return ADCW;

}

unsigned char sens or; void adc() //untuk mengambil data digital dan membandi ngkannya {

adc0=read_ adc(0); adc1=read_ adc(1); adc2=read_ adc(2);

if (adc0>n) {acc0=1;} else {acc0=0;} if (adc1>n) {acc1=1;} else {acc1=0;} if (adc2>n) {acc2=1;} else {acc2=0;}

adc3=read_ adc(3); adc4=read_ adc(4); adc5=read_ adc(5); adc6=read_ adc(6); adc7=read_ adc(7);

adc3=read_ adc(3); adc4=read_ adc(4); adc5=read_ adc(5); adc6=read_ adc(6); adc7=read_ adc(7); if (adc3>n) {acc3=1;} else {acc3=0;} if

if (adc3>n) {acc3=1;} else {acc3=0;} if (adc4>n) {acc4=1;} else {acc4=0;} if (adc5>n) {acc5=1;} else {acc5=0;} if (adc6>n) {acc6=1;} else {acc6=0;} if (adc7>n) {acc7=1;} else {acc7=0;}

} void tamp_acc() // untuk menampilkan hasil pembandinga n pada LCD { adc(); lcd_clear(); lcd_g otoxy(0,0); sprintf(data,"%d-% d-%d-%d-%d-%d-%d-%d" ,acc7,acc6,acc5,ac c4,acc3,acc2,acc1,acc0); //convert i nt-char lcd_puts(data); de lay_ms(1); //menampilkan data pada l cd } void main(void) {

PORTA=0xFF;

DDRA=0x00;

PORTC=0x00;

DDRC=0xFF;

//setting ADC dan LCD dari AVR ADMUX=ADC_VREF_TYP E;

ADCSRA=0x86;

lcd_init(16);

while(1)

{ tmp_acc(); / /menampilkan data acc

}};

  • 5. Modul Motor DC Motor sendiri mempuny ai banyak macamnya, diantaranya motor DC, m otor stepper, motor servo dan lain sebagainy a, kali ini kita akan membahas tentang kontrol

motor DC. Disamping

itu driver (kontroller) un tuk motor DC secara umum ada dua, yaitu meng gunakan chip dan

non chip, driver non chi p salah satunya menggunakan Mosfet, sedangka n untuk driver chip ada banyak pilihan chip yang bisa digunakan, salah satunya menggunaka n IC L293D.

Project kita kali ini adala h kontrol manuver motor DC dengan mengguna kan IC L293D, disini kita akan kontrol denga n menggunakan timer yang dibangkitkan dari tim er/counter 0 dengan outputan enabl e PORTD.4 dan PORTD.5 dari AVR. Kontrol driver disini menggunakan 2 buah PORT untuk dire ction dan sebuah PORT timer untuk enable. Pin d irection berfungsi untuk kontrol arah mot or (cw/ccw), sedangkan pin enable berfungsi unt uk mengontrol pin direction (seumpama en able tidak diaktifkan maka pin direction tidak ak an berfungsi) dan mengatur kecepatan mo tor.

Spesifikasi project:

Driver motor m enggunakan L293D

Dir motor kiri P ORTD.0 dan PORTD.1 dengsn enable PORTD.4

Dir motor kanan

PORTD.2 dan PORTD.3 dengsn enable PORTD.5

Menggunakan t imer/counter 0 dengan frekuensi paling rendah

Setting AVR :

Setting AVR : 10
Setting AVR : 10
Setting AVR : 10
Setting AVR : 10

Coding AVR:

#include <mega16.h > #include <delay.h>

#include <stdlib.h > #include <stdio.h>

Coding AVR: #include <mega16.h > #include <delay.h> #include <stdlib.h > #include <stdio.h> #define EnKi PO RTD.4

#define EnKi

PO RTD.4

// Enable L298 untuk motor ki ri

#define dirA_Ki PO RTD.0 #define dirB_Ki PO RTD.1

// Direction A untuk motor ki ri // Direction B untuk motor ki ri

#define EnKa

PO RTD.5

// Enable L298 untuk motor k anan

#define dirC_Ka PO RTD.2 #define dirD_Ka PO RTD.3

// Direction C untuk motor k anan // Direction D untuk motor k anan

//Coding Interrupt Timer 0 unsigned char xcou nt,lpwm,rpwm; interrupt [TIM0_OV F] void timer0_ovf_isr(void) {

xcount++;

// xcount=xcount+1

if(xcount<=lpwm )EnKi=1;

// EnKi=1 jika xcount <= lpwm

else EnKi=0;

// EnKi=0 jika xcount >

lpwm

if(xcount<=rpwm )EnKa=1;

// EnKa=1 jika xcount <= rpwm

else EnKa=0;

// EnKa=0 jika xcount >

rpwm

TCNT0=0xFF;

// Timer0 Value Menen tukan periode

pulsa PWM } //Coding Manufer void maju(unsigned char l, unsigned char r) {

lcd_clear(); lcd_ gotoxy(0,0); lcd_putsf("MOTOR MAJU") ; delay_ms(1); lpwm=l; rpwm=r; dirA_Ki=1;dirB_Ki =0; dirC_Ka=1;dirD_Ka =0;

} void mundur(unsign ed char l, unsigned char r) { lcd_clear(); lcd_g otoxy(0,0); lcd_putsf("MOTOR MUNDUR" ");

delay_ms(1);

lpwm=l; rpwm=r; dirA_Ki=0;dirB_Ki =1; dirC_Ka=0;dirD_Ka =1;

}

void stop()

{

lcd_clear(); lcd_ gotoxy(0,0); lcd_putsf("MOTOR STOP") ; delay_ms(1); lpwm=0; rpwm=0; dirA_Ki=1;dirB_Ki =1; dirC_Ka=1;dirD_Ka =1;

} void parkir () {

while(1){ lcd_cle ar(); lcd_gotoxy(0,0); lcd_putsf("MO OTOR PARKIR"); delay_ms(1); stop( );} } void kiri(unsigned char l, unsigned char r) {

lcd_clear(); lcd_ gotoxy(0,0); lcd_putsf("MOTOR KIRI") ; delay_ms(1); lpwm=l; rpwm=r; dirA_Ki=0;dirB_Ki =1; dirC_Ka=1;dirD_Ka =0;

} void kanan(unsigne d char l, unsigned char r) {

lcd_clear(); lcd_ gotoxy(0,0); lcd_putsf("MOTOR KANAN" ");

delay_ms(1);

lpwm=l; rpwm=r; dirA_Ki=1;dirB_Ki =0; dirC_Ka=0;dirD_Ka =1;

} void main(void) {

PORTC=0x00;

DDRC=0xFF;

PORTD=0x00;

DDRD=0xFF;

} void main(void) { PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0xFF; /* Timer/Counter 0 initialization. Clock source: Syst em

/* Timer/Counter 0 initialization. Clock source: Syst em Clock. Clock value: 10,800 kHz Mode: Normal top=F Fh. OC0 output: Disconnected */

TCCR0=0x05;

TCNT0=0x00;

OCR0=0x00;

// External Interr upt(s) initialization // INT0: Off. INT1 : Off. INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counte r(s) Interrupt(s) initialization

TIMSK=0x01;

// Analog Comparat or initialization. Analog Comparato r: Off // Analog Comparat or Input Capture by Timer/Counter 1: : Off

ACSR=0x80;

SFIOR=0x00;

// ADC initializat ion. ADC Clock frequency: 172,800 k Hz // ADC Voltage Ref erence: AREF pin. ADC Auto Trigger Source: None ADMUX=ADC_VREF_TYP E;

ADCSRA=0x86;

// LCD module init ialization

lcd_init(16);

// Global enable i nterrupts #asm("sei") //Coding Dengan Pe rulangan while (1) { maju(100,100 ); // bisa diganti dengan kiri(kece patan kiri,kecepatan kan an); dan lain sebagai nya. }};

  • 6. Modul Sensor Ultrasoni c Sensor ultrasonic merup akan salah satu dari sensor jarak yang paling di programmer dan pengh obi robotika pasalnya sensor ini harganya lebih

minati oleh para murah dan terdapat

banyak dipasaran serta

mudah dalam mengcodingnya. Sersor ultrasonic yang kita gunakan

kali ini adalah sensor ult rasonic SRF04, adapun spesifikasinya adalah seb agai berikut:

Inputan 5 V

Jarak minimum 3 cm sedangkan jarak maxsimum 3 m (jangkaua n diluar jarak tersebut akan m enghasilkan nilai pembacaan yang tidak sesuai)

Dimensi : 43mm

x 20mm x 17mm

Sensor ultrasonic ini ter diri dari 5 buah pin, yaitu Vcc, Echo, Trigger, Out put, dan Ground. Prinsip keja dari sensor i ni adalah pin Trigger mengirimkan sinyal yang k emudian terpantul pada objek didepannya dan diterima oleh pin Echo, sampainya sinyal da ri Trigger pada pin Echo membutuhkan seb uah delay, delay inilah yang digunakan sebagai a cuan untuk mendapat nilai jarak da ri sensor pada objek didepannya, semakin lama d elay, maka jarak sensor dari objek akan s emakin jauh.

Pada pemrograman sen sor ultasonic kita membutuhkan suatu rumus te rtentu untuk mendapatkan besaran j arak,

Pada pemrograman sen sor ultasonic kita membutuhkan suatu rumus te rtentu untuk mendapatkan besaran j arak, tapi pada tutorial kali ini penulis tidak akan membahas tentang cara membuat rumus te rsebut (pembahasan tentang rumus sensor ultra sonic insyaallah akan diulas pada tutoria l selanjutnya), tapi yang pasti sinyal clock pada A VR (nilai Crystal external) akan berpenga ruh pada rumus tersebut.

Selanjutnya kita akan m embuat sebuah project sensor ultrasonic dengan LCD, dengan spesifikasi sebagai berikut :

gabungan animasi

Menggunakan

Atmega 16

LCD menggunak an PORTC

Trigger PORTA.1

& Echo PINA.0 (istilah PORT digunakan untuk O utput sedangkan PIN

digunakan untu k Input) Clok : 11,05920 0 MHz

Setting AVR :

Pada pemrograman sen sor ultasonic kita membutuhkan suatu rumus te rtentu untuk mendapatkan besaran j arak,

Coding AVR :

#include <mega16.h >

#include <delay.h> #include <stdio.h> #define trigger PO RTA.1 #define echo PINA. 0 int i; char data[100]; #asm

.equ

__lcd_port

=0x15 ;PORTC

Pada pemrograman sen sor ultasonic kita membutuhkan suatu rumus te rtentu untuk mendapatkan besaran j arak,

#endasm #include <lcd.h>

int jarak; void ukur_jarak() { int i;

jarak=0;

delay_us(100);

trigger=1;

delay_us(15);

trigger=0;

delay_us(100);

while(!echo); for (i=0;i<=500;i+ +) { if (echo) {jarak++ ;}

delay_us(58);

} sprintf (data,"%d cm",jarak); lcd_clear( ); lcd_gotoxy (6,0); lcd_puts(d ata); delay_ms(1 00);

} void main(void) {

PORTA=0x00;

DDRA=0x0E;

PORTC=0x00;

DDRC=0xFF;

lcd_init(16);

while (1)

{

lcd_clear() ; for(i=0;i<1 6;i++) {

lcd_gotoxy (4,0); lcd_putsf( "Loading."); lcd_gotoxy (i,1); lcd_putcha r(255); delay_ms(4 00); } lcd_clear( ); lcd_gotoxy (5,0); lcd_putsf( "Sukses"); lcd_gotoxy (0,1); lcd_putsf( "Karakter LCD16x2"); delay_ms(1 000);

while(1){

ukur_jarak ();

}};}

#endasm #include <lcd.h> int jarak; void ukur_jarak() { int i; jarak=0; delay_us(100); trigger=1; delay_us(15); trigger=0; delay_us(100);
#endasm #include <lcd.h> int jarak; void ukur_jarak() { int i; jarak=0; delay_us(100); trigger=1; delay_us(15); trigger=0; delay_us(100);

Bangkala n, 24 Februari 2015