회원가입 ID/PW 찾기
AA

안녕하세요,^^ 대학교3학년인 한 여학생입니다.. 제가 프로그램쪽에 지식이 많이 부족해서 도움을 얻고자 이렇게 글을 올려여~

제가 초음파센서를 이용해서 거리에따른 led를 켜지게하는 소스를 짜고있는데
현재 컴파일을 하면 오류는 나지않고
인터럽트 부분에 있는 else PORTC = 0x01 부분만 atmega128에서 작동하고있으며 srf04에는 두두두.. 하는 미세한 소리가 나고 있습니다.
트리거신호는 제대로 작동하는 것 같아요.
if문을 사용해서 5cm에서 10 cm 안에 물체가있으면 PORTC가 0x02로 되게 해놨는데 반응이 없고 else 문에 있는 0x01만 실행됩니다.
같은 인터럽트 내에 있는 것인데... 왜 else문만 돌까요...
거리계산도 맞는것 같고한데... 몇일째 이것때문에 밤을 새고있어요...ㅠ

전체적인 소스 설명은..
1. 트리거 신호를 10us만큼 보낸 후 그 때 부터 타이머 카운트를 시작하여 59us마다 SIGNAL(SIG_OVERFLOW0) 함수를 실행하여 count 변수
를 하나씩 올림.  srf04의 경우 59us가 1cm이기 때문에...count값 자체가 물체와의 거리 cm값이 됨.
2. 외부 인터럽트를 사용하여 에코 신호가 상승엣지에서 하강엣지로 바뀌면 지금까지 잰 count값을 length에 넣음.
3. length 값을 이용하여 5cm에서 10cm 사이이에 물체의 유무에 따라 led 제어.
이렇게 나눌 수 있습니다.
밑에 소스에서 잘못된 부분좀 알려주세요..............

==============================================================================================

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

 


volatile unsigned int count; //count는 1cm마다 증가하는 변수. 즉, count 값이 곧 물체와의 거리이다.

volatile unsigned int length; //거리를 저장 할 변수
void delay(int dly)
{
        while(dly--){
        int i,n;
        for(i=0;i<50;i++){
                n=600;
                while(n--);
                }
        }
}

// ATmega128은 2개의 8비트 타이머 / 카운터 0과 2 를 가지고 2개의 16비트 타이머/카운터 1과3을 가짐.
SIGNAL(SIG_OVERFLOW0)//타이머 0번 인터럽트 함수부분.
{
    
    TCNT0 = 0x8b; //138; //(1/16us)*8분주*(256-138) =59us 마다 인터럽트를 발생 0x8a
    count++;  //cm 단위    srf04의 경우 59us가 1cm 이다 타이머 카운터0 레지스터 (읽기 쓰기가 가능)   // 이곳도 잘되고있는지 궁금해요..

   

}
SIGNAL(SIG_INTERRUPT1) //에코신호가 들어오면...
{
    DDRC = 0xff; //led입력

        TIMSK = 0x00;    // 타이머 정지
   length = count; //지금까지 잰 거리를 length변수에 넣음.
    EIMSK = 0;    // 외부 인터럽트1 정지
    if(length > 5 && length <10)
       PORTC = 0x02;                    //  이곳이 작동이 안됨.

    else PORTC = 0x01;  //물체가 그 사이에 없으면 led oFF


        count = 0;
}

int main(void)
{
   
  
    DDRD = 0x02; //INT1(인터럽트)에 echo연결
    DDRA = 0x01; //trigger연결

 
    

    while(1){

     EICRA = 0x02;    // 외부 인터럽트 제어 레지스터 하강에지설정 ok
     TCCR0 = 0x02; //8(8분주)   -> 타이머 카운터 0 제어 레지스터 ok

    SREG = 0x80; //set global interrupt enable 전역 인터럽트 인에이블 비트셋

        PORTA = 0x01; //트리거 신호를 10us만큼 보낸다.

        delay(1);
        PORTA = 0x00;
        TCNT0 = 0x8b;
       //(1/16us)*8분주*(256-138) =59us 마다 인터럽트를 발생

        TIMSK = 0x01; //타이머 카운트 활성화 -> 이 때 부터 시간을 잰다.
        EIMSK = 0b00000001;  //오버플로우 인터럽트
        EIMSK = 0b00000010;    // 외부 인터럽트1 인에이블설정  
        delay(5);

    }
}

 

 

 

댓글 1
  • No Profile

    아 안녕하세요  내부에서 동작여부가 궁금하겠네요..

    일단 인터럽트와 타이머들이 제대로 동작하는지 확인하기 위해 led등을 연결하여 확인해보는게 좋겠고요 ( 각 루틴이 어떻게 돌아가는지 밖에[서 보기만 하면 잘 모르므로)


    소스에 대해서 잠깐 보자면


    쩝..최초로 count=0; 이걸 해주는 작업이 없네요?? 이러면 초기값이 쓰레기가 되서 값이 마구 튀지요..

    여기서  count가 계속 올라가는데 그럼 count가 발산하겠죠... 값이 쭉 올라가서 오버플로어구 나니까


    volatile unsigned int count=0;
    일단 그거 고치시고..


    5에서 10사이를 검출하고자 하는데 음...정확한 위치를 찾기가 힘들수 있으므로 일단

    5보다 큰루틴만 점검하고 10보다 작은거 점검하고 두개 합치세요^^;;

    count값으로 읽어도 되는데...타이머 카운터값을 읽는게 좀 더 정확하겠네요.


    avr자료실쪽에 제가 올려놓은 srf관련 자료 있으니 참고하세요..


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

search
번호 분류 제목 글쓴이 조회 수 날짜
984 마이크로프로세서 HOTavr128 lcd때문에 미치겠습니다.ㅜㅜ5 콜록 1135 2008.06.08
983 마이크로프로세서 HOT코드를 쉽게...2 paloo8 599 2008.06.05
982 자유주제 HOT오늘도 출근합니다 ^^ 호랭이 2468 2008.06.05
981 전기전자 아무거나 HOT라인트레이서 회로도 구합니다..(atmega128)1 미스터조ㅋ 1232 2008.06.05
980 마이크로프로세서 HOT근데 이거 다운로드 어떻게 하는겁니까???2 navy 635 2008.06.04
마이크로프로세서 HOT[질문] 초음파센서 srf04의 거리에 따른 led 불 켜기1 njuikm 5556 2008.06.04
978 자유주제 HOT자주들어와서 공부하고싶은데 일이 바쁘... 런닝머신 2417 2008.06.04
977 자유주제 HOT저 ~~~ 출근했어요 ^^2 호랭이 2340 2008.06.04
976 자유주제 HOT오늘은 아침해가 쨍하고 떳네요. 모두...2 총총이 2845 2008.06.04
975 자유주제 HOT발도장 쿵! 냉납 2504 2008.06.04
974 마이크로프로세서 HOT서로다른 8051을 쓰다보니까 출력이 너무 햇갈립니다.5 09xz 701 2008.06.03
973 자유주제 HOT궁금한게 있어서 올립니다...도와주세요...1 눈물겨운행복 2488 2008.06.03
972 마이크로프로세서 HOT소스 해석좀......2 용고고고 1497 2008.06.03
971 자유주제 HOT8051 작품ㅎㄷㄷ 연옥 5480 2008.06.03
970 자유주제 HOT비가 시작됐네요..습기 조심하세요. 총총이 2907 2008.06.03
969 중고장터 HOT소형 모델 만드는데 도움 좀...1 미루~** 4805 2008.06.02
968 마이크로프로세서 HOTkeil 8051 c error 인데요...좀 도와주세요...1 ruddlf 674 2008.06.01
967 자유주제 HOT안녕하세요 아줌군단 2373 2008.06.01
966 자유주제 HOT감사감사 피빛아이 2666 2008.05.31
965 자유주제 HOT항상 감사감사 해요100 5796 2008.05.31
  • 설사 친구가 꿀처럼 달더라도 그것을 전부 빨아 먹지 말라.
    - 탈무드
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.