- Beranda
- Hobby & Community
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
...
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Proyek2 micro yg sudah jadi
I.N.D.E.X F.O.R.U.M
Biar ngiler, ane kasih contoh hasil karya TS...
.

Spoiler for apa aja sih yang dibahas?:
Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":
UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Spoiler for Buka Jika Mau Paket Belajar:
Proyek2 micro yg sudah jadi
Quote:
I.N.D.E.X F.O.R.U.M
Quote:
Biar ngiler, ane kasih contoh hasil karya TS...
Spoiler for Contact TS lewat dimari yahh:
.
Diubah oleh ahocool 14-06-2025 11:27
0
1M
8.6K
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.5KThread•7.2KAnggota
Tampilkan semua post
TS
ahocool
#2954
Memanfaatkan ADC dari AVR
Sudah beberapa rekan meminta untuk dibahas mengenai ADC, dan akhirnya aku bikin juga tutorialnya. Tutorial ini maen comot sana-sini di internet, sebab memang cukup banyak artikel/blog di internet yg ngebahas ADC.
seri AVR yg memiliki ADC yg ada dipasaran adalah : ATtiny26, Mega8/8535/16/32 etc . Umumnya seri yg umum dipasaran memiliki lebih dari satu port ADC dengan resolusi 10bit
sebelumnya kita bahas dulu ADC....ADC dulunya terpisah dari micro, biasanya jaman tahun 2000 kebawah kita harus menggunakan ADC terpisah (contoh ADC 0808) yg selanjutnya akan diolah oleh kontroller. contoh rangkaiannya seperti ini, TS inget dulu pernah praktikum bikin voltmeter trus dibaca melalui paralel port PC
ADC 0808 ini memiliki resolusi 8 bit, jadi hasil pengukuran secara digital 0-254
jika AVR memiliki resolusi 10 bit, jadi biner pengukuran 0-1023.
Jadi resolusi menentukan kepekaan dari pembacaan ADC, semisal jika 8 bit dan range pengukuran 0-5V maka perubahan 1bit = 5/253 = 19,6 mV. Jika ADC 10 bit maka perubahan 1bit = 5/1023 = 4,9 mV
ADC akan meminta untuk diberikan tegangan Vref, yg merupakan tegangan cuplik referensi dari analog input. Seinget saya ADC 0808 membutuhkan tegangan referensi Vmax/2 , jadi jika range tegangan 0-5v maka perlu dikasi Vref 2.5 V.
Untuk AVR dapat dipilih tegangan Vref internal (2.56v), VCC sebagai Vref atau Vref external. Kali ini kita menggunakan mode yg paling sederhana yaitu Vref=Vcc , mode pembacaan sekali dan IC yg dipilih adalah ATMEGA 8.
untuk rangkaian pertama, kita akan mencoba mebuat pembacaan tegangan pada TRIMPOT 10K, dimana berfungsi sebagai voltage divider dan dibaca oleh ADC port 0. Tampilannya akan dikirim menuju LCD 2x16 baris
INGAT karena memakai LCD, maka sebaiknya baca terlebih dulu pembahasan menulis di LCD
siapkan rangkaian berikut (klik buat gambar lebih gede)
![kaskus-image]()
selanjutnya kita bahas satu persatu codingnya :
I. Insialisai
II. Pembacaan data ADC
III. Script Merubah Binner ke ascii
karena pembacaan ADC berupa binner, maka perlu dirubah menjadi ASCII dan dapat langsung ditampilkan ke LCD. Sebenernya WinAVR string.h memiliki fungsi "itoa" / integer to ascii, tetapi memakan memory yg lebih dan konversinya hanya 1 saja
IV. Program Utama
hasil dari skematik & coding diatas dapat dilihat pada gambar berikut :
![kaskus-image]()
Selamat Mencoba
Sudah beberapa rekan meminta untuk dibahas mengenai ADC, dan akhirnya aku bikin juga tutorialnya. Tutorial ini maen comot sana-sini di internet, sebab memang cukup banyak artikel/blog di internet yg ngebahas ADC.
seri AVR yg memiliki ADC yg ada dipasaran adalah : ATtiny26, Mega8/8535/16/32 etc . Umumnya seri yg umum dipasaran memiliki lebih dari satu port ADC dengan resolusi 10bit
sebelumnya kita bahas dulu ADC....ADC dulunya terpisah dari micro, biasanya jaman tahun 2000 kebawah kita harus menggunakan ADC terpisah (contoh ADC 0808) yg selanjutnya akan diolah oleh kontroller. contoh rangkaiannya seperti ini, TS inget dulu pernah praktikum bikin voltmeter trus dibaca melalui paralel port PC
ADC 0808 ini memiliki resolusi 8 bit, jadi hasil pengukuran secara digital 0-254
jika AVR memiliki resolusi 10 bit, jadi biner pengukuran 0-1023.
Jadi resolusi menentukan kepekaan dari pembacaan ADC, semisal jika 8 bit dan range pengukuran 0-5V maka perubahan 1bit = 5/253 = 19,6 mV. Jika ADC 10 bit maka perubahan 1bit = 5/1023 = 4,9 mV
ADC akan meminta untuk diberikan tegangan Vref, yg merupakan tegangan cuplik referensi dari analog input. Seinget saya ADC 0808 membutuhkan tegangan referensi Vmax/2 , jadi jika range tegangan 0-5v maka perlu dikasi Vref 2.5 V.
Untuk AVR dapat dipilih tegangan Vref internal (2.56v), VCC sebagai Vref atau Vref external. Kali ini kita menggunakan mode yg paling sederhana yaitu Vref=Vcc , mode pembacaan sekali dan IC yg dipilih adalah ATMEGA 8.
untuk rangkaian pertama, kita akan mencoba mebuat pembacaan tegangan pada TRIMPOT 10K, dimana berfungsi sebagai voltage divider dan dibaca oleh ADC port 0. Tampilannya akan dikirim menuju LCD 2x16 baris
INGAT karena memakai LCD, maka sebaiknya baca terlebih dulu pembahasan menulis di LCD
siapkan rangkaian berikut (klik buat gambar lebih gede)

selanjutnya kita bahas satu persatu codingnya :
I. Insialisai
Code:
#define F_CPU 1000000UL //clock mega8 internal default
#include <string.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include "lcd.h" //library lcd milik pfleury
void initADC() //inisialisasi mode ADC dari mega8
{
ADMUX=(1<<REFS0);// Aref=AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}
II. Pembacaan data ADC
Code:
uint16_t ReadADC(uint8_t ch)
{
//pemilihan Ch ADC 0-7
ch=ch&0b00000111;
ADMUX|=ch;
//mulai konversi
ADCSRA|=(1<<ADSC);
//tunggu sampai konversi selesai
while(!(ADCSRA & (1<<ADIF)));
//bersihkan ADIF untuk pembacaan selanjutnya
ADCSRA|=(1<<ADIF);
//kembalikan nilai pembacaan ADC
return(ADC);
}
III. Script Merubah Binner ke ascii
karena pembacaan ADC berupa binner, maka perlu dirubah menjadi ASCII dan dapat langsung ditampilkan ke LCD. Sebenernya WinAVR string.h memiliki fungsi "itoa" / integer to ascii, tetapi memakan memory yg lebih dan konversinya hanya 1 saja
Code:
void reverse(char s[])
{
int c, i, j;
for (i = 0, j = strlen(s)-1; i < j; i++, j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) // record sign
n = -n; // make n positive
i = 0;
do { // generate digits in reverse order
s[i++] = n % 10 + '0'; // get next digit
} while ((n /= 10) > 0); // delete it
if (sign < 0)
s[i++] = '-';
s[i] = '\0'; // add null terminator for string
reverse(s);
}
IV. Program Utama
Code:
int main(void)
{
uint16_t baca,decimal,pecahan;
char dum;
//Inisialisasi LCD (dibahas di tutorial laen)
lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts("TEST ADC ATMEGA8");
initADC(); //panggil inisialisai ADC
while(1)
{
baca=ReadADC(0); // baca ADC di port 0 , putar-putar trimpot
// mencari nilai decimal dan pecahan
// range 0-5V dengan resolusi 10 bit = 1023 step
// jadi tiap step = 4,9 mili volt
//kalibrasikan dengan nilai VCC yg sebenarnya
\t decimal= (baca * 4.9)/1000 ;
\t pecahan= ( ((baca * 4.9) - (decimal * 1000) ) /10);
//tampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts("Nilai=");
itoa(decimal,&dum);
\t lcd_puts(&dum);
\t lcd_putc(',';
if(pecahan <10) lcd_putc('0';
itoa(pecahan,&dum);
\t lcd_puts(&dum);
\t lcd_puts(" V ");
_delay_ms(100); //kasi delay sebentar
}
return 0;
}
hasil dari skematik & coding diatas dapat dilihat pada gambar berikut :

Selamat Mencoba
0

;