회원가입 ID/PW 찾기
AA

----------------------------------------------------------------------------------------------------
| 1. 컴파일러등의 개발환경 : avr studio 4
| 2. 회로나 소스코드의 제어목적:  온도센서 값을 하이퍼 터미널로 출력하려고 함
| 3. 증상과 예상되는 문제점 : 터미널내 값이 제대로 출력이 안됩니다. 왜 그럴까요.
| PF7에 온도센서 V out 값을 입력시켰습니다.
----------------------------------------------------------------------------------------------------

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

unsigned int baudrate[15] = {832, 416, 207, 138, 103, 68, 51, 34, 25, 16, 8, 7, 3, 1, 0};
unsigned char temp;
unsigned int temp00;
float adc0;
char value[32];

void serial0_init(void)
{
DDRE = 0xfE;
UBRR0H = baudrate[2]>>8;
UBRR0L = baudrate[2];
UCSR0A = 0x02;
UCSR0B = 0x18;
UCSR0C = 0x06;
temp = UDR0;
}

void adc_init() {
  ADMUX= 0x01;        // ADC0(PF0)핀, AVCC 단자, 단극성 입력
  ADCSRA= 0x8C;       // ADC Enable, ADC Interrupt Enable, 16분주(1MHz)
}

SIGNAL(SIG_ADC) {               // ADC 완료 인터럽트
  temp00 =  ADCL;                 // ADCL 먼저 읽기
  temp00 += (ADCH<<8);
  adc0= temp00;
}

void tx_char(unsigned int tx_data)
{
  //시리얼포트로 데이터 송신이 완료되고 송신버퍼가 준비되었는지 검사
  while((UCSR0A&0x20) == 0x00);
  UDR0 = tx_data; //시리얼 포트를 통하여 데이터 전송
}

 

void tx_string(unsigned char *str_data)
{
  while(*str_data != 0x00){  //문자열의 끝부분이 아니라면
    tx_char(*str_data);      //시리얼포트로 한개의 문자를 송신한다.
    str_data++;
  }
}

int main(void)
{
unsigned char i;
float temperature= 0;
adc_init();
serial0_init();
//sei();

while(1)
{

    temperature= 100*adc0/204.8-3;
    sprintf(value,"ADC0 : %4d\n",adc0);
    //sprintf(value,"temperature : %03d℃\n",temperature);
 //sprintf(value,"%03d℃\n",temperature);
 //printf("hello?\n");
 //sprintf(value,"degree %d\n",temperature);

    tx_string(value);    // PC 로 송신 
    tx_char(0x0A);
    tx_char(0x0D);
// 0.5sec 마다 실행 동작 이곳에 넣기
 _delay_ms(2500);
 _delay_ms(2500);

//temp = serial_rx();
//serial_tx(temp);
}

return 0;
}

댓글 3
  • No Profile

    어떤 온도센서인지 설명부터 해주셔야겠는데요;;
    기본적으로 원하는 데이터를 하이퍼터미널로 전송하는 것은 되는건가요?
    소스중에 의심구역을 하이라이트 해주시면 감사하겠습니다.

  • No Profile
    AD 컨버터가 필요한 거 보니 기본적인 LM35 센서 같은데요
  • No Profile
    ADC start를 주지 않은 것 같네요.
    ADC interrupt가 걸리는지 확인해 보세요.
    그리고 평균을 계산하는 방법이 틀린 것 같네요...
    ADCH<<8이면 ADCH가 8bit이므로 그 결과가 0일텐데..
    프로그램을 좀더 세밀하게 확인을 하셔야 할 듯합니다. 중간 중간에 debugging 를 넣어 확인하심이...

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

search
번호 분류 제목 글쓴이 조회 수 날짜
3 머신러닝, AI & 알고리즘 HOT오목 게임 알고리즘3 새로운하늘 4178 2010.03.29
2 머신러닝, AI & 알고리즘 HOT지하철 최단거리 알고리즘은?2 지워나 3678 2008.06.20
1 머신러닝, AI & 알고리즘 HOT순차 프로그램에 대한 간단한 알고리즘과 재귀 알고리즘의 속도 테스트 - by 아크마7 아크마 3936 2007.08.08
  • 사랑은 왕궁에서뿐 아니라 오두막집에서도 산다.
    - J.레이
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.