alexa-tracking
Kategori
Kategori
Home / FORUM / All / Hobby / Hobby & Community /
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
KASKUS
51
244
https://www.kaskus.co.id/thread/000000000000000002654259/hobby-elektronika-digital-microcontroller-amp-solder-menyolder-gabung-sini-yuks

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

DIGITAL ELECTRONICS HOBBY FORUM




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
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)



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(','emoticon-Wink;

if(pecahan <10) lcd_putc('0'emoticon-Wink;

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
×
GDP Network
© 2019 KASKUS, PT Darta Media Indonesia. All rights reserved
Ikuti KASKUS di