회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
984 마이크로프로세서 HOTavr128 lcd때문에 미치겠습니다.ㅜㅜ5 콜록 1141 2008.06.08
983 마이크로프로세서 HOT코드를 쉽게...2 paloo8 599 2008.06.05
982 자유주제 HOT오늘도 출근합니다 ^^ 호랭이 2468 2008.06.05
981 전기전자 아무거나 HOT라인트레이서 회로도 구합니다..(atmega128)1 미스터조ㅋ 1237 2008.06.05
980 마이크로프로세서 HOT근데 이거 다운로드 어떻게 하는겁니까???2 navy 636 2008.06.04
979 마이크로프로세서 HOT[질문] 초음파센서 srf04의 거리에 따른 led 불 켜기1 njuikm 5561 2008.06.04
978 자유주제 HOT자주들어와서 공부하고싶은데 일이 바쁘... 런닝머신 2420 2008.06.04
977 자유주제 HOT저 ~~~ 출근했어요 ^^2 호랭이 2340 2008.06.04
976 자유주제 HOT오늘은 아침해가 쨍하고 떳네요. 모두...2 총총이 2847 2008.06.04
975 자유주제 HOT발도장 쿵! 냉납 2506 2008.06.04
974 마이크로프로세서 HOT서로다른 8051을 쓰다보니까 출력이 너무 햇갈립니다.5 09xz 702 2008.06.03
973 자유주제 HOT궁금한게 있어서 올립니다...도와주세요...1 눈물겨운행복 2491 2008.06.03
마이크로프로세서 HOT소스 해석좀......2 용고고고 1502 2008.06.03
971 자유주제 HOT8051 작품ㅎㄷㄷ 연옥 5482 2008.06.03
970 자유주제 HOT비가 시작됐네요..습기 조심하세요. 총총이 2909 2008.06.03
969 중고장터 HOT소형 모델 만드는데 도움 좀...1 미루~** 4808 2008.06.02
968 마이크로프로세서 HOTkeil 8051 c error 인데요...좀 도와주세요...1 ruddlf 677 2008.06.01
967 자유주제 HOT안녕하세요 아줌군단 2373 2008.06.01
966 자유주제 HOT감사감사 피빛아이 2666 2008.05.31
965 자유주제 HOT항상 감사감사 해요100 5801 2008.05.31
  • 사악은 언제나 미덕보다 더 쉽다. 왜냐하면 사악은 모든 일에 지름길을 택하기 때문이다.
    - 존슨
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.