회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
272 마이크로프로세서 HOTcan통신초기화1 あさひ 1282 2008.07.01
271 마이크로프로세서 HOT균형로봇(자이로 센서 이용) 자료 어디 없을까요.ㅠㅠ1 콜록 1795 2008.06.30
270 마이크로프로세서 HOT서보 모터 질문이여 안아줘잉 628 2008.06.27
269 마이크로프로세서 HOT서보 모터 질문이여1 안아줘잉 545 2008.06.25
268 펌웨어 & 코딩언어 HOTacc.h 오류문제입니다.ㅠ1 미스터조ㅋ 863 2008.06.21
267 마이크로프로세서 HOT신호등을 받았는데요..1 레드스카이 578 2008.06.21
266 마이크로프로세서 HOTds1620을 이용한 온도센서제어를 하다...ㅜ 맹우기 1352 2008.06.20
265 머신러닝, AI & 알고리즘 HOT지하철 최단거리 알고리즘은?2 지워나 2862 2008.06.20
264 마이크로프로세서 HOTEPROM에 데이터쓰기?2 대박 863 2008.06.19
263 마이크로프로세서 HOT스위치는 어떻게 제어해야 되나요?1 할수있다 898 2008.06.14
262 마이크로프로세서 HOTavr128을 배워보려고합니다...3 가진e 662 2008.06.13
261 마이크로프로세서 HOT8051온도계 자료좀 올려주세요^^3 민하박 4583 2008.06.12
260 마이크로프로세서 HOT인터럽트에 대해서...!!!!!ㅡㅡ3 맹우기 874 2008.06.12
259 마이크로프로세서 HOT라인트레이서질문합니다. 무한질주 785 2008.06.10
258 마이크로프로세서 HOTavr128 lcd때문에 미치겠습니다.ㅜㅜ5 콜록 1139 2008.06.08
257 마이크로프로세서 HOT코드를 쉽게...2 paloo8 599 2008.06.05
256 마이크로프로세서 HOT근데 이거 다운로드 어떻게 하는겁니까???2 navy 636 2008.06.04
마이크로프로세서 HOT[질문] 초음파센서 srf04의 거리에 따른 led 불 켜기1 njuikm 5557 2008.06.04
254 마이크로프로세서 HOT서로다른 8051을 쓰다보니까 출력이 너무 햇갈립니다.5 09xz 702 2008.06.03
253 마이크로프로세서 HOT소스 해석좀......2 용고고고 1497 2008.06.03
Prev 1 ... 40 41 42 43 44 45 46 47 48 49 ... 58 Next
  • 가장 훌륭한 선은 신중성이다. 그것은 철학보다도 더 귀중하며, 모든 덕은 신중성에서 나온다.
    - 에키쿠로스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.