회원가입 ID/PW 찾기
AA

안녕하세요

현재 사용 AVR : ATmega128
프로그램 : AVR Studio

ADC3 에 가변저항을 연결하였습니다. 그리고 PORTB 에 DAC0800 을 연결해서

가변저항 0V~5V까지 변화를 주었을때 DAC 출력에서 0V~10V로 출력되록 프로그램과

회로를 만들었습니다.  즉 가변저항이 5V일때 DAC 출력은 10V가 되도록 할려고 합니다.

 

AREF 단자는 GND와 104로 연결하였고 AVCC단자는 5V을 연결하였습니다.

 

그런데 가변저항이 1.25V 가 되었을때 DAC 출력이 10V가 됩니다. 여기서 가변저항값을

더올리면 DAC 출력값이 0V로 떨어지고 계속 가변저항 값을 올리면 다시 10V로 올라갑니다.

가변저항이 5V가 될때까지 이런 현상이 3번 반복 하는데 이유를 모르겠습니다.

최종적으로가변저항이 5V가 되었을때는 DAC 출력값을 10V로 출력 됩니다.

 

 

프로그램

#include <avr/io.h>

void MCU_initialize(void) // ATmega128 초기화
{
 MCUCR = 0x80;   // enable external memory and I/O
 XMCRA = 0x44;   // 0x1100-0x7FFF=1 wait, 0x8000-0xFFFF=0 wait
 XMCRB = 0x80;   // enable bus keeper, use PC0-PC7 as address

 DDRB = 0xFF;   // PORTB 출력
 PORTB = 0x00;

 DDRF = 0x00;   // PORTF 입력
 PORTF = 0x00;
}

void Delay_us(unsigned char time_us)  // time delay for us
{
 register unsigned char i;
 for(i = 0; i < time_us; i++)   // 4 cycle +
 {
  asm volatile("PUSH R0");   // 2 cycle +
  asm volatile("POP  R0");   // 2 cycle +
  asm volatile("PUSH R0");   // 2 cycle +
  asm volatile("POP  R0");   // 2 cycle +
  asm volatile("PUSH R0");   // 2 cycle +
  asm volatile("POP  R0");   // 2 cycle = 16 cycle = 1 us for 16MHz
 }
}

void Delay_ms(unsigned int time_ms)  // time delay for ms
{
 register unsigned int i;
 for(i = 0; i < time_ms; i++)
 {
  Delay_us(250);
  Delay_us(250);
  Delay_us(250);
  Delay_us(250);
 }
}

int main(void)
{
 unsigned char i;
 unsigned int sum;
 unsigned char volt;


 MCU_initialize();  // MCU 초기화
 Delay_ms(50);

 ADCSRA = 0x85;   // ADC enable, 500kHz
 ADMUX = 0x43;   // select ADC3 with AVCC
 Delay_us(150);

 while(1)
 {
  sum = 0;

  for(i=0; i<16; i++)  // 16번 ADC 값을 읽는다
  {
   ADCSRA = 0xD5;  // start conversion and clear ADIF
   while((ADCSRA & 0x10) != 0x10);
   sum += ADCL + ADCH*256; // 16번 읽은 값들을 모두 더한다
   Delay_ms(1);
  }

  sum = sum >> 4;  // 16번 읽었으므로 16으로 나눠서 평균값 계산
  volt = sum >> 2;  // PORTB의 출력이 8비트 이므로 10비트를 8비트로 변환
  PORTB = volt;   // PORTB로 출력

  Delay_us(10);

 }
}

댓글 1
  • No Profile

    음...잠시..예전 기억이 나서..한 글짜 올려봅니다. ..시간이 오래 지나서 이미 해결 하셨을 지도 모르겠지만.

    AD값이 잘 받아진다면 문제는 크게 2가지로 가정해 볼 수 있습니다.

    소프트웨어적인 문제 와 하드웨어적인 문제죠...너무 당연한가요? ㅡㅡ

     

    우선 소프트웨어적인 문제로 발생할 수 있는 부분은  제가 봤을때 크게 문제되는 부분이 보이진 않습니다.

    ADCSRA, ADMUX 셋팅 값들은 제가 지금 데이터 쉬트를 보고 있지 않아서 확신은 못하구요. 이 레지스터 설정값들이 문제가 없다 라고 가정할 때,

    굳이 애매할 가능성이 있는 라인을 꼽자면 sum += ADCL + ADCH*256 이정도 일 건데요. 만일 ADCH값이 상상외로 큰값이되버리면 16번 더했을 때 문제가 있을 수도 있죠.  sum += ADCL + ((ADCH&0x03)*256)  정도로 확실하게 적어주는게 좋지 않을까 싶습니다. ==> 근데 사실 이건 문제가 아닐 가능성이 많습니다.

     

    두번째로 하드웨어적인 부분으로 발생할 수 있는 부분인데요..(제 생각은 이쪽에 무게가 더 실리는 군요.)

    ADC 전압이 0에서 5V 으로 변할 때 3번정도 10V가까이 떴다는 이야기는 ..DAC 데이터 포트의 6번과 7번 혹은 5번과 7번 ..

    정도가 어딘가에서 붙어있지 않나 생각됩니다. 말씀하신 증상이 그런경우에 좀 발생했었던 기억이 있군요..

    하드웨어 데이터 출력단의 쇼트 상태를 다시 한번 잘 확인해 보시면 어떨까 싶습니다.

     

    P.S. : 상상만으로 답변을 작성하는 것은 상당히 힘들군요..ㅡㅡ

     

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

search
번호 분류 제목 글쓴이 조회 수 날짜
353 전기전자 아무거나 HOTFPGA로 7_세그먼트 0~9까지 반복해서 켜기1 라인걸어서 2713 2011.04.11
352 전기전자 아무거나 HOT자기수역학 효과(맛과 현기증) 승아므 1957 2011.04.06
351 전기전자 아무거나 HOT회로도 보고 이해할려면 어떤 공부가 필요한가요?6 초보탈출!! 4150 2011.03.16
350 전기전자 아무거나 HOT참고하겠습니다! 마이쭈27 1207 2011.02.24
349 전기전자 아무거나 HOT터치 스위치& 타이어1 박팔뚝 1509 2011.02.15
348 전기전자 아무거나 HOTavr 처음공부하려합니다. 시작하기에 적합한 교제 추천부탁드려요.2 정수근 2577 2011.02.07
347 전기전자 아무거나 HOTPLC를 공부해보려고 하는데 어떤 교재가 있습니까? 제이슨 1370 2011.02.01
346 전기전자 아무거나 HOTSMPS 설계를 준비하고 있습니다.2 마임부우 1485 2011.01.19
345 전기전자 아무거나 HOT클럭노이즈 개선방안1 멋쟁이짱 1694 2011.01.12
344 전기전자 아무거나 HOT노이즈 없애는 방법1 멋쟁이짱 1502 2011.01.12
343 전기전자 아무거나 HOTvhdl 도 언어인가요?8 연재 2297 2010.12.23
342 전기전자 아무거나 HOT수정진동자 동작이 궁금해서요,,3 진공 2960 2010.11.22
341 전기전자 아무거나 HOT온도센서 7seg에 온도 표시 회로 도움부탁드립니다.2 jeaade 3439 2010.11.04
340 전기전자 아무거나 HOT게임 트레이너를 만드는 것과 메모리 헤킹을 하려면 어떤것을 알아야 하나요?1 개굴휘 2738 2010.11.04
339 전기전자 아무거나 HOT제가 api프로젝트 하려고하는데 도움 부탁드립니다.1 강정훈 1979 2010.11.03
338 전기전자 아무거나 HOTorcad 10.5 다운시 error 생기는데 해결 방법 좀 알려주세요..1 최선을다해서.. 2909 2010.11.03
337 전기전자 아무거나 HOT마이컴공부 k231 1011 2010.11.03
336 전기전자 아무거나 HOT회로가 잘 작동되는지 확인 부탁드립니다.2 jeaade 1724 2010.10.31
335 전기전자 아무거나 HOT일반 똑딱이 스위치를 버튼스위로로 바꾸는 방법.. 멍치 1580 2010.10.30
334 전기전자 아무거나 HOT3상충전기를 단상으로 개조 가능할까요? 멍치 886 2010.10.30
Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 25 Next
  • 오, 사랑이여! 그대는 바로 악의 신이로다. 하긴 우리들은 그대를 악마라고는 부르지 못 하니까.
    - 바이런
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.