настройка регистров таймеров

Geka777

✩✩✩✩✩✩✩
18 Янв 2023
26
0
настройка первого таймера работает

Код:
#include <avr/io.h>
#include <avr/interrupt.h>

#define STEP 2
#define DIR 3
#define ENA 4

void setup() {
  pinMode(STEP,OUTPUT);
  pinMode(DIR,OUTPUT);
  pinMode(ENA,OUTPUT);

  digitalWrite(ENA,LOW);
  digitalWrite(DIR,LOW);

  cli();
  TCCR1A=(0<<COM1A1) | (0<<COM1A0) |(0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
  TCCR1B=(0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
  OCR1A=20000;//задает скорость,чем меньше значение ,тем меньше скорость(6000max)
  TIMSK1=0b00000010;

  sei(); 
}

void loop() {
  
}

ISR(TIMER1_COMPA_vect){
  if(PIND&(1<<2)){PORTD &=~ (1<<2);}//step high на 2-м пине
  else           {PORTD |= (1<<2);}
}
а настройка второго таймера нет

Код:
#include <avr/io.h>
#include <avr/interrupt.h>

#define STEP 2
#define DIR 3
#define ENA 4

void setup() {
  pinMode(STEP,OUTPUT);
  pinMode(DIR,OUTPUT);
  pinMode(ENA,OUTPUT);

  digitalWrite(ENA,LOW);
  digitalWrite(DIR,LOW);

  cli();
  TCCR2A=(0<<COM2A1) | (0<<COM2A0) |(0<<COM2B1) | (0<<COM2B0) | (1<<WGM21) | (0<<WGM20);
  TCCR1B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (1<<CS20);
  OCR2A=2000;//задает скорость,чем меньше значение ,тем меньше скорость(6000max)
  TIMSK2=0b00000010;

  sei(); 
}

void loop() {
  
}

ISR(TIMER2_COMPA_vect){
  if(PIND&(1<<2)){PORTD &=~ (1<<2);}//step high на 2-м пине
  else           {PORTD |= (1<<2);}
}
кто может подсказать почему?
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
473
136
Когда пишите работает - не работает, то желательно писать, как должно работать и как работает.
А так на вскидку - таймер 2 максимальное значение 255 а вы в него пишите 2000 как и в первый таймер. И другие настройки у них могут отличаться.
 

Geka777

✩✩✩✩✩✩✩
18 Янв 2023
26
0
@Bruzzer, я пробовал писать разные ззначение,и до 255,все равно не работает
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
Таймеры в вакууме? Хз почему не работает.
А в случае конкретного МК каждый таймер имеет разный набор регистров и режимов.
Какой МК и какой режим надо включить?
Понял. Режим CTC. Кстати,чем меньше значение регистра сравнения,тем чаще срабатывать будет. Не наоборот.
Или ШИМ? Лень режимы смотреть.
 

Geka777

✩✩✩✩✩✩✩
18 Янв 2023
26
0
@poty,знаю,что там нужно 2B,это просто забыл тут изменить когда копировал с 1 таймера,но все равно не работает

@te238s,атмега 328,режим CTC,без предделителя
 

poty

★★★★★★✩
19 Фев 2020
3,235
942
@Geka777, приведите код, КОТОРЫЙ НЕ РАБОТАЕТ. В том коде, что есть, уже две ошибки. Где гарантия, что они не остались в проверяемом Вами коде или там не появилось новых?
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
@Geka777,вот,по большому секрету. Только никому ни-ни!
16751913607165611737425918542791.jpg
16751914244946905676121472463827.jpg

Таким образом имеем несоответствие битов WGM.
Для тс1 : WGM12 и CS10 установить в 1
для tc2 : WGM21 и CS20 установить в 1
Кстати,это так задумано программно выводы дёргать? У таймеров это можно автоматически делать. Ну и не забывать что модуль счета разный.
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
98
Тогда,как сказал @poty, актуальный код в студию. Где-то банальный косяк.