Membuat Robot Pencari Api Dengan Mikrokontroler ATMEGA 8535
Api bisa jadi temen kadang juga bisa jadi musuh, nah kali ini api akan jadi musuh dalam permainan ini. Nama permainannya “PEMUSNAH API”Yuk kita simak bagaimana api dimusnahkan, eitss!!! Terlalu ga pas, maksudnya adalah bagaimana api di padamkan oleh sebuah robot gitu.
Pertaman-tama siapkan komponen utama berikut:
Untuk komponen tambahan, ntr aja karna kita bisa cari di OM GOOGLE kok
Komponen-komponen robot:
1. ATMEGA 8535
2. Sensor UVtron (mendeteksi api)
3. Sensor ultrasonic (mendeteksi dinding)
4. LDR (mendeteksi cahaya api)
5. Motor DC (kanan dan kiri)
6. LCD 16×2
Cara kerjanya:
Ketika tidak ada api maka robot akan diam dan sensor api mendeteksi keadaan disekitarnya. ketika ada api robot akan berputar mencari dimana posisi api, setelah posisi api tepat di depan robot maka robot akan berjalan maju hingga mendekati api dan meniupnya hingga padam. Jika api dipindahkan tiba-tiba atau terlalu jauh maka robot akan kembali mencari posisi api tersebut.
Program:
Berikut ini adalah script untuk robot pencari api, project ini dibuat dalam rangka pembelajaran, jadi mohon maaf kalo masih kurang sempurna.
Pemprograman menggunakan Codevision AVR yang mendukung pemprograman bahasa C.
———————————————————————————————–
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#asm
.equ __lcd_port=0×18 ;PORTB
#endasm
#include <lcd.h>
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 2
#define ADC_VREF_TYPE 0×60
#define pwm_kiri OCR1A
#define arah_kiri1 PORTD.0
#define arah_kiri2 PORTD.1
#define pwm_kanan OCR1B
#define arah_kanan1 PORTD.2
#define arah_kanan2 PORTD.3
#define ut_kiri PINA.6
#define ut_depan PINA.5
#define ut_kanan PINA.4
#define uvtron PINA.3
#define kipas PORTD.7
unsigned char api,api_old1,api_old2;
unsigned int adc_data[30],count;
unsigned int adc0,adc1,adc2,adc0_old,adc1_old,adc2_old;
unsigned char ratus,puluh,satuan;
unsigned char k,adc_lengkap,buffer[30];
static unsigned char input_index=0;
void cek_adc();
void baca_adc();
void baca_sensor_api();
void mundur();
void maju();
void berhenti();
void belok_kiri();
void belok_kanan();
interrupt [ADC_INT] void adc_isr(void)
{
adc_data[count]=ADCH;
if(++input_index>2) input_index=0;
if (++count > (29))
{
count=0;
input_index=0;
adc_lengkap=1;
return;
}
ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
ADCSRA|=0×40;
}
void main(void)
{
PORTA=0xFF;
DDRA=0×00;
PORTB=0×00;
DDRB=0×00;
PORTC=0×00;
DDRC=0xFF;
PORTD=0x7F;
DDRD=0xFF;
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;
TCCR1A=0xA3;
TCCR1B=0x0D;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;
MCUCR=0×00;
MCUCSR=0×00;
TIMSK=0×00;
ACSR=0×80;
SFIOR=0×00;
ADCSRA=0x8F;
SFIOR&=0x0F;
lcd_init(16);
#asm(“sei”)
adc0_old=0;
adc1_old=0;
adc2_old=0;
api_old1=0;
api_old2=0;
while (1)
{
target1: if(ut_kiri==1 && ut_kanan==1 && ut_depan==1)
{
mundur();
}
else if(ut_kiri==1 && ut_kanan==1)
{
mundur();
}
else if(ut_kiri==1 && ut_depan==1)
{
mundur();
delay_ms(1000);
belok_kanan();
delay_ms(1000);
}
else if(ut_kanan==1 && ut_depan==1)
{
mundur();
delay_ms(1000);
belok_kiri();
delay_ms(1000);
}
else if(ut_kiri==1)
{
belok_kanan();
}
else if(ut_depan==1)
{
mundur();
}
else if(ut_kanan==1)
{
belok_kiri();
}
else if((ut_depan==0)&&(ut_kiri==0)&&(ut_kanan==0))
{
berhenti();
goto target2;
}
target2: for(k=1; k<=5;k++)
{
baca_sensor_api();
}
if(api_old1>=1 && api_old2>=1)
{
lcd_gotoxy(0,0);
lcd_putsf(“ADA-API “);
api=0;
goto target3;
}
else if(api_old1<1 && api_old2<1)
{
lcd_gotoxy(0,0);
lcd_putsf(“TIDAK ADA-API “);
goto target1;
}
target3: cek_adc();
if(adc0_old<=adc1_old && adc0_old<=adc2_old)
{
belok_kanan();
goto target2;
}
else if(adc2_old<=adc0_old && adc2_old<=adc1_old)
{
belok_kiri();
goto target2;
}
else if(adc1_old<=adc0_old && adc1_old<=adc2_old)
{
maju();
if(ut_depan==1)
{
for(k=1; k<=5;k++)
{
baca_sensor_api();
}
if((api_old1>=5 && api_old2>=5))
{
lcd_gotoxy(0,0);
lcd_putsf(“ADA-API “);
maju();
delay_ms(500);
berhenti();
kipas=1;
delay_ms(500);
kipas=0;
delay_ms(5000);
api=0;
for(k=1; k<=5;k++)
{
baca_sensor_api();
}
if((api_old1>=5 && api_old2>=5))
{
lcd_gotoxy(0,0);
lcd_putsf(“MASIH ADA-API “);
api=0;
}
else goto target1;
cek_adc();
if(adc1_old<=adc0_old && adc1_old<=adc2_old)
{
goto target4;
}
}
}
}
goto target3;
target4: lcd_gotoxy(0,0);
lcd_putsf(“API JAUH “);
delay_ms(5000);
cek_adc();
if(adc1_old>=adc0_old && adc1_old>=adc2_old)
{
goto target1;
}
};
}
void cek_adc(void)
{
ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
ADCSRA|=0×40;
puter: if(adc_lengkap!=1) goto puter;
adc_lengkap=0;
baca_adc();
}
void baca_adc(void)
{
adc0=(adc0_old+adc_data[0]+adc_data[3]+adc_data[6]+adc_data[9]+adc_data[12]
+adc_data[15]+adc_data[18]+adc_data[21]+adc_data[24])/10;
adc0_old=adc0;
ratus=adc0/100; adc0%=100;
puluh=adc0/10; adc0%=10;
satuan=adc0%10;
lcd_gotoxy(0,1);
sprintf(buffer, “%d%d%d “,ratus,puluh,satuan);
lcd_puts(buffer);
adc1=(adc1_old+adc_data[1]+adc_data[4]+adc_data[7]+adc_data[10]+adc_data[13]
+adc_data[16]+adc_data[19]+adc_data[22]+adc_data[25])/10;
adc1_old=adc1;
ratus=adc1/100; adc1%=100;
puluh=adc1/10; adc1%=10;
satuan=adc1%10;
lcd_gotoxy(5,1);
sprintf(buffer, “%d%d%d “,ratus,puluh,satuan);
lcd_puts(buffer);
adc2=(adc2_old+adc_data[2]+adc_data[5]+adc_data[8]+adc_data[11]+adc_data[14]
+adc_data[17]+adc_data[20]+adc_data[23]+adc_data[26])/10;
adc2_old=adc2;
ratus=adc2/100; adc2%=100;
puluh=adc2/10; adc2%=10;
satuan=adc2%10;
lcd_gotoxy(10,1);
sprintf(buffer, “%d%d%d “,ratus,puluh,satuan);
lcd_puts(buffer);
}
void baca_sensor_api(void)
{
unsigned char i;
for(i=0;i<10;i++)
{
if(uvtron==0)
{
api++;
}
delay_ms(10);
}
api_old1=api;
api_old2=api_old1;
}
void maju(void)
{
lcd_gotoxy(0,0);
lcd_putsf(“ JALAN MAJU “);
pwm_kiri=0x1FFF;
pwm_kanan=0x1FFF;
arah_kiri1=1;
arah_kanan1=1;
arah_kiri2=0;
arah_kanan2=0;
delay_ms(10);
}
void mundur(void)
{
lcd_gotoxy(0,0);
lcd_putsf(“ JALAN MUNDUR “);
pwm_kiri=0x1FFF;
pwm_kanan=0x1FFF;
arah_kiri2=1;
arah_kanan2=1;
arah_kiri1=0;
arah_kanan1=0;
delay_ms(10);
}
void berhenti(void)
{
pwm_kiri=0;
pwm_kanan=0;
arah_kiri1=0;
arah_kanan1=0;
arah_kiri2=0;
arah_kanan2=0;
delay_ms(10);
}
void belok_kiri(void)
{
lcd_gotoxy(0,0);
lcd_putsf(“ BELOK KIRI “);
pwm_kiri=0x1FFF;
pwm_kanan=0x1FFF;
arah_kiri2=0;
arah_kanan1=0;
arah_kiri1=1;
arah_kanan2=1;
delay_ms(10);
}
void belok_kanan(void)
{
lcd_gotoxy(0,0);
lcd_putsf(“ BELOK KANAN “);
pwm_kiri=0x1FFF;
pwm_kanan=0x1FFF;
arah_kiri1=0;
arah_kanan2=0;
arah_kiri2=1;
arah_kanan1=1;
delay_ms(10);
}
———
Membuat Robot Pencari Api Dengan Mikrokontroler ATMEGA 8535
1. Struktur penulisan program
2. Tipe data
3. Deklarasi variabel & konstanta
Statement adalah setiap operasi dalam pemrograman, harus diakhiri dengan [ ; ] atau [ } ]. Statement tidak akan dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih dari 1 baris gunakan pasangan [ /* ] dan [ */ ]. Statement yang tidak dieksekusi disebut juga comments / komentar. Contoh:
5. Function Function adalah bagian program yang dapat dipanggil oleh program utama. Penulisan :
6. Conditional statement dan looping if else : digunakan untuk penyeleksian kondisi
7. Operasi logika dan biner
Ditulis oleh: Tim Prasimax | |||||||||
Pemrograman Bahasa C untuk AVR
Rangkaian Sistem Minimum AVR 8535
Sistem minimum (sismin) mikrokontroler adalah rangkaian elektronik minimum yang diperlukan untuk beroperasinya IC mikrokontroler. Sismin ini kemudian bisa dihubungkan dengan rangkaian lain untuk menjalankan fungsi tertentu. Di keluarga mikrokontroler AVR, seri 8535 adalah salah satu seri yang sangat banyak digunakan.
Untuk membuat rangkaian sismin Atmel AVR 8535 diperlukan beberapa komponen yaitu:
Rangkaian sistem minimum ini sudah siap untuk menerima sinyal analog (fasilitas ADC) di port A. Gambar rangkaiannya adalah sebagai berikut.
Ditulis oleh: Tim Prasimax
Untuk membuat rangkaian sismin Atmel AVR 8535 diperlukan beberapa komponen yaitu:
- IC mikrokontroler ATmega8535
- 1 XTAL 4 MHz atau 8 MHz (XTAL1)
- 3 kapasitor kertas yaitu dua 22 pF (C2 dan C3) serta 100 nF (C4)
- 1 kapasitor elektrolit 4.7 uF (C12) 2 resistor yaitu 100 ohm (R1) dan 10 Kohm (R3)
- 1 tombol reset pushbutton (PB1)
Rangkaian sistem minimum ini sudah siap untuk menerima sinyal analog (fasilitas ADC) di port A. Gambar rangkaiannya adalah sebagai berikut.
Ditulis oleh: Tim Prasimax
Rangkaian Sistem Minimum AVR 8535
Arsitektur Mikrokontroler AVR
Mikrokontroler AVR sudah menggunakan konsep arsitektur Harvard yang memisahkan memori dan bus untuk data dan program, serta sudah menerapkan single level pipelining. Selain itu mikrokontroler AVR juga mengimplementasikan RISC (Reduced Instruction Set Computing) sehingga eksekusi instruksi dapat berlangsung sangat cepat dan efisien.
Blok sistem mikrokontroler AVR adalah sebagai berikut.
Salah satu seri mikrokontroler AVR yang banyak menjadi andalan saat ini adalah tipe ATtiny2313 dan ATmega8535. Seri ATtiny2313 banyak digunakan untuk sistem yang relatif sederhana dan berukuran kecil. Berikut adalah feature-feature mikrokontroler seri ATtiny2313.
MEMORY MAP MIKROKONTROLER AVR
PENJELASAN FUNGSI PIN MIKROKONTROLER AVR
IC mikrokontroler dikemas (packaging) dalam bentuk yang berbeda. Namun pada dasarnya fungsi kaki yang ada pada IC memiliki persamaan. Gambar salah satu bentuk IC seri mikrokontroler AVR ATmega8535 dapat dilihat berikut.
Berikut adalah penjelasan fungsi tiap kaki.
A. Port A
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port A dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port A (DDRA) harus disetting terlebih dahulu sebelum Port A digunakan. Bit-bit DDRA diisi 0 jika ingin memfungsikan pin-pin port A yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, kedelapan pin port A juga digunakan untuk masukan sinyal analog bagi A/D converter.
B. Port B
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port B dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port B (DDRB) harus disetting terlebih dahulu sebelum Port B digunakan. Bit-bit DDRB diisi 0 jika ingin memfungsikan pin-pin port B yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Pin-pin port B juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.
C. Port C
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port C dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port C (DDRC) harus disetting terlebih dahulu sebelum Port C digunakan. Bit-bit DDRC diisi 0 jika ingin memfungsikan pin-pin port C yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, dua pin port C (PC6 dan PC7) juga memiliki fungsi alternatif sebagai oscillator untuk timer/counter 2.
D. Port D
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port D dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port D (DDRD) harus disetting terlebih dahulu sebelum Port D digunakan. Bit-bit DDRD diisi 0 jika ingin memfungsikan pin-pin port D yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, pin-pin port D juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.
E. RESET
RST pada pin 9 merupakan reset dari AVR. Jika pada pin ini diberi masukan low selama minimal 2 machine cycle maka system akan di-reset.
F. XTAL1
XTAL1 adalah masukan ke inverting oscillator amplifier dan input ke internal clock operating circuit.
G. XTAL2
XTAL2 adalah output dari inverting oscillator amplifier.
H. AVcc
Avcc adalah kaki masukan tegangan bagi A/D Converter. Kaki ini harus secara eksternal terhubung ke Vcc melalui lowpass filter.
I. AREF
AREF adalah kaki masukan referensi bagi A/D Converter. Untuk operasionalisasi ADC, suatu level tegangan antara AGND dan Avcc harus dibeikan ke kaki ini.
J. AGND
AGND adalah kaki untuk analog ground. Hubungkan kaki ini ke GND, kecuali jika board memiliki anlaog ground yang terpisah.
Blok sistem mikrokontroler AVR adalah sebagai berikut.
Salah satu seri mikrokontroler AVR yang banyak menjadi andalan saat ini adalah tipe ATtiny2313 dan ATmega8535. Seri ATtiny2313 banyak digunakan untuk sistem yang relatif sederhana dan berukuran kecil. Berikut adalah feature-feature mikrokontroler seri ATtiny2313.
- Kapasitas memori Flash 2 Kbytes untuk program
- Kapasitas memori EEPROM 128 bytes untuk data
- Maksimal 18 pin I/O
- 8 interrupt
- 8-bit timer
- Analog komparator
- On-chip oscillator
- Fasilitas In System Programming (ISP)
- Memori Flash 8 Kbytes untuk program
- Memori EEPROM 512 bytes untuk data
- Memori SRAM 512 bytes untuk data
- Maksimal 32 pin I/O
- 20 interrupt
- Satu 16-bit timer dan dua 8-bit timer
- 8 channel ADC 10 bit
- Komunikasi serial melalui SPI dan USART
- Analog komparator
- 4 I/O PWM
- Fasilitas In System Programming (ISP)
MEMORY MAP MIKROKONTROLER AVR
PENJELASAN FUNGSI PIN MIKROKONTROLER AVR
IC mikrokontroler dikemas (packaging) dalam bentuk yang berbeda. Namun pada dasarnya fungsi kaki yang ada pada IC memiliki persamaan. Gambar salah satu bentuk IC seri mikrokontroler AVR ATmega8535 dapat dilihat berikut.
A. Port A
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port A dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port A (DDRA) harus disetting terlebih dahulu sebelum Port A digunakan. Bit-bit DDRA diisi 0 jika ingin memfungsikan pin-pin port A yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, kedelapan pin port A juga digunakan untuk masukan sinyal analog bagi A/D converter.
B. Port B
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port B dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port B (DDRB) harus disetting terlebih dahulu sebelum Port B digunakan. Bit-bit DDRB diisi 0 jika ingin memfungsikan pin-pin port B yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Pin-pin port B juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.
| Port Pin | Fungsi Khusus |
| PB0 | T0 = timer/counter 0 external counter input |
| PB1 | T1 = timer/counter 0 external counter input |
| PB2 | AIN0 = analog comparator positive input |
| PB3 | AIN1 = analog comparator negative input |
| PB4 | SS = SPI slave select input |
| PB5 | MOSI = SPI bus master output / slave input |
| PB6 | MISO = SPI bus master input / slave output |
| PB7 | SCK = SPI bus serial clock |
C. Port C
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port C dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port C (DDRC) harus disetting terlebih dahulu sebelum Port C digunakan. Bit-bit DDRC diisi 0 jika ingin memfungsikan pin-pin port C yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, dua pin port C (PC6 dan PC7) juga memiliki fungsi alternatif sebagai oscillator untuk timer/counter 2.
D. Port D
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port D dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port D (DDRD) harus disetting terlebih dahulu sebelum Port D digunakan. Bit-bit DDRD diisi 0 jika ingin memfungsikan pin-pin port D yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, pin-pin port D juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.
| Port Pin | Fungsi Khusus |
| PD0 | RDX (UART input line) |
| PD1 | TDX (UART output line) |
| PD2 | INT0 ( external interrupt 0 input ) |
| PD3 | INT1 ( external interrupt 1 input ) |
| PD4 | OC1B (Timer/Counter1 output compareB match output) |
| PD5 | OC1A (Timer/Counter1 output compareA match output) |
| PD6 | ICP (Timer/Counter1 input capture pin) |
| PD7 | OC2 (Timer/Counter2 output compare match output) |
E. RESET
RST pada pin 9 merupakan reset dari AVR. Jika pada pin ini diberi masukan low selama minimal 2 machine cycle maka system akan di-reset.
F. XTAL1
XTAL1 adalah masukan ke inverting oscillator amplifier dan input ke internal clock operating circuit.
G. XTAL2
XTAL2 adalah output dari inverting oscillator amplifier.
H. AVcc
Avcc adalah kaki masukan tegangan bagi A/D Converter. Kaki ini harus secara eksternal terhubung ke Vcc melalui lowpass filter.
I. AREF
AREF adalah kaki masukan referensi bagi A/D Converter. Untuk operasionalisasi ADC, suatu level tegangan antara AGND dan Avcc harus dibeikan ke kaki ini.
J. AGND
AGND adalah kaki untuk analog ground. Hubungkan kaki ini ke GND, kecuali jika board memiliki anlaog ground yang terpisah.
Arsitektur Mikrokontroler AVR
Overview Mikrokontroler AVR
Berbagai seri mikrokontroler AVR telah diproduksi oleh Atmel dan digunakan di dunia sebagai mikrokontroler yang bersifat low cost dan high performance. Di Indonesia, mikrokontroler AVR banyak dipakai karena fiturnya yang cukup lengkap, mudah untuk didapatkan, dan harganya yang relatif terjangkau.
Antar seri mikrokontroler AVR memiliki beragam tipe dan fasilitas, namun kesemuanya memiliki arsitektur yang sama, dan juga set instruksi yang relatif tidak berbeda. Berikut tabel perbandingan beberapa seri mikrokontroler AVR buatan Atmel.
Keterangan:
Ditulis oleh: Tim Prasimax
| | Mikrokontroler AVR merupakan salah satu jenis arsitektur mikrokontroler yang menjadi andalan Atmel. Arsitektur ini dirancang memiliki berbagai kelebihan dan merupakan penyempurnaan dari arsitektur mikrokontroler-mikrokontroler yang sudah ada. |
Antar seri mikrokontroler AVR memiliki beragam tipe dan fasilitas, namun kesemuanya memiliki arsitektur yang sama, dan juga set instruksi yang relatif tidak berbeda. Berikut tabel perbandingan beberapa seri mikrokontroler AVR buatan Atmel.
| Seri | Flash (KBytes) | RAM (Bytes) | EEPROM (KBytes) | Pin I/O | Timer 16-bit | Timer 8-bit | UART | PWM | ADC 10-bit | SPI | ISP |
| ATmega8 | 8 | 1024 | 0.5 | 23 | 1 | 1 | 1 | 3 | 6/8 | 1 | Ya |
| ATmega8535 | 8 | 512 | 0.5 | 32 | 2 | 2 | 1 | 4 | 8 | 1 | Ya |
| ATmega16 | 16 | 1024 | 0.5 | 32 | 1 | 2 | 1 | 4 | 8 | 1 | Ya |
| ATmega162 | 16 | 1024 | 0.5 | 35 | 2 | 2 | 2 | 6 | 8 | 1 | Ya |
| ATmega32 | 32 | 2048 | 1 | 32 | 1 | 2 | 1 | 4 | 8 | 1 | Ya |
| ATmega128 | 128 | 4096 | 4 | 53 | 2 | 2 | 2 | 8 | 8 | 1 | Ya |
| ATtiny12 | 1 | - | 0.0625 | 6 | - | 1 | - | - | - | - | Ya |
| ATtiny2313 | 2 | 128 | 0.125 | 18 | 1 | 1 | 1 | 4 | - | 1 | Ya |
| ATtiny44 | 4 | 256 | 0.25 | 12 | 1 | 1 | - | 4 | 8 | 1 | Ya |
| ATtiny84 | 8 | 512 | 0.5 | 12 | 1 | 1 | - | 4 | 8 | 1 | Ya |
Keterangan:
- Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia yang harus dijalankan oleh mikrokontroler
- RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk penyimpanan data sementara dan pengolahan data ketika program sedang running
- EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori untuk penyimpanan data secara permanen oleh program yang sedang running
- Port I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran ataupun masukan bagi program
- Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa
- UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial asynchronous
- PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa
- ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu untuk kemudian dikonversi menjadi suatu nilai digital dalam range tertentu
- SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial synchronous
- ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung dalam sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal
Ditulis oleh: Tim Prasimax
Mikrokontroler AVR
Pemrograman AT89S51 bahasa Assembly
Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program. Kelebihan Bahasa Assembly:
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori
3. Lebih cepat dieksekusi
Kesulitan Bahasa Assembly:
1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis
BAHASA ASSEMBLY MCS-51
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)
2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler)
Klik disini untuk melihat daftar Assembly Directive dan Instruksi MCS-51.
PENGGUNAAN SOFTWARE
Software untuk membantu memprogram mikrokontroler MCS-51 sudah banyak tersedia. Untuk mempermudah maka dapat dipilih software yang merupakan Integrated Development Environment (IDE) yaitu software yang merupakan editor sekaligus compiler. Bahkan juga ada yang sekaligus debugger dan simulator. Salah satunya yang digunakan pada training di PRASIMAX adalah Read51.
Berikut beberapa cara penggunaan software.
1. User dapat membuat program sistem single file maupun proyek (beberapa file). Klik menu File lalu pilih New File.
2. Ketik program di window editing. Software menyediakan syntax highlighting otomatis, sehingga tiap assembly directive akan diberi warna ungu dan tiap instuksi akan diberi warna biru.
3. User dapat langsung mengcompile program dengan sekali klik icon Build (F9). Ketika ada kesalahan maka user dapat langsung ditunjukkan letak dan jenis kesalahan.
4. User dapat melakukan simulasi software untuk melihat hasil kerja program. Klik IDE mode (F2).
5. User dapat melakukan debugging, bahkan melihat hasil eksekusi per step (per baris) terhadap kondisi-kondisi register dan memori di mikrokontroler. Klik Step Into (F8).
Selanjutnya user dapat melakukan download program ke IC mikrokontroler untuk menguji hasilnya secara real di hardware. Klik disini untuk mengetahui caranya.
Ditulis oleh: Tim Prasimax
| Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language). |
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori
3. Lebih cepat dieksekusi
Kesulitan Bahasa Assembly:
1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis
BAHASA ASSEMBLY MCS-51
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)
2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler)
Klik disini untuk melihat daftar Assembly Directive dan Instruksi MCS-51.
PENGGUNAAN SOFTWARE
Software untuk membantu memprogram mikrokontroler MCS-51 sudah banyak tersedia. Untuk mempermudah maka dapat dipilih software yang merupakan Integrated Development Environment (IDE) yaitu software yang merupakan editor sekaligus compiler. Bahkan juga ada yang sekaligus debugger dan simulator. Salah satunya yang digunakan pada training di PRASIMAX adalah Read51.
Berikut beberapa cara penggunaan software.
1. User dapat membuat program sistem single file maupun proyek (beberapa file). Klik menu File lalu pilih New File.
2. Ketik program di window editing. Software menyediakan syntax highlighting otomatis, sehingga tiap assembly directive akan diberi warna ungu dan tiap instuksi akan diberi warna biru.
3. User dapat langsung mengcompile program dengan sekali klik icon Build (F9). Ketika ada kesalahan maka user dapat langsung ditunjukkan letak dan jenis kesalahan.
4. User dapat melakukan simulasi software untuk melihat hasil kerja program. Klik IDE mode (F2).
5. User dapat melakukan debugging, bahkan melihat hasil eksekusi per step (per baris) terhadap kondisi-kondisi register dan memori di mikrokontroler. Klik Step Into (F8).
Selanjutnya user dapat melakukan download program ke IC mikrokontroler untuk menguji hasilnya secara real di hardware. Klik disini untuk mengetahui caranya.
Ditulis oleh: Tim Prasimax
Pemrograman AT89S51 bahasa Assembly
Arus dan Tegangan
| Dalam suatu rangkaian listrik biasanya akan memiliki tegangan dan arus. Kerja aliran listrik mirip dengan aliran air, yang merupakan suatu aliran energi yang dapat dimanfaatkan untuk suatu tujuan. |
Arus
Arus listrik adalah listrik yang mengalir dalam suatu kabel penghantar. Arus listrik mengalir dari 1 titik ke titik lain, dari titik yang potensialnya tinggi ke titik yang potensialnya lebih rendah. Arus listrik digambarkan pada rangkaian seperti pada gambar. Tanda panah menunjukkan arah kemana arus listrik mengalir. Simbol I melambangkan arus listrik.
Arus listrik adalah listrik yang mengalir dalam suatu kabel penghantar. Arus listrik mengalir dari 1 titik ke titik lain, dari titik yang potensialnya tinggi ke titik yang potensialnya lebih rendah. Arus listrik digambarkan pada rangkaian seperti pada gambar. Tanda panah menunjukkan arah kemana arus listrik mengalir. Simbol I melambangkan arus listrik.
Satuan ukuran untuk arus listrik adalah Ampere, atau disingkat A. Arus listrik biasanya berkisar dari 0.001 A sampai dengan 5 A. Karena biasanya kecil, maka seringkali disebutkan dalam satuan milliAmpere (mA.) Milli artinya dibagi dengan 1000, jadi 0.001 A akan sama dengan 1 mA.
Tegangan
Tegangan adalah ukuran relatif seberapa besar potensial listrik pada suatu titik dibandingkan titik lain yang menjadi acuan (biasanya adalah ground) dengan satuan pengukuran yaitu volt (V). Arus listrik akan mengalir dari titik yang potensialnya tinggi ke titik yang potensialnya rendah. Jika suatu titik tegangannya 5 V sedangkan titik lain tegangannya 0 V dan ada kabel penghantar menghubungkan keduanya, maka arus listrik akan mengalir dari titik yang tegangannya 5 V ke titik yang tegangannya 0 V.
Pengukuran tegangan dapat menunjukkan perbedaan potensial antara dua titik.Jika titik A tegangannya 10 V (terhadap titik acuan) dan titik B tegangannya 2 volt (terhadap titik acuan yang sama) maka berarti tegangan antara titik A dan B adalah 8 V (yaitu dari 10 V dikurangi 2 V). Biasanya tegangan terendah dalam suatu rangkaian arus DC dianggap sebagat nol volt dan dinamakan sebagai ground. Kemudian semua titik dalam rangkaian akan diukur tegangannya terhadap titik ground tersebut.
Sebuah baterei sama seperti suatu bendungan dimana di salah satu sisinya menyimpan energi, sementara di sisi lain potensialnya rendah (menjadi ground). Ketika ada jalur terbentuk antara dua sisi maka arus mengalir seperti halnya suatu bendungan yang pintunya dibuka sehingga air dapat mengalir melalui saluran. Jika tidak ada jalur terbentuk antara dua sisi maka energi akan tetap tersimpan menunggu ada jalur terbentuk dari sisi yang satu ke ke sisi yang lain.
Tegangan adalah ukuran relatif seberapa besar potensial listrik pada suatu titik dibandingkan titik lain yang menjadi acuan (biasanya adalah ground) dengan satuan pengukuran yaitu volt (V). Arus listrik akan mengalir dari titik yang potensialnya tinggi ke titik yang potensialnya rendah. Jika suatu titik tegangannya 5 V sedangkan titik lain tegangannya 0 V dan ada kabel penghantar menghubungkan keduanya, maka arus listrik akan mengalir dari titik yang tegangannya 5 V ke titik yang tegangannya 0 V.
Pengukuran tegangan dapat menunjukkan perbedaan potensial antara dua titik.Jika titik A tegangannya 10 V (terhadap titik acuan) dan titik B tegangannya 2 volt (terhadap titik acuan yang sama) maka berarti tegangan antara titik A dan B adalah 8 V (yaitu dari 10 V dikurangi 2 V). Biasanya tegangan terendah dalam suatu rangkaian arus DC dianggap sebagat nol volt dan dinamakan sebagai ground. Kemudian semua titik dalam rangkaian akan diukur tegangannya terhadap titik ground tersebut.
Sebuah baterei sama seperti suatu bendungan dimana di salah satu sisinya menyimpan energi, sementara di sisi lain potensialnya rendah (menjadi ground). Ketika ada jalur terbentuk antara dua sisi maka arus mengalir seperti halnya suatu bendungan yang pintunya dibuka sehingga air dapat mengalir melalui saluran. Jika tidak ada jalur terbentuk antara dua sisi maka energi akan tetap tersimpan menunggu ada jalur terbentuk dari sisi yang satu ke ke sisi yang lain.