Sistem Minimum AVR

Mei 23, 2010

Download Skematik

Kompas Magnetik

Mei 19, 2010
Kompas merupakan alat untuk navigasi untuk penunjuk arah, dalam blog ini menyajikan kompas magnetik sebagai penunjuk arah yang biasa di gunakan pada robot KRCI sebagai navigasi robot pada arah mana. Penggunaan kompas CMPS03 menggunakan jalur I2C. Mikrokontroller yang saya gunakan adalah AVR ATmega16 dan bahasa C.

Beberapa komponen saya tambahkan dalam kompas ini untuk komunikasi kompas dengan mikrokontroller AVR ATmega16.
modul kompas membutuhkan tegangan 5 V pada nominal 15mA karena menggunakan I2C kita menggunakan 5 jalur sajah yaitu :

  1. VCC + 5 V pada pin 1
  2. SCL dengan Full_Up resistor 10 K
  3. SDA dengan pull_Up resistor 10 K
  4. Calibrate pada PIN 6 yang terhubung swicth tactile
  5. Ground pada PIN9

untuk melihat hasil pembacaan di tampilkan pada LCD 2×16 carakter pada PORT C.
nah jika sudah terhubung semuanya coba masukan program berikut ini :

#include <mega16.h)
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h)
// LM75 Temperature Sensor functions
#include <lm75.h)
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h

void convertToLCDStr(unsigned char inByte)
{
unsigned char data;

data = inByte / 100;
data+=0x30;
lcd_putchar(data);

inByte%=100;
data = inByte / 10;
data+=0x30;
lcd_putchar(data);

inByte%=10;
data = inByte + 0x30;
lcd_putchar(data);
}

void main(void)
{
// I2C Bus initialization
i2c_init();

// LCD module initialization
lcd_init(16);

while (1)
{

lcd_gotoxy(0,0);
i2c_start();
i2c_write(0xC0); // alamat CMPS03 & operasi tulis
i2c_write(1); // register 1 yang ingin diakses untuk bearing byte
i2c_start();
i2c_write(0xC1); // alamat CMPS03 & operasi baca
convertToLCDStr(i2c_read(0)); // baca tanpa sinyal ACK
i2c_stop();
};
}

Compile download kan ke Mikro AVR ATmega16 anda, lihat hasil yang di tampilkan pada LCD anda jika kurang cocok anda calibrate kompas dengan cara :
jalibarasi CMPS03, agar benar sesuai dengan sudut data sheet maka arahkan pada utara

Tekan swcth tictale dengan 4 arah yaitu Utara, Timur, selatan dan barat. masing dapat 1 kali swcith sajah. hasil kalibrasi akan di simpan di EEPROM kompas itu sendiri.
begitulah kira untuk bahasan sederhana kali ini untuk aplikasi pada robot agar lebih kompleks lagi akan saya bahas berikutnya.

ADC 

Mei 19, 2010

(ADC) Analog Digital Converter
kita langsung aja ya kita bahas tentang ADC dengan aplikasinya kalo mau tiori” di browsing aja di gogle banyak koq. sekarang kita akan membuat ADC pake potensio aja dengan tampilan LCD.

Nah kalo udah di buat kayak gini hubungkan dech di PORT ADC nya si mikro. kalo udah kita buat programnya pake codevision AVR :

1. Setting ADC nya dulu

Setting di CV AVR kayak gini ya..
trus kita buat tampilan LCD di PORTC aja seperti ini :

nah kalo udah kedua tab itu di setting kita buat program nya alias nambahin doank sih..soalnya CV avr udah nyediain library yang cukup buat kita tambahin dikit doang :
begini kira-kira prgramnya

/********************************
//ADC pake Potensio
*********************************/
#include (mega16.h> // tandanya buka kurungnya di ganti ya.. jadi < #include (stdio.h>
#include (delay.h>

#asm
.equ __LCD_port=0x15
#endasm
#include (lcd.h>

#define ADC_VREF_TYPE 0x00
unsigned int read_adc (unsigned char adc_input)
{
ADMUX=adc_input|ADC_AREF_TYPE;
ADCSRA|=0x40;
while ((ADCSRA & 0x01) = =0);
ADCSRA|=0x01;
return
}
void main (void)
{
char lcd_buffer[33]
float Technokit;
unsigned int temp;
ACSR=0x81;
SFIOR=0x00;
ADMUX=ADC_AREF_TYPE;
ADCSRA=0x87;
lcd_init (16);

while (1)

{
temp=read_adc(0);
Technokit=((float)temp*0,000488 // perhitungan dengan kristal yang di hunakan
lcd_gotoxy(0,0);
sprintf(lcd_buffer,”Analog:%0.001f”,Technokit”);
lcd_puts(lcd_buffer);
temp=read_adc(0);
Technokit=((float) temp*1);
lcd_gotoxy(0,1);
sprintf(lcd_buffer,”DIGITAL:%f”,Technokit”);
lcd_puts(lcd_buffer);
delay_ms(1000);
};
}

selesai dech, kalo gitu coba compile trus downloadkan dech ke mikro bis tu coba di puter-puter potensio tadi yang udah ke hubung ke mikro dan VCC 5 volt.
jadi program itu kita pake 8 bit nah kalo ada kita inputkan tegangan 0 volt makan hasil konversinya menjadi 0 sajah nah kalo pake tegangan 5 volt maka akan menjadi 1023, sebenernya sih 1024. tapi kan kita ngitungnya dari 0 – 1023.. gitu ceritanya.

Sensor Suhu LM 35

April 24, 2010

LM 35 ini sejenis sensor yang dapat mengukur suhu panas yang akurat dalam pembacaan suhu panas pada sensor LM35.

Sensor LM35 memiliki sinyal berupa analog sehingga nilainya menjadi linier dan untuk mengetahui berapa niali yang akan di hasilkan setiap pemanasan per detiknya membutuhkan berupa ADC sebagai konversi dari suhu panas menjadi tegangan.

Aktifkan ADC pilih enable, tegangan referensi di ambil dari AVCC, clock 125.000 kHz. Setting LCD pada PORTC.
File>> generate save and exit.
Lakukan pengujian sensor menggunakan mikrokontroler :
– Siapkan Modul AVR
– Siapkan sensor LM 35 hubungkan pada PORTA.0
– Hubungkan LCD pada PORTC sebagai penampil suhu

– Hubungkan  kabel serial ke PC untuk tampilan menggunakan HyperTerminal

Download Program menggunakan LCD

Download Program menggunakan PC

RTC 1307

April 24, 2010

Real Time clock …

Gambar Skematik RTC – DS 1307.

Motor Servo

April 24, 2010

Motor Servo yang cocok untuk actuator robot , kemudahan dalam memprogram dan catu daya rendah sehingga menghemat baik untuk pin I/O  dan catu suplay nya.

motor servo terbagi menjadi  dua yaitu Servo Standar dengan putaran 180 derjaat dan servo kontinue dengan putaran 360 derajat.

PWM Motor DC

April 22, 2010

Pulse Width Modulation merupakan gelombangkotak dengan duty cyle tertentu menghasilkan beragai nilai yang benbeda-beda dari bentuk gelombang kotak.

PWM biasanya di gunakan untuk pengaturan kecepatan motor,

contoh rangkaian menggunakan Transistor.

prinsip keja adalah tranasitor tersebut sebagai saklar otomatis sehingga arus yang melewati dari VCC tersebut dapat di atur  besarnya sehingga putaran motor pun akan dapat di atur pula. tegangan yang masuk pada Colector transistor untuk di lewatkan pada Emiter dengan cara memicu pada bagian Basis Transistor. besar kecilnya tegangan pemicu akan mengahasil kan beasar kecilnya tegangan yang di leawatkan Transistor sehingga  kecepatan Putaran motor pun dapat di control melalui tegangan picu pada basis yang terhubung dengan mikrokontroler.

Rangkain Driver menggunakan 1 buah Transistor NPN  seperti gambar di Atas hanya dapat mengotor pada 1 arah putaran motor, nah jika anda membutuhkan 2 arajh putaran motor maka membutuhkan 2 buah Transistor NPN dan 2 buah Transistor PNP yang di bentuk H-bried, untuk rangkaian H-Bried terkadang di temukan banyak kendala dan tidak sempurnanya yang di hasilkan dari rangkaian itu di karenakan kesulitan dalam menentukan nilai Resistor sebagai pemicu., sering terjadi panas pada bagian transistor tersebut.

jika ada yang mudah kenapa yang repot-repot . driver motor yang sudah jadi berbentuk IC pun sudah banyak tersedia contoh L293, L298 .

Rankaian driver L208.

Rangkain Driver L298 memiliki 2 terminal output motor DC max 30 volt dengan 4 pengontrol arah dan 2 buah pengotrol PWM motor. driver ini sangat cocok untuk driver robot-robot.

contoh program sederhana untuk rangkaaian Driver L298.

#include <mega16.h>

#define cw1   PORTD.2 //cw  motor1

#define ccw1 PORTD.3 //ccw motor1

#define cw2   PORTD.6 //cw  motor2

#define ccw2 PORTD.7 //ccw motor2

void main(void) {

PORTD=DDRD=0xff; TCCR1A=0b10100011; TCCR1B=0b00000001;

OCR1A=1000; // PWM_Motor1

OCR1B=1000; // PWM_Motor2

cw1=0;ccw1=1;

cw2=1;ccw2=0;

}

ATmega16

April 21, 2010

AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis arsitektur RISC (Reduced Instruction Set Computer). Hampir semua instruksi dieksekusi dalam satu siklus clock. AVR mempunyai 32 register general-purpose, timer/counter fleksibel dengan mode compare,  interrupt internal dan eksternal, serial UART, programmable Watchdog Timer, dan  mode power saving, ADC dan PWM internal. AVR juga mempunyai In-System Programmable Flash on-chip yang mengijinkan memori program untuk diprogram ulang dalam sistem menggunakan hubungan serial SPI. ATMega16. ATMega16 mempunyai  throughput mendekati 1 MIPS per MHz membuat disainer sistem untuk mengoptimasi konsumsi daya versus kecepatan proses.

Beberapa keistimewaan dari AVR ATMega16 antara lain:
1.   Advanced RISC Architecture
130 Powerful Instructions – Most Single Clock Cycle Execution
32 x 8 General Purpose Fully Static Operation
Up to 16 MIPS Throughput at 16 MHz
On-chip 2-cycle Multiplier
2.   Nonvolatile Program and Data Memories
8K Bytes of In-System Self-Programmable Flash
Optional Boot Code Section with Independent Lock Bits
512 Bytes EEPROM  512 Bytes Internal SRAM
Programming Lock for Software Security

3.  Peripheral Features
Two 8-bit Timer/Counters with Separate Prescalers and Compare Mode

Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes

One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and  Capture Mode

Real Time Counter with Separate Oscillator Four PWM Channels
8-channel, 10-bit ADC
Byte-oriented Two-wire Serial Interface
Programmable Serial USART
4. Special Microcontroller Features
Power-on Reset and Programmable Brown-out Detection
Internal Calibrated RC Oscillator
External and Internal Interrupt Sources
Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby and Extended Standby
5. I/O and Package
32 Programmable I/O Lines
40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF
6.  Operating Voltages
2.7 – 5.5V for Atmega16L
4.5 – 5.5V for Atmega16

Pin-pin pada ATMega16 dengan kemasan 40-pin DIP (dual in-line package) ditunjukkan oleh gambar 1. Guna memaksimalkan performa, AVR menggunakan arsitektur Harvard (dengan memori dan bus terpisah untuk program dan data).

Port sebagai input/output digital ATMega16 mempunyai empat buah port yang bernama  PortA, PortB, PortC, dan PortD. Keempat port tersebut merupakan jalur  bi-directional dengan pilihan  internal pull-up. Tiap port mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf ‘x’mewakili nama huruf dari port sedangkan huruf ‘n’ mewakili nomor bit. Bit DDxn terdapat pada I/O address DDRx, bit PORTxn terdapat pada

I/O address PORTx, dan bit PINxn terdapat pada I/O address PINx. Bit DDxn dalam register DDRx (Data Direction Register) menentukan arah pin. Bila DDxn diset 1 maka  Px berfungsi sebagai pin output. Bila DDxn diset 0 maka Px berfungsi sebagai pin input.Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk mematikan resistor  pull-up, PORTxn harus diset 0 atau pin dikonfigurasi sebagai pin output. Pin port adalah  tri-state setelah kondisi reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port dari kondisi  tri-state  (DDxn=0, PORTxn=0) ke kondisi  output high (DDxn=1, PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up enabled  (DDxn=0, PORTxn=1) atau kondisi output low (DDxn=1, PORTxn=0).  Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah  strong high driver  dengan sebuah  pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1 untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pull-up ke kondisi output low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi  tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi transisi.

Download Data Sheet ATmega16

Download ATmega8535


Ikuti

Kirimkan setiap pos baru ke Kotak Masuk Anda.