0% menganggap dokumen ini bermanfaat (0 suara)
528 tayangan5 halaman

ADC ATMega 16

Diunggah oleh

Rebu Ni Dinur
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
528 tayangan5 halaman

ADC ATMega 16

Diunggah oleh

Rebu Ni Dinur
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 5

Mengakses ADC pada AVR 

ATMega16
Posted: June 13, 2009 by ADIHOLIX in AVR Project
6

ADC digunakan untuk mengubah input analog(tegangan kontinyu) menjadi data digital(ex:
10110011) atau binary. pada uC ATMega16 sudah terintegrasi ADC 8 input dengan resolusi
sebesar 10 bit didalamnya sehingga

kita bisa memanfaatkannya tanpa menggunakan IC ADC tambahan + menghemat


pengeluaran. ADC pada uC ATMega16 berada di PORTA.

pada project ini input menggunakan potensiometer sebagai simulasi tegangan dari sensor atau
bisa juga misalkan anda menggunakan sensor suhu LM35 sebagai input. Vinput dimasukkan
pada PORTA.0 ATMega16. Aref dan AVcc dihubungkan ke Vcc 5 volt. Tampilan pada
project ADC ini menggunakan LCD 16×2 yang dihubungkan ke PORTC.

dibawah ini adalah sourcecode untuk mengakses ADC ATMega16 yang ditulis dalam bahasa
C dengan compiler CodeVisionAVR :

view source
print?
001 /*****************************************************
002 This program was produced by the
003 CodeWizardAVR V1.25.3 Professional
004 Automatic Program Generator
005 © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
006  
007 http://www.hpinfotech.com
008  
009 Project :
010 Version :
011 Date    : 1/16/2009
012 Author  : Greenblack
013 Company : LakoV
014 Comments:

015  
016 Chip type           : ATmega16
017 Program type        : Application
018 Clock frequency     : 11.059200 MHz
019 Memory model        : Small
020 External SRAM size  : 0
021 Data Stack size     : 256
022 *****************************************************/
023  
024 #include <mega16.h>
025 #include <stdio.h>
026 #include <delay.h>
027  
028 // Alphanumeric LCD Module functions
029 #asm
030 .equ __lcd_port=0x15 ;PORTC
031 #endasm
032 #include <lcd.h>
033  
034 #define ADC_VREF_TYPE 0x00
035  
036 // Read the AD conversion result
037 unsigned int read_adc(unsigned char adc_input)
038 {
039 ADMUX=adc_input | (ADC_VREF_TYPE &amp; 0xff);
040 //delay for ADC stabilization

041 delay_us(10);
042 // Start the AD conversion
043 ADCSRA|=0x40;
044 // Wait for the AD conversion to complete
045 while ((ADCSRA &amp; 0x10)==0);
046 ADCSRA|=0x10;
047 return ADCW;
048 }

049  
050 // Declare your global variables here
051  
052 void main(void)
053 {
054 // Declare your local variables here
055 char lcd_buffer[33];
056 float vinput;
057 unsigned int dataadc;
058  
059 // Input/Output Ports initialization
060 // Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
061
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T
062
State0=T
063 PORTA=0x00;
064 DDRA=0x00;

065  
066 // Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
067
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T
068
State0=T
069 PORTB=0x00;
070 DDRB=0x00;

071  
072 // Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
073
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T
074
State0=T
075 PORTC=0x00;
076 DDRC=0x00;

077  
078 // Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
079
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T
080
State0=T
081 PORTD=0x00;
082 DDRD=0x00;

083  
084 // Timer/Counter 0 initialization
085 // Clock source: System Clock
086 // Clock value: Timer 0 Stopped
087 // Mode: Normal top=FFh
088 // OC0 output: Disconnected
089 TCCR0=0x00;
090 TCNT0=0x00;
091 OCR0=0x00;
092  
093 // Timer/Counter 1 initialization
094 // Clock source: System Clock
095 // Clock value: Timer 1 Stopped
096 // Mode: Normal top=FFFFh
097 // OC1A output: Discon.
098 // OC1B output: Discon.
099 // Noise Canceler: Off
100 // Input Capture on Falling Edge
101 // Timer 1 Overflow Interrupt: Off
102 // Input Capture Interrupt: Off
103 // Compare A Match Interrupt: Off
104 // Compare B Match Interrupt: Off
105 TCCR1A=0x00;
106 TCCR1B=0x00;
107 TCNT1H=0x00;
108 TCNT1L=0x00;
109 ICR1H=0x00;
110 ICR1L=0x00;
111 OCR1AH=0x00;
112 OCR1AL=0x00;
113 OCR1BH=0x00;
114 OCR1BL=0x00;
115  
116 // Timer/Counter 2 initialization
117 // Clock source: System Clock
118 // Clock value: Timer 2 Stopped
119 // Mode: Normal top=FFh
120 // OC2 output: Disconnected
121 ASSR=0x00;
122 TCCR2=0x00;
123 TCNT2=0x00;
124 OCR2=0x00;

125  
126 // External Interrupt(s) initialization
127 // INT0: Off
128 // INT1: Off
129 // INT2: Off
130 MCUCR=0x00;
131 MCUCSR=0x00;
132  
133 // Timer(s)/Counter(s) Interrupt(s) initialization
134 TIMSK=0x00;
135  
136 // Analog Comparator initialization
137 // Analog Comparator: Off
138 // Analog Comparator Input Capture by Timer/Counter 1: Off
139 ACSR=0x80;
140 SFIOR=0x00;
141  
142 // ADC initialization
143 // ADC Clock frequency: 691.200 kHz
144 // ADC Voltage Reference: AREF pin

145 // ADC High Speed Mode: Off


146 // ADC Auto Trigger Source: None
147 ADMUX=ADC_VREF_TYPE &amp; 0xff;
148 ADCSRA=0x84;
149 SFIOR&amp;=0x10;
150  
151 // LCD module initialization
152 lcd_init(16);

153  
154 while (1)       // looping forever
155 {
156 // Place your code here
157 dataadc=read_adc(0);
158 vinput=((float)dataadc*0.0048828125);
159 lcd_gotoxy(0,0);
160 sprintf(lcd_buffer,"Volt :%0.0002f V",vinput);
161 lcd_puts(lcd_buffer);
162 printf("%0.0002f",vinput);
163 delay_ms(300);
164  
165 };
166 }

Anda mungkin juga menyukai