Archive for the ‘elektronics design’ Category
Hello World dengan WinAVR
Just a documentation.
Minggu Desember 14 2008/Surabaya
—————————- start of doc —————————-
WinAVR dengan IDE pemrograman Code Block
Beberapa software open source yang dibutuhkan:
- GNU AVR GCC Compiler, disini digunakan WinAVR20080610 (versi sesuai tanggal update terakhir)
- Download http://winavr.sourceforge.net/ (sekitar 22 MB)
- Install. (selalu ingatlah tombol Next, Accept, Agree, dan OK
) .Pilih saja direktori instalasi default agar mudah diingat, biasanya di dir utama= C:\WinAVR-20080610
2. Code::Block, sebuah IDE pemrograman untuk berbagai macam keperluan pemrograman , salah satunya bisa untuk IDE pemrograman mikrokontroler keluarga AVR.
- Download di www.CodeBlocks.Org (sekitar 11 MB)
- Install.
3. Buka Code::Block yang telah terinstall, lalu buat project baru (File->New->Project ). pada menu listbox terdapat beberapa pilihan tipe dari project yang bisa dibuat. Pilih “AVR Project”, lalu klik “Go”.
Read the rest of this entry »
Embedded Web Server untuk Monitoring dan Data Logging.
Sekarang ini banyak sekali macam Ethernet modul yang ada di pasaran yang sudah jadi dan pemakaiannya relatif mudah, seperti varian produk dari Wiznet. Tentu yang sudah jadi itu, harganya relatif lebih mahal dibanding kalau kita merakit sendiri !! . ENC28J60 dari Microchip bisa sebagai pilihan. IC ini adalah sebuah ethernet controller yang didalamnya terdapat Physical layer dan MAC
Interface barcode ke mikrokontroler AVR atmega.
Barcode Scanner banyak digunakan di toko-toko retail untuk men-scan barang barang yang akan dibayar pembeli di kasir atau digunakan di perpustakaan untuk mempercepat petugas mendaftar buku-buku yang akan dipinjam. Dengan adanya alat ini semuanya menjadi cepat dan mudah, karena setiap jenis barang memiliki kode barcode sendiri yang unik sehingga bisa dikelompokkan dengan mudah. Seperti halnya keyboard dan mouse , terdapat banyak macam tipe barcode scanner berdasarkan jenis komunikasinya, misalnya barcode scanner serial, PS/2, dan USB. Pada proyek kali ini barcode scanner PS/2 yang akan digunakan, sehingga penanganannya sama dengan keyboard PS/2. Komunikasi PS/2 adalah komunikasi serial asinkronous yang menggunakan 2 kabel yaitu data
dan clock.
Read the rest of this entry »
migrasi ke avr-gcc
selama ini menggunakan code vision untuk mrogram mikro,dan kebnyakan orang-orang disini juga memakainya,walaupun ada juga yang msih pakai assembly murni (so rarely),namun codevision adalah yang mayoritas.code vision itu mudah,ada code wizard,dan tentu saja ini bukan freeware.lalu apakah semua orang disini membayar untuk itu?, tidak tahu lah.. .
.di sisi lain ada yang freeware, yaitu win-avr (avr-gcc). rasa-rasanya sejak dulu memang ingin mencoba yang satu ini.dan sekarang aku telah mnggunakanya penuh.apa perlu uninstall code vision?tidak perlu …,yang terjadi terjadilah…
IDE bisa menggunakan AVR-studio atau codeblock atau juga bisa eclypse.tapi sekarang ini makai avrstudio,karena memang aselinya ini digunakan untuk mikro keluarga ATmel.
untuk menggunakan bahasa C di avr studio, perlu diinstal win-avr dan tentu saja Avr studio. Avrstudio tidak mendukung programer dengan pararel port jadi untuk mendownload file HEX,perlu program luar.
banyak program downloader yang bisa digunakan, saat ini saya menggunakan Pony programer.
—-mencoba dan menikmati—-(di sela sela waktu dikejar deadline)
update 14 des 08 : Documentation, berisi penggunaan WinAVR dengan macam IDE pemrograman
rute menuju mana
ADC pada uC AVR ATMEGA16(dan untuk type yang lain),
26/12/07, tft-LGoffice Bekasi
Atmega16 (dan sejenisnya) memiliki fitur ADC sebanyak 8 channel dengan resolusi 10-bit Register yang digunakan untuk setting ADC ini adalah:
+————————————————————————————————————-+
ADCSR | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 |
+————————————————————————————————————–+
7 6 5 4 3 2 1 0
ADEN : 1=adc enable, 0=adc turn off
ADSC : 1:mulai konversi,0:konversi belum terjadi
ADATE:1:auto trigger di aktifkan ,trigger berasal; dari sinyal yang dipilih(set pada register SFIOR bit ADTS).ADC akan start konversi pada edge positip sinyal trigger.
ADIF:di set ke 1,jika konversi ADC selesai dan data register ter-Update.Namun ADC Conversion Complete Interrupt di eksekusi jika bit ADIE dan bit-I dalam register SREG di set.
ADIE:di set 1,jika bit-I dalam register SREG di set.
ADPS0:2 ,faktor pembagi 0-7 = 2 2 4 8 16 32 64 128.
+————————————————————————————————————-+
ADMUX | REFS1 | REFS0 | ADLAR | MUX4 | MUX3 | MUX2 | MUX1 | MUX0 |
+————————————————————————————————————–+
7 6 5 4 3 2 1 0
REFS 0,1 :pemilihan tegangan referensi ADC
00:vref=AREF, 01:vref=AVCC dengan eksternal capasitor pada AREF, 10:Vref= Reserved , 11: vref= internal 2.56 volt dengan eksternal kapasitor pada AREF
ADLAR:
Untuk setting format data hasil konversi ADC,default=0.
MUX0-MUX4 :pemilihan channel ADC yang digunakan
0=channel1,1=channel 2,dst.
+————————————————————————————————————-+
SFIOR | ADTS2 | ADTS1 | ADTS0 | ADHSM | ACME | PUD | PSR2 | PSR10 |
+————————————————————————————————————–+
7 6 5 4 3 2 1 0
ADTS0-ADTS2 :pemilihan trigger untuk konversi ADC.bit-bit ini berhubungan dengan bit ADATE pada register ADCSRA.
ADHSM:ADC high speed mode enabled.
àlebih jelas baca datasheet
Contoh:
Inisialisasi:
ADMUX=0x00; //channel 0 ADCSRA=0x8F;//ADEN=1,pembagi XTAL =128 jadi beroperasi pada f= 93.750 kHz SFIOR&=0xEF; ADCSRA|=0x40;
Pada rutin Interrupt:
unsigned char chan; //nomer chanel adc
char lcd_buffer[33];
float temp;
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data,Rconversi;
unsigned char cdata[10];
adc_data=0;
// Read the AD conversion result
adc_data=ADCW; //ambil data
if(chan==0)
{
temp = ((float)ADCW * 0.0048875); //kalibrasi ke scale 5 volt
lcd_gotoxy(0,0);
sprintf(lcd_buffer,"volt: %0.0001f V ",temp); //1 angka di belakang koma
lcd_puts(lcd_buffer);
delay_ms(50);
chan=1;
ADMUX=0x01;
ADCSRA|=0x40; //next conversion
}
else
{
if(chan==1)
{
temp = ((float)ADCW * 0.0048875); //kalibrasi ke scale 5 volt
lcd_gotoxy(0,1);
sprintf(lcd_buffer,"volt: %0.0001f V ",temp);
lcd_puts(lcd_buffer);
delay_ms(50);
chan=0;
ADMUX=0x00;
ADCSRA|=0x40; //next conversion
}
}
}
Setting perintah sprintf() pada codevisionAVR:
Project|Configure|C Compiler tab|pada (s)printf edit box->float, width, precision
Program diatas menggunakan mode free running, ADC interrupt terjadi jika konversi data selesai. Data lalu di konversi ke tegangan(Range input 0 – 5 volt) . AREF di hubungkan AVCC.dipakai 2 channel,Channel 0 dan 1.Data tegangan lalu di displaykan ke LCD 16×2 yang terhubung pada PORT C.hasilnya cukup teliti,error 0,02 %.(dibandingkan dengan Voltmeter Asli).
-eof-
Timer di AVR
Timer dalam embendded system sangat banyak kegunaannya.Itulah karenanya setiap mikrokontroler terdapat fitur timer. Mikrokontroller AVR keluaran Atmel memiliki beberapa timer(ATmega16 dalam hal ini,tipe lain yang lebih tinggi sama ,kecuali penambahan jumlah timernya),diantaranya timer0(8 bit),timer1(16 bit),dan timer2(8 bit).
Timer0 dan timer2(8 bit).
timer ini menghitung maksimal 255 hitungan.dimana periode setiap hitungan(detaknya) tergantung dari setting prescaler-nya. Untuk mengatur timer mode operasi apa yang digunakan dan mengatur prescaler digunakan register TCCRx(x=0,2).TCCRx adalah register 8 bit sebagai berikut:
FOC0 WGM00 COM01 COM00 WGM01 CS2 CS1 CS0
7 6 5 4 3 2 1 0
CS0,CS1,CS2 digunakan untuk pengaturan prescaller, misalnya
0 0 0 : timer dihentikan jika diset nilai ini
0 0 1 : sekali detaknya sama dengan detak oscillator crystal yang digunakan
0 1 0 : sekali detaknya sama dengan oscillator/8.misalnya oscilator 8 MHZ,maka sekali detak 1 perlu 1 mikrodetik.atau pada hitungan maksimal 255 us.
(atau clock berdetak 8 kali,timer baru sekali)
ànilai cs0,1,2 lain dapat dilihat di datasheetnya.
WGM00 dan WGM 01 digunakan untuk mode operasi dari timer,
Mode-Mode kerja Timer
1.mode normal,timer digunakan untuk ngitung saja,membuat delay,menghitung selang waktu .
2.mode PWM,phase correct
3.CTC,dalam mode ini ,nilai timer yang ada pada TCNTx akan di nol-kan lagi jika TCTx sudah match dengan nilai yang ada pada register OCRx.sebelumnya OCR diset dulu,.karena timer0 dan 2maksimumnya 255,maka range OCR 0-255.
4.Fast PWM
COM00,01:tergantung mode apa yang digunakan(nilaiWGM),COM00,01 untuk pengaturan lebih spesifik suatu mode timer.
Jadi hal utama jika akan menggunakan tiemr adalah setting TCCRx-nya,digunakan untuk mode apa(secara default,adalah sebagai mode normal).dan ketika saat timer jalan,jumlah hitungannya dapat dilihat Di register TCNTx.
Jika menggunakan compiler Seperti CodeVision ,penggunaannya auto generated,namun walaupun begitu ketika troubleshoot program setting manual adalah penting.
Interrupt Timer
1.Overflow Interrupt,akan terjadi interrupt jika TCNTx mencapai 255 untuk timer0 dan timer2 ,dan 65535 untuk timer1.
2.Compare Match interrupt,terjadi jika nilai OCR sama dengan TCNTx
Contoh Aplikasi:
1. Jam digital.
Digunakan Compare Match Interrupt,menggunakan crystal 12 MHZ,digunakan timer 0
Dengan prescaller Osc/8: 12mhz/8=1,5 mhz periode 1/1,5mhz==sekitar 100 us,jadi agar setara 1 detik harus dikali 10000.
Register OCR=0×96.
Output :tampilan Jam:Menit:Detik pada port C yang terhubung dengan LCD 2×16
/*********************************************
Project : jam digital
Date : 7/13/2007
Author : edee
Chip type : ATmega16
Program type : Application
Clock frequency : 12.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <mega16.h>
#include <stdlib.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0×15
#endasm
#include <lcd.h>
unsigned int kdetik=0,detik=0,menit=0,jam=0;
unsigned char cdetik[10],cmenit[10],cjam[10];
// interrupt jika compare match
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
TCNT0=0; //jika sudah compare match,set awal lagi
if(++kdetik==10000)
{
if(++detik==60)
{ detik=0;
lcd_clear();
if(++menit==60)
{ menit=0;
lcd_clear();
if(++jam==24)
{
jam=0;
lcd_clear();
}
}
}
kdetik=0;
itoa(detik,cdetik);
itoa(menit,cmenit);
itoa(jam,cjam);
lcd_gotoxy(9,0);
lcd_putsf(“:”);
lcd_gotoxy(10,0);
lcd_puts(cdetik);
lcd_gotoxy(6,0);
lcd_putsf(“:”);
lcd_gotoxy(7,0);
lcd_puts(cmenit);
lcd_gotoxy(4,0);
lcd_puts(cjam);
lcd_gotoxy(0,1);
lcd_putsf(“= Jam Digital =”);
}
}
void main(void)
{
//PA.5,6,7 input,dengan pull up
PORTA=0xE0;
DDRA=0×00;
PORTB=0×00;
DDRB=0×00;
PORTC=0×00;
DDRC=0×00;
PORTD=0×00;
DDRD=0×00;
//timer 0 sumber 12mhz/8=1,5 mhz periode 1/1,5mhz
TCCR0=0×02;
TCNT0=0×00;
OCR0=0×96; //sekitar 100us
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;
// interrupt timer digunakan
TIMSK=0×02;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0×80;
SFIOR=0×00;
lcd_init(16);
#asm(“sei”)
while (1)
{
};
}
2.Pengukur selang waktu
Dalam aplikasi ini timer digunakan untuk mengukur selang waktu dua kejadian,dimulai start dan stop(tanpa menggunakan interrupt apapun)
Deklarasi awal:
#define TSTART() TCCR1B = 0×02
//stop timer
#define TSTOP() TCCR1B = 0×00
#define TRESET() TCNT1=0×00
#define THABIS 65000
Penggunaan di program:
TSTART();
while(PINB.0!=1) //jika syarat stop terpenuhi
{
hitung++;
if(hitung==THABIS) //sampai nilai max
{ //j=0; // return 0;
break;
}
}
TSTOP();
t=TCNT1;
akhir2 ini sering pake timer.
AVR development board,memulai avr dengan otodidak
Memulai belajar mikro,langkah pertama,buat dulu board-development nya.atau dapat juga dengan mencoba-coba fitur nya dulu dengan software simulasi mikrokontroler seperti Proteus.(saya sendiri belum pernah makai,belum tak install lagi). menurutku kalau belajar ya langsung saja secara real , pengalaman nyata mrogram dan melihat hasil itu sangat berbeda dengan hanya simulasi, setidaknya mendapat tingkat semangat yang beda.
Board Avrku:
fitur board:
-Avr Atmega 16 atau 32 -8 led simulator
-16×2 LCD -Serial Com
-8 Dip Switch -3 Push Button
-In system Programmer
update 10/01/09:
Download [rangkaian+pcb]
ilmu teknik
ternyata semua ilmu teknik itu dapat diringkas
hanya dalam beberapa kata saja:
-logika
-imanjinasi untuk mengembangkan logika yang kaku
dan sebagian besar teknik elektro itu melibatkan
logika untuk pemrograman
tapi ada sedikit pengecualian
yaitu elektronika analog
walaupun logika sudah benar
dengan pengecekan beberapa kali
belum tentu bisa!!
tapi elka analog itu bukan ilmu mistic
tetep saja ilmu logis
yang dapat dijelaskan
berbeda dengan ilmu:
- agama
- filsafat
- ilmu silat
i don’t know
op amp
beberapa hari ini saya mencoba membuat amplifier,dengan penguatan 1000 kali.agar mudah saya menggunakan op amp.bagaimana hasilnya?.amplifiernya jalan. tapi tidak menunjukkan penguatan yang diinginkan.penguatannya tidak seribu kali.saya menggunakan input sinyal kotak frekuensi 40 khz,sekitar 500mV(sebenarnya ini terlalu besar),output nya cuma sekitar 2 volt.ketika frekuensinya input saya turunkan penguatanya semakin besar.dan (diturunkan dalam orde pengali 100k,10 k,1 k,hz).apa frekuensi 40khz sudah dianggap -frekuensi tinggi- oleh opamp.
lalu saya mengganti dengan opamp yang lain(sebelumnya lm324).saya ganti dengan 741 dengan single supply,dan 358.hasilnya sama saja.
tapi saya belum mencoba op-amp untuk frekuensi tinggi seperti lm8333,ataupun lf352,lf356.
perlu dicoba.

