컴패어 A B인터럽트를 써서 서보를 돌리고 있는데요
다른건 둘째치고인터럽트가 안걸려요,ㅡ,,,
오실로로 찍어봐도 아예 감이 오질 않네요 ㅡㅡ
레지스터 셋팅도
void _Timer1Init(void)
{
TCCR1A = 0x00; // normal mode, do not use external ouput
TCCR1B = 0x02; // Normal Mode, 8분주,
TIMSK = 0x18; // ,compA,compB interrupt Enable
ETIMSK = 0x00;
}
요렇게 선언도 제대로 해주었고 함수 선언도 써주었고
sei();인터럽트 허용함수도 선언해주었습니다.
물론 ISR써서 인터럽트 벡터함수도 써주었고요,,;
왜 안걸리는지 정말 답답하네요??/ 다른 소스 컴패어 인터럽트는 잘만 되는데 왜 안되는지 모르겠어요ㅡㅡ
너무 안되서 출력단자 B포트에 있는 OCn 15 16번핀에 인터럽트 출력포트 레지스터를 설정헤서 토글을 걸어 led연결해놓고 인터럽트가 걸리는지 안걸리는것 까지 다 테스트했는데
안걸립니다..
결국 제가 소스에서 어딘가 분명한 오류가 있는것 같은데,, 도저히 못찾겠어요;;
제지식으로는 인터럽트 함수 써주고 레지스터 설정해주고 인터럽트 허용함수 sei() 만선언해주면 인터럽트는 걸리는걸로 알고 있거든요?;
아 정말,, 요즘 요거때문에 막히니,, 지치네요 요 ㅠ
얼핏 인터넷에서 보니 변수형같은걸 잘못 지정하면 이런 인터럽트 오류가 뜬다고,, (이건 확실치 않음..ㅡㅡㅜ)
암튼,...정말 궁금합니다.. 정말.... 정말. ...ㅠㅠ
전체 소스가 아니라서 무엇이 잘못되었다 말하기가 뭐하네요.
우선 개념은 맞고, 어차피 비교 인터럽트 이니까 타이머/카운터 1의 TCNT1의 값과 OCR1A 등등과 값이 같으면 인터럽트가 발생합니다.
OC1 등의 출력을 선택하려면 레지스터 바꿔줘야 하고.. 따라서 어떻게 테스트를 했는지가 중요할 것이다 봅니다.
전체적인 소스말고 따로 테스트 하시기 위해서 만들었던 소스를 올려주시면 괜찮을 듯 하네요.
질문할때는 개발환경, 회로나 코드의 동작목표, 문제점을 정확히 명시해주세요.
1. 개발환경 :
2. 동작목표 :
3. 문제점 :
인터럽트 선언할때 변수지정이나 모드를 잘못 설정했을수도 있을 것 같아요O_O;;;