달력

11

« 2025/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2023. 12. 16. 21:38

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
:
Posted by gonlab