회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
46 펌웨어 & 코딩언어 HOTblackfin 칩 부트코드 작성해보신분?1 퀴아쿠 859 2010.02.19
45 펌웨어 & 코딩언어 HOT어셈블리를 공부해야할까요?>8 GrayShark 1217 2010.02.17
44 펌웨어 & 코딩언어 HOTC언어책 추천 해주세요 ㅋㅋ9 따라하다 1621 2010.02.06
43 펌웨어 & 코딩언어 HOTc언어질문인데요5 tiger2 983 2009.12.17
42 펌웨어 & 코딩언어 HOT프로그래밍 공부는 어느순서로 공부해야하나요??6 기꾸닝 1469 2009.12.02
41 펌웨어 & 코딩언어 HOT[초짜] 세그먼트를 이용해 카운터 하는 소스를 짜려고 하는데 ..5 기꾸닝 1469 2009.12.02
40 펌웨어 & 코딩언어 HOTc언어 ㅠㅠ3 kjs85179 1438 2009.11.05
39 펌웨어 & 코딩언어 HOT라운드 로빈 방식의 스케쥴러에서... karismapong 1978 2009.10.20
38 펌웨어 & 코딩언어 HOT도와주세요!!4 심봉사 1298 2009.09.21
37 펌웨어 & 코딩언어 HOTC 언어 궁금한거 있습니다~3 로이안 1139 2009.09.04
36 펌웨어 & 코딩언어 HOT마이컴 초짜의 넋두리~12 소스리 1254 2009.08.20
35 펌웨어 & 코딩언어 HOT8051 신호등 C언어론 한건데요 딜레리....2 근자 1650 2009.05.26
34 펌웨어 & 코딩언어 HOT어셈 관련해서 질문입니다..^^;2 화언 1274 2009.04.22
33 펌웨어 & 코딩언어 HOT이거좀 도와주세요2 지노 930 2008.10.12
32 펌웨어 & 코딩언어 HOT8051 4거리 신호등에서의 소스에서요1 마모루 1157 2008.09.08
31 펌웨어 & 코딩언어 HOTjava ....5 あさひ 920 2008.08.19
30 펌웨어 & 코딩언어 HOTacc.h 오류문제입니다.ㅠ1 미스터조ㅋ 863 2008.06.21
29 펌웨어 & 코딩언어 HOTC언어와 C++의 차이점이 무엇인가요??6 날아가는잡쉐 1614 2008.04.29
28 펌웨어 & 코딩언어 HOTPCM의 구조를 알고 싶습니다.2 Kasanova77 2320 2008.03.29
27 펌웨어 & 코딩언어 HOT혹시 이 프로그램..8 빛나는 영혼 1234 2008.03.13
  • 무관심 때문에 사람은 실제로 죽기전에 죽어버린다.
    - 위젤
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.