Таймер Arduino nano (mega328) Внешний тактовый источник на выводе
- Войдите на сайт для отправки комментариев
Втр, 05/07/2022 - 16:28
добрый день, столкнулся с трудностью, не могу запустить таймер чтобы он срабатывал от внешнего источника сигнала подоваемого на ногу.
перегуглил массу примеров заливал в микроконтроллер и тишина, подача сигнала на ноги микроконтроллера никак не влияет на таймер
пожалуйста поделитесь рабочим таймером от внешнего тактового источника на выводе
может я не правильно ноги для таймера инициализирую?
и из таблицы сказано что нужно cs12 и cs11 включить
// инициализация Timer1 cli(); // отключить глобальные прерывания TCCR1A = 0; // установить регистры в 0 TCCR1B = 0; OCR1A = 0; // установка регистра совпадения TCCR1B |= (1 << WGM12); // включить CTC режим TCCR1B |= (1 << CS11); TIMSK1 |= (1 << OCIE1A); // включить прерывание по совпадению таймера sei(); // включить глобальные прерывания
обычно я пользуюсь таким таймером
и где тут внешний тактовый источник?
из таблицы сказано что нужно cs12 и cs11 включить
если вы сами это пишете, почему в вашем коде этого нет?
зачем писать если это не работает,
cli(); // отключить глобальные прерывания
TCCR1A = 0; // установить TCCR1A регистр в 0
TCCR1B = 0;
TIMSK1 = (1 << TOIE1);
TCCR1B |= (1<<CS11)|(1<<CS12);
sei(); // включить глобальные прерывания)|(1<
на пине D5 генератор висит, таймер молчит
зачем писать если это не работает,
)|(1<
"я пробовал заводить с бензином и без, разницы нет, поэтому бензин слил..." ?
как проверяли то?
можно сделать по образцу частотомера от DIMAX:
припаял контакты подключил осциллограф, в таймере поставил на ногу шим сигнал
о спасибо, завтра обязательно проверю и отпишусь
о спасибо, завтра обязательно проверю и отпишусь
В 99.9% сообщений на форумах далее информации не поступает )))
о спасибо, завтра обязательно проверю и отпишусь
В 99.9% сообщений на форумах далее информации не поступает )))
особенно когда ошибка детская )))
подправил код, запустил 32кГц на D5 3.3v
не работает
если добавить в код запись
то вроде как срабатывает когда на ногу сигнал идет но не счетчик а ребут
Путем подбора с разных таймеров нашел рабочий вариант,
счетчик прибавляется но не со скоростью 32 кгц а гораздо медленнее
все равно где то что то не так
ua6em спасибо за код
все равно где то что то не так
ua6em спасибо за код
в смысле не так, настроено на переполнение, когда произойдёт переполнение счетчика вызовется прерывание оно и добавит значение
PS это код частотомера выдранный у DIMAX )))
мне надо было частоту внешнего генератора, на удивление код частотомера работает весьма точно, допустимой мне точности в 500 герц на 300кгц он укладывается с запасом )))
PS Дмитрий! Заметил, что новички всё менее и менее могут описать требуемую задачу? Пришло поколение ЕГЭ...
ua6em
код в чистом виде не работает что был изначально
может у меня maga328 бракованая
ua6em
код в чистом виде не работает что был изначально
может у меня maga328 бракованая
тут нечему не работать
Вы уверены что таймер по умолчанию работает в нужном вам режиме ??? Настройте и TCCR1A !!!
Смотрим wiring.c функция init:
8-bit phase correct pwm mode - это тот режим что вам нужен ?
Может пора уже опубликовать ПОЛНЫЙ код с проблемой ???
Вы уверены что таймер по умолчанию работает в нужном вам режиме ??? Настройте и TCCR1A !!!
Смотрим wiring.c функция init:
8-bit phase correct pwm mode - это тот режим что вам нужен ?
Может пора уже опубликовать ПОЛНЫЙ код с проблемой ???
полный код я и выкладывал посути уже выше, мне нужен таймер который от шим сигнала внешнего на ноге D5 будет считать циклы если таймер1 на это не способен то сойдет другой таймер только не таймер0
что то вроде этого
просто я не знаю даташитов что где как нужно прописать
стандартные таймеры с предделителем то работают, а вот от внешнего сигнала не могу таймер правильно прописать
Для начала добавьте TCCR1A = 0
Для начала добавьте TCCR1A = 0
так тоже не работает(
И разрешить прерывание от таймера 1 по переполнению:
Зачем вы в это лезете ??? Если дуб-дубом ???
И разрешить прерывание от таймера 1 по переполнению:
Зачем вы в это лезете ??? Если дуб-дубом ???
ваш код не работает
точнее он работает, но хуже чем варианте что я выкладывал #10
ваш код очень медленно срабатывает на счетчик, примерно 1 раз в 2 секунды
Всё зависит от частоты на входе и от пределов таймера - сейчас таймер переполняется после 65536 импульсов на входе. С какой частотой работает ваш генератор на входе D5 ?
Что вы хотите получить ? если надо срабатывать на каждый входной импульс, то при чем тут таймер вообще ? Для этого надо использовать прерывание по входу !!!
Зачем вы в это лезете ??? Если дуб-дубом ???
для того чтобы понять как это работает, но не на бумаге а физически
del
32K как раз за 2 секунды 1 раз переполняют таймер на 64К !!!
Выводите тогда так - ((uint32_t)int_tic<<16) | TCNT1 - это будет число пришедших импульсов.
Всё зависит от частоты на входе и от пределов таймера - сейчас таймер переполняется после 65536 импульсов на входе. С какой частотой работает ваш генератор на входе D5 ?
Что вы хотите получить ? если надо срабатывать на каждый входной импульс, то при чем тут таймер вообще ? Для этого надо использовать прерывание по входу !!!
а таймер не может работать по совпадению сигнала?
без счетчиков, чтобы тока сигнал с ноги появился он сработал?
Таймер СЧИТАЕТ импульсы. Что с чем он должен сравнивать ?
ОПИШИТЕ задачу-вопрос-проблему полностью !!!
а таймер не может работать по совпадению сигнала?
без счетчиков, чтобы тока сигнал с ноги появился он сработал?
Изучите INT0, INT1, PCINT0, PCINT1, ... ....
а таймер не может работать по совпадению сигнала?
без счетчиков, чтобы тока сигнал с ноги появился он сработал?
Изучите INT0, INT1, PCINT0, PCINT1, ... ....
хорошо спасибо