14. ADC 실습 Atmega3282023. 12. 16. 21:38
/**************
ADC 실습
**************/
#include <mega328p.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h> //sprintf 명령어
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
unsigned int adc_value; //
unsigned char sbuf[16]; //사용자 지정 16비트 변수, LCD표시용
DIDR0=(0<<ADC5D) | (0<<ADC4D) | (0<<ADC3D) | (0<<ADC2D) | (0<<ADC1D) | (0<<ADC0D);
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
lcd_init(16);
while (1)
{
lcd_clear();
adc_value=read_adc(0);
lcd_gotoxy(0,0);
lcd_putsf("ADC_LCD TEST");
lcd_gotoxy(0,1);
sprintf(sbuf,"value=%4d",adc_value);
lcd_puts(sbuf); //LCD에 표시
delay_ms(50);
}
}//
'Atmega328' 카테고리의 다른 글
| 15. ADC 실습2 (1) | 2023.12.16 |
|---|---|
| 14. lcd_puts/putsf 실습 (0) | 2023.12.16 |
| 13. lcd_clear( ); 실습 (0) | 2023.12.15 |
| 12. lcd_puts( ); 실습 (0) | 2023.12.15 |
| 11. lcd_putchar( ); 실습 (0) | 2023.12.15 |
