Не работает код прерываний для 1 таймера attiny85
- Войдите на сайт для отправки комментариев
Ср, 29/06/2016 - 11:34
Помогите пожалуюста найти ошибку в коде, у меня не работает код прерываний 1 таймера на attiny85.
const byte LED = 4;
volatile bool flag = 0;
void setup() {
pinMode(LED, OUTPUT);
TCCR1 = 0;
TCNT1 = 0;
TCCR1 = (1 << CTC1);
TCCR0B |= (1 << CS13) | (1 << CS12) | (1 << CS11) | (1 << CS10);
OCR1A = 61;
TIMSK = (1 << OCIE1A);
sei();
}
void loop() {
}
ISR(TIMER1_COMPA_vect) {
if(flag == 0) {
digitalWrite(LED, LOW);
}else{
digitalWrite(LED, HIGH);
}
flag =!flag;
}
Хотя таймер 0 заводится.
Но мне он не подходит, так как нарушает разботу millis и delay.
const byte LED = 4;
volatile bool flag = 0;
void setup() {
pinMode(LED, OUTPUT);
TCCR0A = 0;
TCCR0B = 0;
TCCR0A = (1 << WGM01);
TCCR0B |= (1 << CS00) | (1 << CS02);
OCR0A = 488;
TIMSK = (1 << OCIE0A);
sei();
}
void loop() {
}
ISR(TIMER0_COMPA_vect) {
if(flag == 0) {
digitalWrite(LED, LOW);
}else{
digitalWrite(LED, HIGH);
}
flag =!flag;
}
adast123, Цитата из даташита на тини85 : "Bit 7 – CTC1 : Clear Timer/Counter on Compare Match
When the CTC1 control bit is set (one), Timer/Counter1 is reset to $00 in the CPU clock cycle after a compare
match with OCR1C register value. If the control bit is cleared, Timer/Counter1 continues counting and is unaffected
by a compare match."
Изменил, все равно не работает:
const byte LED = 4; volatile bool flag = 0; void setup() { pinMode(LED, OUTPUT); TCCR1 = 0; TCNT1 = 0; TCCR1 = (1 << CTC1); TCCR0B |= (1 << CS13) | (1 << CS12) | (1 << CS11) | (1 << CS10); OCR1C = 61; TIMSK = (1 << OCIE1A); sei(); } void loop() { } ISR(TIMER1_COMPA_vect) { if(flag == 0) { digitalWrite(LED, LOW); }else{ digitalWrite(LED, HIGH); } flag =!flag; }adast123, логично. Счёт у вас идёт до ocr1c, а прерывание настроено на совпадение с ocr1a. Попробуйте в OCR1C=OCR1A=61; Если не прокатит, то придётся в PWM-режим перенастроить таймер.
1) Кстати, командой TIMSK= вы убиваете настройки другого таймера. Нужно TIMSK|=
2) А у TCCR1B наоборот убрать знак | Блин! Там у вас ошибка, зачем вы регистр 0 таймера трогаете??? Всё переделайте, не буду каждую буквы разжёвыватьь
Вчера у Вас вроде второй не работал. Сегодня - первый. Не везёт Вам что-то с таймерами :(
Вчера у Вас вроде второй не работал. Сегодня - первый. Не везёт Вам что-то с таймерами :(
сгорели все таймеры нахрен
Огромное вам спасибо!!!