This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

2011/04/30

Membuat Robot Pencari Api Dengan Mikrokontroler ATMEGA 8535

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);
}
———

Pemrograman Bahasa C untuk AVR

 articles.jpgBahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler. Bahasa ini sudah merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Untuk mengetahui dasar bahasa C dapat dipelajari sebagai berikut.
1. Struktur penulisan program
#include < [library1.h] > // Opsional
#include < [library2.h] > // Opsional
#define [nama1] [nilai] ; // Opsional
#define [nama2] [nilai] ; // Opsional
[global variables] // Opsional
[functions] // Opsional
void main(void) // Program Utama
{
[Deklarasi local variable/constant]
[Isi Program Utama]
}

2. Tipe data
  • char : 1 byte ( -128 s/d 127 )
  • unsigned char : 1 byte ( 0 s/d 255 )
  • int : 2 byte ( -32768 s/d 32767 )
  • unsigned int : 2 byte ( 0 s/d 65535 )
  • long : 4 byte ( -2147483648 s/d 2147483647 )
  • unsigned long : 4 byte ( 0 s/d 4294967295 )
  • float : bilangan desimal
  • array : kumpulan data-data yang sama tipenya.

3. Deklarasi variabel & konstanta
  • Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.
    Penulisan : [tipe data] [nama] = [nilai] ;
  • Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah.
    Penulisan : const [nama] = [nilai] ;
  • Tambahan:
    Global variabel/konstanta yang dapat diakses di seluruh bagian program.
    Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya.
4. Statement
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:
suhu=adc/255*100; //contoh rumus perhitungan suhu
 
5. Function
Function adalah bagian program yang dapat dipanggil oleh program utama.
Penulisan :
[tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2])
{
[statement] ;
}
 
6. Conditional statement dan looping
if else : digunakan untuk penyeleksian kondisi
if ( [persyaratan] ) {
[statement1];
[statement2];
}
else {
[statement3];
[statement4];
}
for : digunakan untuk looping dengan jumlah yang sudah diketahui
for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) {
[statement1];
[statement2];
}
while : digunakan untuk looping jika dan salama memenuhi syarat tertentu
while ( [persyaratan] ) {
[statement1];
[statement2];
}
do while : digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun min 1 kali
do {
[statement1];
[statement2];
}
while ( [persyaratan] )
switch case : digunakan untuk seleksi dengan banyak kondisi
switch ( [nama variabel] ) {
case [nilai1]: [statement];
break;
case [nilai2]: [statement];
break;
}

7. Operasi logika dan biner
  • Logika
    AND :&&
    NOT : !
    OR : ||
  • Biner
    AND : &
    OR : |
    XOR : ^
    Shift right: >>
    Shift left : <<
    Komplemen : ~
8. Operasi relasional (perbandingan)
  • Sama dengan : ==
  • Tidak sama dengan : !=
  • Lebih besar : >
  • Lebih besar sama dengan : >=
  • Lebih kecil : <
  • Lebih kecil sama dengan : <=
9. Operasi aritmatika
  • + , - , * , / : tambah,kurang,kali,bagi
  • += , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator
  • % : sisa bagi
  • ++ , -- : tambah satu (increment) , kurang satu (decrement)
  • Contoh :
    a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30
    a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30x5 = 150.
    a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33.
    a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6.
    a-- ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4.
 
Ditulis oleh: Tim Prasimax

Rangkaian Sistem Minimum AVR 8535

Rangkaian Sistem Minimum AVR 8535 solusi.jpgSistem 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:
  • 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) 
Selain itu tentunya diperlukan power suply yang bisa memberikan tegangan 5V DC.
Rangkaian sistem minimum ini sudah siap untuk menerima sinyal analog (fasilitas ADC) di port A. Gambar rangkaiannya adalah sebagai berikut.
 
Active Image
 
 
Ditulis oleh: Tim Prasimax

Arsitektur Mikrokontroler AVR

Arsitektur Mikrokontroler AVR
pastarchives.jpg 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.
 
Active Image
 
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)
Sedangkan ATmega8535 banyak digunakan untuk sistem yang kompleks, memiliki input sinyal analog, dan membutuhkan memori yang relatif lebih besar. Berikut adalah feature-feature mikrokontroler seri ATmega8535.
  • 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 
 
Active Image
 
 
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.
Active Image
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.
 
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.

Mikrokontroler AVR

Overview Mikrokontroler AVR
 Active Image 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. 
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.
 
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

Pemrograman AT89S51 bahasa Assembly

Pemrograman AT89S51 bahasa Assembly
Active Image 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).
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.
Active Image
 
3. User dapat langsung mengcompile program dengan sekali klik icon Build (F9). Ketika ada kesalahan maka user dapat langsung ditunjukkan letak dan jenis kesalahan.
Active Image
 
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).
Active Image
 
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

ARUS DAN TEGANGAN

Arus dan Tegangan
web_links.jpg 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.
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.
 
de01.gif

 
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.