Brise

[atmega128] adc 예제 본문

MCU

[atmega128] adc 예제

naudhizb 2017. 4. 22. 20:57
반응형
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
#define F_CPU 16000000UL
 
#include <avr/io.h>
#include <util/delay.h>
//#include <avr/delay.h>
#include "nb_adc.h"
 
 
void nb_sleep_ms(uint16_t ms){
    while(ms-- != 0)
        _delay_ms(1);
}
int main(){
    DDRA = 0xFF;
    PORTA = 0xFF;    
    adc_init();
 
    int16_t adc_value = 0;
    while(1){
        for(int i=0; i<4 ; i++){
            adc_value = adc_read();
            PORTA = (1 << i);
            nb_sleep_ms(adc_value);
        }
    }
    return 0;
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef NB_ADC_H
#define NB_ADC_H
 
#include <avr/io.h>
#include <avr/interrupt.h>
 
#include <stdio.h>
#include <stdint.h>
 
void adc_init();
uint16_t adc_read();
 
#endif
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "nb_adc.h"
 
 
void adc_init(){
    ADMUX = (0 << MUX4) | (0 << MUX3) | (0 << MUX2) | (0 << MUX1) | (0 << MUX0); // 단일전압입력방식 ADC0pin
    ADMUX = (0 << REFS1) |(0 << REFS0); // AVCC --> 5V
 
    ADCSRA |= (0 << ADFR); // ADC freerun disable
    ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);  // select adc clock scale
    ADCSRA |= (1 << ADEN) ; // enable adc
}
 
uint16_t adc_read(){
    uint16_t usResult = 0;
    ADCSRA |= (1 << ADSC);
    while(!(ADCSRA & (1<<ADIF)));
    usResult = ADC;
    return usResult;
 
}
 
cs




반응형
Comments