настройка первого таймера работает
#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);}
}
кто может подсказать почему?
знаю что там 2B,забыл просто изменить когда копировал код первого таймера,но все равно не работает
b707
31.Январь.2023 08:00:11
4
что эта фраза значит? - таймер не работает вовсе, работает но неправильно, программа виснет?
Учитесь задавать вопросы нормально.
Какой чип?
Чего хотим добиться от таймера?
Чего получаем?
с первым таймером шаговый двигатель работает как надо,а когда попробовал настроить второй таймер по аналогии с первым,то двигатель не работает
атмега 328
добиться от второго таймера,чтобы работал как первый
BOOM
31.Январь.2023 08:11:38
6
Timer2 (как и timer0) у atmega328 8-битный.
Страница 144 даташита ( 17. 8-bit Timer/Counter2 with PWM and Asynchronous Operation )
оттуда и настраивал,не работает
я пробовал разные значения,ни на каких не работает
b707
31.Январь.2023 08:15:31
10
Таймер1 и Таймер2 РАЗНЫЕ, как не банально это звучит. Их нельзя настраивать копированием регистров, потому что одни и те же биты в двух таймерах имеют РАЗНОЕ ЗНАЧЕНИЕ.
Открывайте даташит и читайте. Вполне может оказаться, что настроить таймер2 ТАК ЖЕ, как первый - вообще не возможно, например таблица прескалеров у них РАЗНАЯ
1 лайк
BOOM
31.Январь.2023 08:15:48
11
Ну ты странный )))
8 бит - это максимальное значение 255 )))
пробовал менять на разные,ничего
От 2000 останется 208 - мотор то умеет так быстро ?
Увеличить прескалер до 8 и 2000 поменять на 250 для начала. Тогда ± будет 250*8=2000
b707
31.Январь.2023 08:17:42
14
как я люблю когда новички “пробуют”.
Это как пробовать заливать в бензобак олифу, мед и мочу. Не “ПРОБЫВАТЬ” надо, а точно ЗНАТЬ, какой параметр для чего. Для этого есть книги.
одинаковая таблица у них,CSx0 у них 1
посмотрите на страницу выше,там еще 3 строки
я устанавливал без делителя
b707
31.Январь.2023 08:25:14
19
Вы тупой или как,?
Какие строки совпадают, какие-то нет! Например биты 101 дадут в таймере 1 1024, а в таймере2 - только 128 - в 8 раз разница.
BOOM
31.Январь.2023 08:26:00
20
без делителя совпадают строки