MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR (ADC DAN APLIKASI TERMOMETER)
dins
DEPOK INSTRUMENTS
ADC
Konsep Dasar ADC ADC = Analog to Digital Converter Pengubah sinyal analog menjadi sinyal digital (bit) Rumus dasar ADC: Data_ADC = (Vin/Vref)*(Maksimal_Data_Bit) Vin = Tegangan analog input yang akan diubah ADC. Vref = Tegangan referensi yang dipakai oleh ADC sebagai acuan pengubah. Maksimal_Data_Bit = Kemampuan maksimal data yang dapat dihasilkan oleh ADC.
Fitur ADC µC. ATmega16A
8 Kanal ADC: PORTA.0 = ADC(0); PORTA.1 = ADC(1); PORTA.2 = ADC(2); PORTA.3 = ADC(3); PORTA.4 = ADC(4); PORTA.5 = ADC(5); PORTA.6 = ADC(6); PORTA.7 = ADC(7); Maksimal_Data_Bit = 10-bit = 0 – 1023 Vref ADC: VCC ½ VCC Aref Vin ADC = 0V – 5V
DI-Smart AVR.16 System (Sistem Plus µC. ATmega16A) RP1 D0
L6 PC2
L7 PC1
L8 PC0
VCC
JP3 LED CONNECTED
VCC
C11 1uF
2 6 16
C10 1uF
DB1 SERIAL
+ C12 1uF
+
+
1 2 3 4 5 6 7 8
PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7
14 15 16 17 18 19 20 21
X2 X1
12 13
PB0 (T0) PB1 (T1) PB2 (AIN0) PB3 (AIN1) PB4 (SS) PB5 (MOSI) PB6 (MISO) PB7 (SCK)
PA0 (ADC0) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7)
PD0 (RXD) PD1 (TDX) PD2 (INT0) PD3 (INT1) PD4 (OC1B) PD5 (OC1A) PD6 (ICP ) PD7 (OC2)
(TOSC2) PC7 (TOSC1) PC6 PC5 PC4 PC3 PC2 PC1 PC0
1
40 39 38 37 36 35 34 33
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
29 28 27 26 25 24 23 22
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
VCC PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
V+ VVCC GND
7
15
MAX232CPE
12 9 14 7 4 5
RXD SERIAL
X2 X1
RST
9
RESET
C13 1uF
X1
VCC
2
20pF C2
3
1K
POWER 9-12VDC
C3 RXD SERIAL PD0 RXD ISP
VCC + C5 10uF
S2
VCC 3
3
PD2
C7 + C6 100nF 100nF
PD2 S3 PD3
1 2 3 4 5 6 7 8 9 10
VCC
2 4 6 8 10
RXD ISP TXD ISP
4
RST
100nf
PD3 C4 470uF
2
+
+5V
PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7
9 6
JP1
JP2
1 2 3
1 2 3
TXD SERIAL PD1 TXD ISP
VR1 2
5
1 2 3 4 5 6 7 8 9 10 P3 PORTD
VCC
1 3 5 7 9
RST
W
AREF 2
1
Vin
GND
1
LM7805CT
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
P4 ISP PROG PB5 LED RST PB7 PB6
SW1
VCC
1 2 3 4 5 6 7 8 9 10
VCC
R1
20pF D1 4002
30
AVCC
C1
VCC PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7
31
AGND
Y1 11059200 X2
U0
32 AREF
AREF
10K 1
C9 1uF
R1 OUT R2 OUT T1 OUT T2 OUT C2+ C2 -
+
R1 IN R2 IN T1 IN T2 IN C1+ C1 -
1 2 3 4 5 6 7 8 9 10
P1 PORTB
P2 PORTC
U2 13 8 11 10 1 3
+
5 9 4 8 3 7 2 6 1
TXD SERIAL
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
P0 PORTA
AT MEGA
IC1
PC0
PC1
PC2
PC3
PC4
PC5
8
L5 PC3
D1
L4 PC4
D2
L3 PC5
D3
D4
L2 PC6 PC6
PC7
2 1
L1 PC7
D5
D0 D1 D2 D3 D4 D5 D6 D7
D6
D7
1 2 3 4 5 6 7 8 9
C17 100nF
POWER
R3
L10
2K2
VCC
DI-Smart AVR.16 System 1. 2. 3. 4. 5. 6. 7. 8. 9.
ATmega16A Crystal Reset ISP Power Vref ADC RS232 LED Array Push Button
3 4 1
PORTA = ADC
7 2 5
9
6
Vref
8
Pemrograman ADC pada CVAVR
Inisialisasi “Wizard” Pemilihan Vref VCC ½ VCC V@Aref Pemilihan Clock Aktivasi ADC
Pemrograman ADC Ditampilkan LCD (Setup “Wizard”)
2
1
4
3
Pemrograman ADC Ditampilkan LCD (Subprogram Hasil “Wizard”) read_adc(channel) adalah subprogram untuk membaca data dari kanal adc. Dengan channel adalah 0 – 7.
Pemrograman ADC Ditampilkan LCD (Inisialisasi ADC Hasil “Wizard”) Inisialisasi ADC sesuai dengan yang diinputkan saat Wizard.
Pemrograman ADC Ditampilkan LCD (Membaca dan Menampilkan ADC) [1/2]
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
Pemrograman ADC Ditampilkan LCD (Membaca dan Menampilkan ADC) [2/2]
unsigned char cstr[16];
unsigned int idata;
void main(void)
{
ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0xA6; SFIOR&=0x1F;
lcd_init(16);
while (1) { lcd_clear(); idata = read_adc(0); sprintf(cstr,"Data ADC: %04d",idata); lcd_puts(cstr); delay_ms(250); }
}
Aplikasi ADC “Termometer berbasis Sensor LM35DZ”
LM35DZ adalah sensor temperatur analog ekonomis namun cukup baik dalam mengukur temperatur. Jangkauan: 0 – 100 oC Sensitivitas: 10 mV/ oC Operasional: 4 – 30 V
Fungsi Transfer Sensor LM35DZ
Tinjau-ulang dasar ADC: Data_ADC = (Vin/Vref)*(Maksimal_Data_Bit) Data_ADC
= Hasil konversi ADC internal ATmega16A Vin = Tegangan LM35 Vref = Sesuai pengaturan di “Wizard” CVAVR = 5V Maksimal_Data_Bit = 10 Bit = 1023
Sensitivitas LM35 = 10 mV/ oC Temperatur terukur (T): T = (Vin/10 mV) oC T = ((Data_ADC*5V/1023)/10 mV) oC
“Termometer berbasis Sensor LM35DZ” (Skrip Program CVAVR) [1/3]
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
“Termometer berbasis Sensor LM35DZ” (Skrip Program CVAVR) [2/3]
unsigned char cstr[16], T; //T = Temperatur
unsigned int idata;
float fdata; //Nilai pecahan agar perhitungan baik.
void main(void)
{
ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0xA6; SFIOR&=0x1F;
lcd_init(16);
while (1) { lcd_clear(); idata = read_adc(0); sprintf(cstr,"Data ADC: %04d",idata); lcd_puts(cstr);
“Termometer berbasis Sensor LM35DZ” (Skrip Program CVAVR) [3/3]
}
fdata = (((float)idata*5)/1023)/0.01; T = (char)fdata; sprintf(cstr,"Temperatur: %02d C",T); lcd_gotoxy(0,1); lcd_puts(cstr); delay_ms(250); }
E-BOOK DINS
http://depokinstruments.com/category/3-e-book/