반응형

 

 

 

  1. /* 
  2.  * ADC.c 
  3.  * 
  4.  * Created: 2015-03-03 오전 12:37:57 
  5.  *  Author: webnautes 
  6.  */   
  7.     
  8.     
  9. #define F_CPU 16000000UL  
  10.     
  11. //1. baud rate 선택  
  12. #define USART_BAUDRATE 9600  
  13.     
  14. //2.시스템 클록과 원하는 baud rate 이용하여 UBRR 값을 계산한다.  
  15. #define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)  
  16.     
  17.     
  18. #include <avr/io.h>  
  19. #include <stdio.h>  
  20.     
  21.     
  22.     
  23. void adcInit(void)  //ADC 기화 함수
  24. {  
  25.     ADCSRA |= ((1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)); //16Mhz/128 = 125Khz  
  26.     ADMUX |= (1<<REFS0);       //AVCC(5V)  
  27.     ADCSRA |= (1<<ADEN);      //ADC 인에이블  
  28. }  
  29.     
  30. uint16_t readAdc(uint8_t channel)  //값을 읽어오는 함수
  31. {  
  32.         
  33.     ADMUX &= 0xF0;  
  34.     ADMUX |= channel;  
  35.         
  36.     ADCSRA |= (1<<ADSC);      //변환 시작  
  37.     while(ADCSRA&(1<<ADSC));//변환 완료되기를 기다림.  
  38.         
  39.     return ADCW;  //ADC 반환  
  40. }  
  41.     
  42.     
  43. void usartInit()  
  44. {  
  45.     //3. UBRR0 16비트 레지스터이기 때문에 8비트씩 나누어서 넣어야 한다.  
  46.     UBRR0H = (uint8_t)(UBRR_VALUE>>8);  
  47.     UBRR0L = (uint8_t) UBRR_VALUE;  
  48.     
  49.     //4. USART 설정  
  50.     UCSR0C |= (1<<UCSZ00)|(1<<UCSZ01); //Charecter size : 8비트  
  51.     UCSR0C &= ~(1<<USBS0); //stop  bit : 1비트  
  52.     UCSR0C &= ~((1<<UPM01)|(1<<UPM00)); // no parity mode  
  53.         
  54.     //5. 송수신을 가능하게 한다.  
  55.     UCSR0B=(1<<RXEN0)|(1<<TXEN0);  
  56. }  
  57.     
  58.     
  59. void uart_putchar(uint8_t u8Data, FILE *stream )  
  60. {  
  61.     //이전 전송이 끝나기를 기다림  
  62.     while(!(UCSR0A&(1<<UDRE0))){};  
  63.         
  64.     UDR0 = u8Data;  
  65. }  
  66.     
  67. uint8_t uart_getchar( FILE *stream)  
  68. {  
  69.     // 수신 되기를 기다림  
  70.     while(!(UCSR0A&(1<<RXC0))){};  
  71.         
  72.     return UDR0;  
  73. }  
  74.     
  75. //http://www.appelsiini.net/2011/simple-usart-with-avr-libc  
  76. FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);  
  77. FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ);  
  78.     
  79. int main(void)  
  80. {  
  81.     usartInit();  
  82.     stdout = &uart_output;  
  83.     stdin  = &uart_input;  
  84.             
  85.     adcInit();  
  86.             
  87.         
  88.     while(1)  
  89.     {  
  90.         int value =  readAdc(0);  
  91.         printf( "%d \r\n", value );  
  92.     }  
  93. }  
반응형

'AVR > Atmega128 강좌' 카테고리의 다른 글

Atmega328 보드 만들기 - 회로 및 부품 확인  (0) 2015.10.25
AVR에서 Timer 사용하기  (2) 2015.10.03
AVR 예제2– 세븐 세그먼트  (0) 2015.03.02
AVR 예제 1 – LED 깜빡이기  (0) 2015.03.01
AVR에서 I2C 사용하기  (2) 2015.02.22

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts