6. Akses ADC (Analog to Digital Converter)
6. Akses ADC (Analog to Digital Converter)

Sinyal

Sinyal adalah sekumpulan nilai yang merepresentasikan keadaan dari suatu variabel fisik. Kumpulan tersebut bisa berupa satu nilai yang kecil atau dapat juga memiliki banyak nilai sesuai yang diinginkan.

Dalam dunia rekayasa, kita biasanya menyusun nilai-nilai tersebut secara berurut, misalnya terhadap waktu, atau terhadap sebuah sumbu spatial untuk menampilkan informasi.

Variabel waktu dan spatial disebut variabel independen, karena mereka tidak dipengaruhi oleh perubahan variabel-variabel fisik lain. Misalnya, kita mengukur perubahan tegangan terhadap waktu. Tegangan diukur bergantung pada waktu yang nilainya tidak dipengaruhi variabel lain.


Sinyal Analog VS Sinyal Digital

Sinyal analog adalah sinyal yang memiliki nilai variabel fisik yang berubah secara kontinu terhadap variabel independennya. Contoh sinyal-sinyal analog adalah tegangan, aliran arus listrik, suara, pergerakan bintang-bintang, termometer, tekanan, dll.

Sinyal digital adalah sinyal yang mempunyai nilai variabel fisik yang ditentukan oleh nilai diskrit sesaat terhadap variabel independennya. Walaupun oleh mata manusia tampaknya kontinu tetapi sebenarnya sinyal ini berupa sinyal diskrit yang mempunyai titik-titik yang tersusun tidak kontinu.

Sinyal digital merupakan sinyal yang sangat penting karena semua sinyal yang direpresentasikan dalam sistem-sistem digital, komputer, dan mikrokontroler adalah dalam bentuk digital.

Pekerjaan yang paling penting adalah bagaimana melakukan representasisinyal analog menggunakansinyal digital dengantepat. Misalnya, suara manusia harus diubah menjadi sinyal digital yang sesuai sebelum diproses dengan rangkaian-rangkaian digital switching pada sistem komunikasi telepon.

Peran ADC sangat penting pada sistem-sistem digital yang berinteraksi dengan lingkungan analog. Proses yang terjadi dalam ADC adalah:

  1. Sampling (Pencuplikan)
  2. Quantization (Kuantisasi)
  3. Coding (Pengkodean)

.

Berikut ini Video Penjelasan Materi di atas:


1. Sampling

Sampling adalah proses pengambilan suatu nilai pasti (diskrit) pada suatu data kontinu dalam satu titik waktu tertentu dengan periode yang tetap. Kerapatan suatu sinyal (frekuensi) menentukan jumlah sample yang diperlukan untuk merekonstruksi sinyal secara tepat.

Laju sampling minimum dikenal dengan Nyquist Sampling Rate, yang menyatakan bahwa “frekuensi sampling minimal harus dua kali lebih besar dari frekuensi tertinggi dari sinyal yang di-'sampling' tersebut”.

Sampling sangat penting karena jika kita ingin merepresentasikan sebuah sinyal analog dalam suatu sistem digital, misalnya dalam komputer, kita harus menggunakan sampling rate yang tepat untuk meng-'capture' sinyal analog agar mendapatkan representasi yang tepat dalam sistem digital.

.

2. Quantization

Kuantisasi adalah proses memetakan/mengelompokkan kumpulan nilai yang lebih besar ke kumpulan nilai yang lebih kecil. Kuantisasi, dalam matematika dan pemrosesan sinyal digital, adalah proses pemetaan nilai input seperti nilai pembulatan.

Dalam proses kuantisasi, nilai amplitudo dapat dibulatkan ke atas atau ke bawah tergantung nilai terdekat yang telah ditentukan. Hasilnya adalah amplitudo sinyal yang awalnya memiliki banyak nilai menjadi sekumpulan nilai yang lebih kecil.

Pada gambar, n-bit digunakan untuk melakukan kuantisasi dari sebuah rentang nilai. Pada sistem digital, umumnya sinyal input adalah sinyal-sinyal tegangan yang kemudian dipetakan dalam rentang yang sudah ditentukan misalnya 5V. Dengan n-bit, anda dapat membagi rentang sinyal input dalam sebuah sistem digital menjadi 2n level kuantisasi.

.

3. Encoding

Encoding adalah mengodekan data hasil kuantisasi ke dalam bentuk digital (dalam suatu nilai biner) atau Proses pengkodean dari hasil kuantisasi menjadi bilangan biner digital.


Fitur-Fitur ADC

  • Resolusi 10 bit
  • Akurasi absolut ± 2 LSB
  • Waktu konversi ADC 13 siklus clock (65 – 260 μs)
  • 8 kanal input sebagai single ended yang termultipleks (dipakai bergantian)
  • 2 Kanal masukan diferensial dengan gain yang dapat dipilih 10x dan 200x*
  • Rentang masukan tegangan ADC adalah 0 sampai VCC
  • Disediakan tegangan referensi internal ADC 2,56V
  • Mode konversi kontinyu (free running) atau mode konversi tunggal (single conversion)
  • Sleep mode noise canceler

Waktu Konversi ADC Pada ATMEGA 16/32/8535

Waktu konversi adalah waktu yang diperlukan oleh ADC untuk mengubah masukan analog menjadi keluaran digital (biner). Waktu konversi dipengaruhi oleh sumber clock yang dihubungkan ke ADC, metode konversi yang digunakan, dan juga teknologi yang digunakan dalam pembuatan ADC seperti teknologi MOS atau TTL.

Waktu konversi yang diperlukan oleh ADC Atmega32/16 adalah 13 siklus clock (13 x Tclock). Sistem ADC dapat dijalankan dengan kecepatan yang lebih rendah dari sumber frekuensi utama mikrokontroler. Clock mikrokontroler utama dibagi menggunakan bit-bit Prescaler Select (ADPS[2:0]) di dalam register ADCSRA (ADC Control and Status Register A).

Arsitektur ADC Pada ATMEGA 16/32/8535

Untuk mikrokontroler AVR, ADC memerlukan frekuensi clock masukan lebih kecil dari 200 kHz untuk akurasi maksimum. Untuk memilih waktu konversi, kita dapat memilih salah satu dari fosc/2, fosc/4, fosc/8, fosc/16, fosc/32, fosc/64, atau fosc/128 untuk clock ADC, di mana fosc adalah kecepaan frekuensi kristal yang terhubung dengan chip ADC.

ADC dilengkapi dengan pengubah tunggal successive approximation. Hanya pada satu kanal tunggal ADC yang dapat dikonversi pada satu waktu. Masukan ADC dilengkapi dengan sebuah multiplekser analog delapan masukan. Masukan analog yang akan dikonversi dipilih menggunakan bit-bit MUX[4:0] di dalam ADMUX (ADC Multiplexer Selection Register), karena pengubah ADC dalam chip hanya satu buah sedangkan saluran masukannya ada delapan maka dibutuhkan multiplexer untuk memilih masukan pin ADC secara bergantian.

ADC memiliki sirkuit sample dan hold (menahan) tegangan masukan ADC, sehingga selama proses konversi keadaannya konstan. ADC mempunyai catu daya yang terpisah yaitu pin AVCC dan AGND, di mana AVCC tidak boleh berbeda ± 0.3V dari Vcc.

Respon sinyal sample & hold

Konversi ADC memerlukan tegangan referensi Vref dan clock ADC (register ADCSRA). Tegangan referensi eksternal dapat dihubungkan pada pin Aref dengan kapasitor untuk mengurangi noise. Atau dapat menggunakan tegangan referensi internal sebesar 2.56V (pin AREF diberi kapasitor secara eksternal untuk menstabilkan tegangan referensi internal). ADC mengkonversi tegangan masukan analog menjadi bilangan digital 10 bít. GND (0 volt) adalah nilai minimum yang mewakili ADC dan nilai maksimum ADC diwakili oleh tegangan pada pin AREF minus 1 LSB. Hasil konversi ADC disimpan dalam pasangan register ADCH:ADCL.


ADC Noise Canceler

Fitur ini mengaktifkan konversi ADC selama mode tidur (sleep mode) untuk mengurangi noise dari CPU dan modul-modul internal lainnya. ADC noise canceler dapat digunakan dengan ADC noise reduction dan idle mode. Berikut langkah-langkah untuk menggunakannya:

  1. Pastikan ADC diaktifkan dan tidak sedang mengkonversi. Diharuskan menggunakan mode konversi tunggal dengan interupsi  ADC conversion complete.
  2. Masuk ke mode ADC noise reduction (atau idle mode). ADC akan mulai mengkonversi sesaat setelah CPU berhenti (halt).
  3. Bila tidak ada interupsi lain yang terjadi sebelum konversi ADC selesai maka interupsi ADC akan membangunkan CPU dan mengeksekusi rutin interupsi ADC conversion complete. Bila ada interupsi lain yang membangunkan CPU sebelum konversi ADC selesai maka rutin interupsi yang membangunkan CPU akan dieksekusi dan interupsi ADC conversion complete akan dibangkitkan ketika konversi ADC selesai. CPU berada dalam mode aktif hingga instruksi sleep mode berikutnya dieksekusi.

Mode Konversi ADC

Pada mode konversi kontinu (free running), konversi dilakukan secara terus menerus di mana ADC membaca sampel tegangan input analog lalu dikonversi dan hasilnya dimasukkan ke register ADCH:ADCL secara terus-menerus. Bila kita membaca ADC ketika ADC sedang mengkonversi tegangan input analog, maka yang terbaca adalah hasil ADC yang terakhir yang dibaca oleh ADC.

Cara pemilihan ADC mode free running adalah dengan men-set bit ADATE dalam register ADCSRA dan ADTS2:0 =‘000’ pada register SFIOR. Konversi pertama dalam mode ini dimulai dengan menge-set bit ADSC. Dalam mode ini ADC bekerja secara independen (tidak bergantung) dari flag interupsi ADC (apakah ADIF set atau clear sama saja).

Pada mode konversi tunggal (single conversion) dilakukan pembacaan sampel tegangan masukan analog satu kali saja. Bila ingin membaca lagi, maka harus melakukan sampling lagi sehingga kita dapat mengkonversi tegangan masukan analog saat dibutuhkan saja. Mode konversi tunggal dipilih dengan mengatur bit ADATE = ‘1’ dalam register ADCSRA.

Pada mode konversi tunggal, konversi dimulai ketika bit ADSC di-set, dan bit tersebut tetap set sampai satu kali konversi selesai (complete). Kemudian secara otomatis CPU meng-clear kembali bit ADSC. Ketika konversi sedang berlangsung dan kita mengubah kanal masukan analog ADC, maka hal tersebut tidak akan diubah oleh CPU hingga konversi ADC kanal sebelumnya selesai


Register-Register ADC

Untuk menjalankan fitur konversi sinyal analog ke digital, maka diperlukan inisialisasi yang melibatkan proses penentuan clock, tegangan referensi , format output data serta mode pembacaan. Register yang terkait dengan penetapan inisialisasi tersebut adalah register ADMUX (ADC Multiplexer Selection Register), ADCSRA (ADC Control and Status Register A), dan SFIOR (Special Function IO Register)

Register ADMUX

Register ADMUX. adalah register 8 bit yang berfungsi menentukan tegangan referensi ADC, format data output dan kanal ADC yang akan digunakan.

  • Bit 7, Bit 6 - REFS1, REF0: Reference Selection. Bit-bit ini memilih tegangan referensi untuk ADC. Jika bit-bit ini diubah ketika sedang mengkonversi, perubahannya tidak akan berpengaruh sampai konversi tersebut selesai (ADIF set di dalam ADCSRA). Pilihan tegangan referensi internal tidak dapat digunakan jika tegangan referensi eksternal sedang terhubung ke pin AREF.
  • Bit 5 – ADLAR: ADC LeftAdjust Result. Bit ini mempengaruhi penyajian data hasil konversi ADC di dalam register data ADC (ADCH:ADCL). ADLAR = 1 --> rata kiri, ADLAR = 0 --> rata kanan.
  • Bits 4:0 – MUX4:0: Analog Channel and Gain Selection Bits. Untuk memilih channel ADC mulai ADC0 sampai ADC7. Bit-bit ini juga digunakan untuk memilih input komparator internal dengan gain yang berbeda-beda.

(1)The differential input channels are not tested for devices in PDIP Package. This feature is only guaranteed to work for devices in TQFP and MLF Packages.

.

Register ADCSRA

ADC Control and Status Register A,ADCSRA. Register ADCSRA adalah register 8 bit yang berfungsi melakukan manajemen sinyal kontrol dan status dari ADC.

  • Bit 7 – ADEN: ADC Enable, bit ini mengatur aktivasi ADC. Nilai awal bit ini adalah low(tidak aktif). Dengan memberikan high maka ADC aktif.
  • Bit 6 – ADSC: ADC Start Conversion. ‘1’ à mulai konversi, ‘0’ à belum terjadi konversi
  • Bit 5 - ADATE: ADC Auto Trigger Enable. Jika bit ini = ‘1’ maka auto trigger diaktifkan. Sumber trigger (rising edge) bisa dipilih dengan mengatur bit ADC Trigger Select ADTS dalam register SFIOR.
  • Bit 4 - ADIF: ADC Interrupt Flag. Diset ‘1’ jika konversi ADC selesai dan data register ter-update. Namun, ADC Conversion Complete Interrupt akan dieksekusi jika bit ADIE dan bit-I dalam register SREG diset ‘1’.
  • Bit 3 – ADIE: ADC Interrupt Enable. Bila bit ini = ‘1’ dan dan bit-I dalam register SREG diset ‘1’, maka ADC Conversion Complete Interrupt diaktifkan.
  • Bit 2, Bit 1, Bit 0 • ADPS2, ADPS1, ADPSO: ADC Prescaler Select Bit. Bit-bit ini menentukan faktor pembagian antara frekuensi XTAL dan clock masukan ke ADC. Frekuensi ADC tidak bisa lebih dari 200KHz.

.

Register Data ADC (ADCL dan ADCH)

Register Data ADC, ADCL dan ADCH. adalah register 10 bit yang digunakan untuk menyimpan hasil konversi ADC. Ketika konversi ADC selesai, hasil konversi disimpan pada kedua register ini (ADCH:ADCL). Jika digunakan differential channel, hasil konversi dinyatakan dalam bentuk komplemen-2.

Ketika ADCL dibaca, register data ADC tidak di-update hingga ADCH dibaca. Konsekuensinya, jika hasil diatur rata kiri dan tidak menggunakan presisi 8-bit (digunakan presisi 10-bit), maka cukup membaca ADCH. Jika Sebaliknya (rata kanan), maka ADCL harus dibaca pertama, kemudian ADCH.

Register SFIOR

Special Function I/O Register SFIOR. adalah register 8 bit yang berfungsi sebagai pengatur pemicu konversi ADC, apakah dari pemicu eksternal ataukah pemicu internal.

  • Bit 7..5 - ADTS[2..0]. adalah bit pengatur pemicu eksternal untuk konversi ADC. Bit-bit ini hanya berfungsi jika bit ADATE pada register ADCSRA bernilai high. Bit-bit ini bernilai awal 000 yang menandakan ADC bekerja pada mode konversi kontinu dan tidak ada interupsi yang akan dihasilkan.
  • Bit 4 – ADHSM: ADC High Speed Mode. Jika ADHSM = ‘1’ maka mode high speed diaktifkan.
  • Bit ACME, PUD, PSR2, dan PSR10 tidak diaktifkan saat melakukan operasi ADC.

Prosedur Pemrograman ADC Polling

  1. Atur pin kanal ADC sebagai input
  2. Aktifkan ADC (bit ADEN) pada register ADCSRA. Pilih kecepatan konversi menggunakan bit ADPS2:0, contoh: faktor pembagi 128
  3. Pilih tegangan referensi ADC menggunakan bit-bit REFS1 : REFS0 pada register ADMUX. Contoh: tegangan referensi AVCC
  4. Pilih kanal input ADC menggunakan MUX4 : 0 pada register ADMUX. Contoh: Kanal 0
  5. Sehingga nilai register ADCSRA = 0x87 dan ADMUX = 0x40.
  6. Mulai konversi dengan mengatur bit ADSC pada register ADCSRA. Contoh: ADCSRA |= (1<<ADSC);
  7. Tunggu hasil konversi hingga selesai dengan cara memantau bit ADIF dalam register ADCSRA dengan cara polling
  8. Ketika bit ADIF menjadi high, baca register ADCL dan ADCH untuk mendapatkan keluaran digital yang diharapkan
  9. Perhatikan bahwa anda harus membaca ADCL lebih dulu sebelum ADCH. Jika tidak maka hasilnya tidak valid
  10. Jika Anda ingin membaca kanal lagi, ulangi langkah 6.
  11. Jika Anda ingin memilih sumber tegangan referensi lain atau kanal masukan, maka ulangi langkah 3.

Dalam proses pembacaan hasil konversi ADC, dilakukan pengecekan bit ADIF pada register ADCSRA. ADIF akan bernilai satu jika konversi sebuah kanal ADC telah selesai dilaksanakan dan data hasil konversi siap untuk diambil, demikian pula sebaliknya. Selanjutnya data disimpan dalam dua buah register yaitu ADCH dan ADCL.

Contoh 1

Program berikut ini adalah program konversi sinyal analog ke digital dengan metode polling. Data analog dibaca dari kanal 0 dan keluaran digitalnya dikirim ke port B dan port D. Pemrosesan dilakukan berulang secara terus-menerus.

Program:

.

#include <avr/io.h> //Standard AVR header
#define F_CPU 8000000UL
int main (void)
{
	DDRB = 0xff; //inisialisasi port B sebagai keluaran
	DDRD = 0xff; //inisialisasi port D sebagai keluaran
	DDRA = 0x00; //inisialisasi port A sebagai masukan sinyal Analog
	ADCSRA = 0x87; //aktifkan ADC dan pilih prescaler 128
	ADMUX = 0x40; //memilih kanal 0 (masukan pada ADC0)dan Vref = AVCC
	//data rata kanan
	while (1)
	{
		ADCSRA |=(1<<ADSC); //aktifkan start konversi
		while ((ADCSRA & (1<<ADIF))==0) //jaga sampai hasil konversi digital selesai
		PORTD=ADCH; //kirimkan hasil konversi ke LED di port D
		PORTB=ADCL; //kirimkan hasil konversi ke LED di port B
	}
	return 0;
}

.

Video Demo:


PEMROGRAMAN ADC MENGGUNAKAN INTERUPSI 

Metode lain yang dapat digunakan untuk melakukan konversi sinyal analog ke digital yaitu dengan metode interupsi. Keuntungan konversi ADC cara interupsi adalah membebaskan prosesor dari keterikatan dalam memantau hasil konversi digital, sehingga prosesor dapat melakukan aktivitas yang lain tanpa harus memeriksa secara terus menerus sinyal “end of conversion” ADC.

Untuk memprogram ADC dengan metode interupsi, kita perlu melakukan setting HIGH pada bit ADIE. Ketika proses konversi telah selesai, maka bit ADIF (A/D InterruptFlag) berubah ke HIGH; jika ADIE = 1, maka dia akan memaksa CPU untuk melompat ke layanan interupsi ADC (InterruptADC Handler).

Contoh 2

Program berikut ini adalah program konversi sinyal analog ke digital dengan metode interupsi. Data analog dibaca dari kanal 0 dan keluaran digitalnya dikirim ke port B dan port D. Pemrosesan dilakukan berulang secara terus menerus.

.

Program:

.

#include <avr/io.h> //Standard AVR header
#define F_CPU 8000000UL
int main (void)	//GANTI CHANNEL 7
{
	DDRB = 0xff; //inisialisasi port B sebagai keluaran
	DDRD = 0xff; //inisialisasi port D sebagai keluaran
	DDRA = 0x00; //inisialisasi port A sebagai masukan sinyal Analog
	ADCSRA = 0x87; //aktifkan ADC dan pilih prescaler 128
	ADMUX = 0x47; //memilih kanal 7 (masukan pada ADC7)dan Vref = AVCC
	//data rata kanan
	while (1)
	{
		ADCSRA |=(1<<ADSC); //aktifkan start konversi
		while ((ADCSRA & (1<<ADIF))==0) //jaga sampai hasil konversi digital selesai
		PORTD=ADCH; //kirimkan hasil konversi ke LED di port D
		PORTB=ADCL; //kirimkan hasil konversi ke LED di port B
	}
	return 0;
}

.

Video Demo:


.

Program 3: 1 ADC Polling + LCD 16x2 Mode 4Bit

Semua link program lengkap dan library LCD 16x2 mode 4 bit terdapat pada bagian akhir pembahasan ADC.

Program:

.



#define F_CPU 8000000UL			/* Define CPU Frequency e.g. here 8MHz */
#include <avr/io.h>			/* Include AVR std. library file */
#include <util/delay.h>			/* Include Delay header file */
#include <stdio.h>		/* Include standard I/O header file */
#include <string.h>
#include "LCD_16x2_H.h"

void ADC_Init()
{
	DDRA=0x0;			/* Make ADC port as input */
	ADCSRA = 0x87;			/* Enable ADC, fr/128  */
	ADMUX = 0x40;			/* Vref: Avcc, ADC channel: 0 */
	
}

int ADC_Read(char channel)
{
	int Ain,AinLow;
	
	ADMUX=ADMUX|(channel & 0x0f);	/* Set input channel to read */

	ADCSRA |= (1<<ADSC);		/* Start conversion */
	while((ADCSRA&(1<<ADIF))==0);	/* Monitor end of conversion interrupt */
	
	_delay_us(10);
	AinLow = (int)ADCL;		/* Read lower byte*/
	Ain = (int)ADCH*256;		/* Read higher 2 bits and 
					Multiply with weight */
	Ain = Ain + AinLow;				
	return(Ain);			/* Return digital value*/
}

int main(void)
{
	int value;	
	char buffer[10];
	int8_t i = 0, count = 100;

	LCD_Init();
	ADC_Init();


	while (1)
	{
			value=ADC_Read(0);
			LCD_String_xy(0, 0, "Tes ADC 10-bit");
			sprintf(buffer, "%d    ",value);
			LCD_String_xy(1, 5, buffer);
			_delay_ms(300);
			LCD_Clear();
	}
}

.

Video Demo:


Program 4: 1 ADC Interrupt+ LCD 16x2 Mode 4Bit

Program:

.



#define F_CPU 8000000UL			/* Define CPU Frequency e.g. here 8MHz */
#include <avr/io.h>			/* Include AVR std. library file */
#include <util/delay.h>			/* Include Delay header file */
#include <stdio.h>		/* Include standard I/O header file */
#include <string.h>
#include "LCD_16x2_H.h"
#include <avr/interrupt.h>

int Ain,AinLow;
void ADC_Init_int()
{
	DDRA=0x0;			/* Make ADC port as input */
	sei();
	ADCSRA = 0x8f; //aktifkan ADC dan pilih prescaler 128
	ADMUX = 0x40; // Vref = AVCC
	//data rata kanan
	ADCSRA |=(1<<ADSC); //aktifkan start konversi
}

void pilihChannel(unsigned char channel)
{
	ADMUX=ADMUX|(channel & 0x0f);	/* Set input channel to read */
}
ISR(ADC_vect)
{
	AinLow = (int)ADCL;		/* Read lower byte*/
	Ain = (int)ADCH*256;		/* Read higher 2 bits and 
					Multiply with weight */
	Ain = Ain + AinLow;				
	ADCSRA |= (1<<ADSC); // aktifkan start konversi
}

int main(void)
{
	int value;	
	char buffer[10];
	int8_t i = 0, count = 100;

	LCD_Init();
	ADC_Init_int();


	while (1)
	{
			pilihChannel(0);
			LCD_String_xy(0, 0, "ADC Int. 10-bit");
			sprintf(buffer, "%d    ",Ain);
			LCD_String_xy(1, 5, buffer);
			_delay_ms(300);
			LCD_Clear();
	}
}

Video Demo:


Program 5: 2 ADC Interrupt+ LCD 16x2 Mode 4Bit

Program:

.

#define F_CPU 8000000UL			/* Define CPU Frequency e.g. here 8MHz */
#include <avr/io.h>			/* Include AVR std. library file */
#include <util/delay.h>			/* Include Delay header file */
#include <stdio.h>		/* Include standard I/O header file */
#include <string.h>
#include "LCD_16x2_H.h"
#include <avr/interrupt.h>

int Ain, Ain0, Ain1, AinLow;
void ADC_Init_int()
{
	DDRA=0x0;			/* Make ADC port as input */
	sei();
	ADCSRA = 0x8f; //aktifkan ADC dan pilih prescaler 128
	ADMUX = 0x40; // Vref = AVCC
	//data rata kanan
	ADCSRA |=(1<<ADSC); //aktifkan start konversi
}

ISR(ADC_vect)
{
	AinLow = (int)ADCL;		/* Read lower byte*/
	Ain = (int)ADCH*256;		/* Read higher 2 bits and 
					Multiply with weight */
	Ain = Ain + AinLow;
	switch (ADMUX)
	{
		case 0x40:
			Ain0 = Ain;
			ADMUX = 0x41;
			break;
		case 0x41:
			Ain1 = Ain;
			ADMUX = 0x40;
			break;
		default:
			//Default code
			break;
	}				
	ADCSRA |= (1<<ADSC); // aktifkan start konversi
}

int main(void)
{
	int value;	
	char buffer[10],buffer2[10];

	LCD_Init();
	ADC_Init_int();

	while (1)
	{
			
			LCD_String_xy(0, 0, "ADC Int. 10-bit");

			_delay_ms(2);
			sprintf(buffer, "%d    ",Ain0);
			LCD_String_xy(1, 0, buffer);
			
			_delay_ms(2);
			sprintf(buffer2, "%d    ",Ain1);
			LCD_String_xy(1, 7, buffer2);
			
			_delay_ms(200);
			LCD_Clear();
	}
}

.

Video Demo:


.

Berikut ini Link Kumpulan semua Program:

https://drive.google.com/file/d/1WAOtNR_pDTiuMpIdjke-0eT7LiWKeyXF/view?usp=sharing

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *