Atmega8 Timer0 отключение ноги
- Войдите на сайт для отправки комментариев
Ср, 12/02/2020 - 13:29
Добрый день, скажите пожалуйста, можно ли в Atmega8 использовать ногу PD4 (arduino - 4 нога), независимо от таймера T0, если он запущен, если такое возможно как это можно сделать?
А что Вы понимаете под "он запущен"? Давайте-ка код, а то всё утонет в уточнениях, заявлениях, что "у меня не так" и, в результате, перейдёт в срач.
Используйте. Если только никто не запретил.)
Вот, когда он работает он дергает в момент прерывания указанную ногу, можно ли как-нибудь, это отключить и использовать порт по другому назначению, но при этом необходимо чтобы таймер работал.
Ну так не дёргайте ногу, какие проблемы?
как?
Как, как и будет кучка. Читайте описание работы таймера 1.
Это активация, а как деактивировать
Вот, измененный, упрощенный код библиотеки, он работает, но дергает в прерывании порт, не пойму почему:
тут же при инициализации стоит TCCR1A = 0; // clear control register A
получается он не должен дергать порт.
вот из-за этой строки такое поведение, но если ее убрать то таймер перестает работать
Я Вас уже спрашивал, повторю ещё раз, что Вы понимаете под выражением "таймер работает"? Что Ва от него надо? Чтобы он дёргал ногу? Или чиобы срабатывало прерывание(я)? Какое(ие)? Объяснитесь толком.
Мне нужно чтобы срабатывало прерывание (по переполнению), а ногой я мог отдельно управлять, независимо от таймера.
Мне нужно чтобы срабатывало прерывание (по переполнению), а ногой я мог отдельно управлять, независимо от таймера.
Тогда нахрена Вы вообще конфигурите режим СТС (строки №№7-10 в посте #3 ???
Если Вам не нужен СТС - не конфигурируйте его вообще. Откройте прерывание по переполнению и обрабатывайте на здоровье. Или Вы откуда-то сдули тот код не понимая, что в нём написано? Так?
Мега то какая? Просто 8 или ишшо чё есть? (просто на 8 меге на 0 таймере ничо нет, ШИМ имеется ввиду.
Вот для инита с прерываниями по переполнению:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000.000 kHz
TCCR0=0x01;
TCNT0=0x00;
Мне нужно чтобы срабатывало прерывание (по переполнению), а ногой я мог отдельно управлять, независимо от таймера.
Тогда нахрена Вы вообще конфигурите режим СТС (строки №№7-10 в посте #3 ???
Если Вам не нужен СТС - не конфигурируйте его вообще. Откройте прерывание по переполнению и обрабатывайте на здоровье. Или Вы откуда-то сдули тот код не понимая, что в нём написано? Так?
так мне нужно выставить свой интервал же
так мне нужно выставить свой интервал же
Так и выставляйте, а СТС то тут при чём?
Какой Вам нужен интервал?
40 мкс
йоптель, вы чокурите? фтеме таймер_0 а в коде таймер_1... дауЖ... )))
40 мкс
UPDATE
только сейчас заметил, что у Вас 40мкс, а я написал для 40мс :-( Сами сумеете переделать? Идея-то та же самая.
Ну, и какие проблемы? При тактовой частоте 16МГц, для 40мс подойдёт один из трёх делителей
Берите какой Вам удобнее, допустим 256. Стало быть в 40мс у нас 2500 тиков. Чтобы прерывание по переполнению случилось через 2500 тиков, в регистр счётчика надо записать 65536 - 2500 = 63036
Вот и всё. При настройке таймера и в обработчике прерывания по переполнению надо запихать это число в TCNT1. и всего делов.
И никаких СТС близко не нужно. Вот пример на 40мс. Каждые 40мс он меняет уровень на PB5 на противоположный. Можете проверить осциллографом.
Если у Вас другая тактовая или нужно не 40 - пересчитайте число timeStartValue так, как мы Выше его считали.
Большое спасибо, буду разбираться