회원가입 ID/PW 찾기
AA

Atmega16을 사용하고 있으며 다음과 같이 소스 코드를 간단하게 짜 보았습니다.

그런데 ADC값이 이상하게 나오더라구요~

무엇이 문제인지 좀 알고 싶습니다.

 

 

 

 

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>


void PORT_init(void);
void ADC_init(void);
void UART_init(unsigned int baud);
void UART_Tx(unsigned int data);
unsigned char UART_Rx(void);

 

void PORT_init(void) // 포트초기화
{

}


void ADC_init(void)  // ADC초기화
{
 ADMUX=0xC0; // 내부 vref 사용(2.56V), ADC0
    ADCSRA=0x87; 
  
}

void UART_init(unsigned int baud)
{
 UCSRA=0x00; // Normal 모드
    UCSRB=0x18; // TX/RX enable
    UCSRC="0x06;  // no parity, 1bit stop, 8bit data
    UBRRH=(unsigned int)0;     //수신속도 Max 1M(bps)설정
    UBRRL=(unsigned int)baud;  //주파수 16Mhz에서 Max값(Error=0%)
}

void UART_Tx( unsigned int data )
{
 while (!(UCSRA & 0x20));
 UDR = data;
}

unsigned char UART_Rx( void )
{
 while (!(UCSRA & 0x80));
 return UDR;
}


void main(void)
{
 
 int adc_val;
 int i;

 PORT_init();
 ADC_init();
 UART_init(103);


 while(1)
 {
  adc_val=0;

  
  for(i=0; i<16; i++)
  {
  
  ADCSRA |= 0x40;
  
  while((ADCSRA & 0x10) ==0x00);
  
  ADCSRA |= 0x10;

  adc_val=adc_val+(ADCL + ADCH*256);
 
  }
 
 adc_val=adc_val/16;

 UART_Tx(adc_val);
 _delay_ms(1000);
 UART_Tx(' ');

 

 }
}

댓글 1
  • No Profile

    adc_val 은 10bit의 데이터 값이고, UART_Tx의 인수는  8bit 값이라서. 256 이상의 값은 깨질것입니다.

    따라서 상위 8bit만 읽어서 처리하시던지..

    아니면 UART_Tx를 두번던지시셔서 받아서 처리하시던지 해야합니다.

     

    UART_Tx(adc_val  >> 2);     // 상위 8bit ADC 값

     

    또는

     

    UART_Tx(adc_val  / 0x100);    //상위 2bit ADC 값

    UART_Tx(adc_val % 0x100); //하위 8bit ADC 값

     

    이렇게 처리하시는 게 바람직하겠습니다.

     

    참고로 8bit ADC 로만 처리하실경우 ADCSRA의 ADLAR비트를 1로 하여 상위 8비트만 읽으면 8bit데이터로 쓰시기 편합니다.

     

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
마이크로프로세서 HOTADC관련 해서 질문이요~1 프로파일 2008 2011.08.25
931 마이크로프로세서 HOTstm32 uart 질문1 멍멍군 3704 2011.08.24
930 마이크로프로세서 HOT어제 질문한 3대 이상의 AVR 연결 다시 질문드려요 .3 sis0623 2198 2011.08.18
929 마이크로프로세서 HOTavr을 이용하여 아기의 울음소리를 입력받고 싶습니다.1 Floatin 1926 2011.08.18
928 마이크로프로세서 HOTCAN 통신에서 3개 이상의 AVR의 통신2 sis0623 2595 2011.08.17
927 마이크로프로세서 HOTdtmf 관련질문입니다.1 innercase 2247 2011.08.16
926 마이크로프로세서 HOTavr의 속도에 관한 질문.1 왕바리 2144 2011.08.16
925 마이크로프로세서 HOT외부 메모리 사용 컴맹9506 2059 2011.08.12
924 마이크로프로세서 HOTSD Card관련.2 HwangRoy 3243 2011.08.08
923 마이크로프로세서 HOTAT90CAN128 서로 CAN통신 하드웨어 연결 (완전초보)2 sis0623 4061 2011.08.05
922 마이크로프로세서 HOTICC V7 ATmege 2560 FFT 질문입니다.2 Gentlewolf 2675 2011.08.03
921 마이크로프로세서 HOTAVR aTmega128에서 Stepping Motor 돌려보려고 합니다.1 쿼코인 3002 2011.08.01
920 마이크로프로세서 HOT소프트웨어 필터 - 칼만 필터 문의1 만내 3132 2011.07.27
919 마이크로프로세서 HOT포텐쇼미터 adc 연결2 지에스 2388 2011.07.25
918 마이크로프로세서 HOTRF 모듈 질문요ㅠ 캐슬1 1924 2011.07.22
917 마이크로프로세서 HOTOR-CAD 회로도 PADS로 Import 중 애러 발생이 됩니다. 메갈로돈 2727 2011.07.21
916 마이크로프로세서 HOTATMEGA32 ADC 제어와 거리센서에 관한 질문입니다. 본능적으로 2235 2011.07.20
915 Software & IDEs HOTFreescale 질문인데 아시는 분 없나요? ㅠㅠ2 jzho 1555 2011.07.19
914 마이크로프로세서 HOTatmega 의 시리얼 통신을 이용하여 wifi를 제어하고 싶습니다..2 캐슬1 3696 2011.07.18
913 Software & IDEs HOTkey board 관련1 jjhuem 2453 2011.07.06
Prev 1 ... 7 8 9 10 11 12 13 14 15 16 ... 58 Next
  • 할수만 있다면 다른 사람들보다 더 현명하게 되라. 그러나 다른 사람들에게 그것을 말하지는 말라.
    - 체스터필드
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.