Обсуждаем контроллеры компании Atmel.
Ответить

Atmega8, ШИМ - низкий уровень на выводе после остановки ШИМ.

Вс сен 12, 2021 19:06:20

Сделал ШИМ на Т1 в режиме 8. Если останавливаю таймер разрядами CS12, CS11 и CS10 в момент когда на ноге OC1A высокий уровень, то на низкий уровень ногу переключить уже не получается. Почему? И как это сделать?

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вс сен 12, 2021 19:24:29

Либо битами FOC, либо отключить ногу от компаратора.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пн сен 13, 2021 10:32:23

Потому что вы остановили таймер, но не отключили его. Ноги ШИМ все еще управляются значением счетчика. Если хотите отсоединить их, настройте COM1A1 или подобные

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пн сен 13, 2021 13:23:29

Получается отключить таймер от ноги, но тогда при повторном подключении ШИМ начинает работать с того места, на котором была отключена нога от таймера. Т.е. отключили на высоком уровне на ноге, включается с высокого уровня на ноге и наоборот. Пытаюсь сбросить счетчик регистром TCNT1, но не помогает.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пн сен 13, 2021 14:02:18

перед включением таймера нужно еще сбросить предделитель этого таймера. тогда таймер начнет работу сначала, а не с места остановки.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пн сен 13, 2021 14:12:28

перед включением таймера нужно еще сбросить предделитель этого таймера

Предделитель ОДИН на ВСЕ таймеры!
Поэтому если у одного таймера предделитель на 8, а у другого на 64, то сбрасывая предделитель по первому таймеру, до второго может не дойти ни одного тика!

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 14, 2021 02:48:35

Когда настроен шим, и пин мк настроен как выход таймера, его состояние зависит от состояния таймера. Чтобы управлять пином мк, нужно отвязать пин мк от таймера.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 14, 2021 08:29:38

parovoZZ, так ты даже не знаешь, сколько предделителей в АТмега8.
общий предделитель только у таймера0 и таймера1. у таймера2 отдельный предделитель.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 14, 2021 09:59:06

Фраза
предделитель этого таймера

говорит об однозначности суждения.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 14, 2021 13:16:58

parovoZZ писал(а):Предделитель ОДИН на ВСЕ таймеры!
ну, твое-то высказывание вообще безграмотное.
а у таймера1 вполне конкретный предделитель, и я говорил именно о нем.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 14, 2021 13:57:52

Предделитель таймеров T0 и T1 сбрасывается битом PSR10, предделитель таймера T2 сбрасывается битом PSR2. Регистр - SFIOR.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 14, 2021 15:30:14

Вот и отлично, что почитал даташит. :)

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пт сен 17, 2021 21:17:14

Starichok51 писал(а):перед включением таймера нужно еще сбросить предделитель этого таймера. тогда таймер начнет работу сначала, а не с места остановки.

В режиме "8" Т1 считает сначала в прямом, а потом в обратном направлении. А можно как-то после останова счетчика и записи в него (TCNT1) нового значения задать счетчику еще направление счета?

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пт сен 17, 2021 22:53:21

не знаю, не пробовал.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Сб сен 18, 2021 17:44:58

задать счетчику еще направление счета?

читай даташит.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вс сен 19, 2021 20:56:05

У меня первый импульс получается в 2 раза короче, если ШИМ установить как неинвертированную и сбрасывать счетчик в 0. Если ШИМ инвертировать и установить начальную позицию TCNT1 в непосредственной близости от OCR1A (режим таймера "8"), то в зависимости от направления счета, при котором таймер был остановлен, мы получим различный результат при повторном запуске таймера. Либо это будет высокий уровень, либо это будет пауза перед высоким уровнем. Пока не придумал как решить эту особенность, чтобы ШИМ после останова таймера всегда начиналась с полноценного импульса.
Последний раз редактировалось Kalisnik Пн сен 20, 2021 09:12:25, всего редактировалось 3 раз(а).

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вс сен 19, 2021 21:48:24

а ты сделал сброс предделителя перед повторным запуском?

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пн сен 20, 2021 12:39:52

Да, при отключении таймера делаю так:
Код:
SFIOR |= (1<<PSR10);


Добавлено after 3 hours 34 minutes 44 seconds:
Re: Atmega8, ШИМ - низкий уровень на выводе после остановки ШИМ.
Хотя странно, комментирую эту строчку и ни чего не меняется. Может я как-то неправильно предделитель сбрасываю?

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Пн сен 20, 2021 18:59:48

предделитель нужно сбрасывать перед запуском таймера, а не при его остановке.
иначе к повторному запуску предделитель окажется в неизвестном состоянии.

Re: Atmega8, ШИМ - низкий уровень на выводе после остановки

Вт сен 21, 2021 13:15:52

Сделал сброс предделителя перед запуском Т1, ни чего не поменялось. А как сбросить предделитель Т1 на ассемблере? Может дело в Си...
Ответить