회원가입 ID/PW 찾기
AA

초음파 센서를 이용하여 10cm 이하에서는 led에 불이 들어 오게 할려고 하는데....

잘 않되네여...

소스 해석이랑 어디가 잘 못 되었는지 분석좀 부탁 드림 니다....ㅜ

atmega128과 srf-05를 이용하였습니다. .



#include <avr\io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr\signal.h>
#include <avr\interrupt.h>
#include <math.h>

 

typedef unsigned char u08;

volatile long TempTime,distance;
unsigned long TimeCnt;
void TX0_char(u08 );

SIGNAL(SIG_OVERFLOW3)
{
 TimeCnt++;
}
SIGNAL(SIG_INTERRUPT4)     /* forward UI Sensor Interrupt */
{
 TempTime=TimeCnt*4369+TCNT3/15;
}

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++)              //C - > A (입력) , E -> D (출력)
    {
  Delay_us(250);
  Delay_us(250);
  Delay_us(250);
  Delay_us(250);
    }
}

void MCU_initialize(void)    /* initialize ATmege128 MCU */
{

 MCUCR = 0xC0;      // enable external memory and I/O
 XMCRA = 0x00;      // 0x1100-0xFFFF=1 wait
 XMCRB = 0x84;      // enable bus keeper, use PC7-PC4 as I/O port
 //DDRB = 0xFF;      // PORTB = output, PB5 = OCR1A , PB6 = OCR1B
 //PORTB = 0x00;
 DDRA = 0xFF;      // PORTc = output, PC7~PC4 : UI Output
 PORTA = 0x00;
 //DDRD = 0x1F;      // PD4 = CW, PD0 = CCW
 //PORTD = 0x00;
 DDRD = 0x00;      // PORTE = input, PE7~PE4 : UI Interrupt Input
 PORTD = 0x00;

 
 //DDRF = 0xff;      // PORTF = input
 //PORTF = 0x01;

 TCCR1A = 0xAA;      // Fast PWM mode of timer1
 TCCR1B = 0x1A;
 TCCR1C = 0x00;
 ICR1 = 19999;      // f(PWM) = 16MHz/8/20000 = 100Hz, T(PWM) = 10ms

        TCCR3A=0x00;      // Normal mode of timer3
 TCCR3B=0x02;      // f(PWM) = 16MHz/8 = 2MHz
 TCCR3C=0x00;
 TCNT3H=0x00;
 TCNT3L=0x00;

 OCR1A =0;
 OCR1B =0;
 OCR1C =0;

    ETIMSK=0x00;
    EIMSK=0x00;

 sei();        // global interrupt enable

}

long calc_distance(long val)      /* Calculate UI Distance */
{
 long distance;

 distance=(val*340*0.001/2);
 return (distance);
}

void ready_uisensor(void)       /* UI transmit */
{
       
 int i,j;

        ETIMSK=0x40;
        EIMSK=0x70;
        Delay_ms(10);

  PORTA |= 0x10;
  for(i=0;i<800;i++){}
  PORTA &=~(0x10);
  for(j=0;j<20;j++)
  {
   for(i=0;i<800;i++){}

  }
  TCNT3H=0x00;
  TCNT3L=0x00;
}

void Ultra_check(void)        /* UI Receive & transmit */
{

  if(TempTime)
  {
   ETIMSK=0x00;
   EIMSK=0X00;
   
   distance=calc_distance(TempTime);
        }
   

  if(distance < 10)
   {
               PORTC = 0x01^PORTC;
  ready_uisensor();
        
                }

 
 }

 

int main(void)
{


        MCU_initialize();
        Delay_ms(1000);

 
        while(1){
                ready_uisensor();
                Delay_ms(50);
                Ultra_check();
                Delay_ms(50);


 }


        return 0;

}

 

댓글 2
  • No Profile
         PORTC = 0x01^PORTC;

    led 를 켰다 껏다 하려고 한건가요??

    사용법을 알고 하신건지요?????

  • No Profile

    정확히 분석하지 않았지만

    프로그램에서 사용하는 단위가 10미터인지 10cm인지 확인해보세요.

    cal_distance 계산법확인해보시고요

    이런부분이 다 맞다면 avr 레지스트리 세팅이 잘못된거겠지요.

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

search
번호 분류 제목 글쓴이 조회 수 날짜
3 머신러닝, AI & 알고리즘 HOT오목 게임 알고리즘3 새로운하늘 3468 2010.03.29
2 머신러닝, AI & 알고리즘 HOT지하철 최단거리 알고리즘은?2 지워나 2870 2008.06.20
1 머신러닝, AI & 알고리즘 HOT순차 프로그램에 대한 간단한 알고리즘과 재귀 알고리즘의 속도 테스트 - by 아크마7 아크마 3083 2007.08.08
  • 어떤 책들은 맛만 보고, 나머지 책들은 삼켜버리고, 몇몇 소수의 책은 잘 씹어서 소화시켜야 한다.
    - 베이컨
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.