Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как заставить работать ШИМ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Алекс-666
Добрый день, леди и джентльмены!
Надобно мне поиметь меандр на выходе OC1A (он же PD5 для АТмеги16А).
Мне казалось, что достаточно написать при инициализации

DDRD = 0x20;

TCCR1A = 0xc3;
TCCR1B = 0x1d;
OCR1A = 0x8000;

Почему-то АТмеге так не казалось.
Что я упустил или спорол?
777777
Как минимум еще надо
OCR1A = 0x4000;
если я больше ничего не пропустил.
Юрий_СВ
Цитата(Алекс-666 @ Oct 26 2011, 16:05) *
Надобно мне поиметь меандр на выходе OC1A (он же PD5 для АТмеги16А).
DDRD = 0x20;

TCCR1A = 0xc3;
TCCR1B = 0x1d;
OCR1A = 0x8000;

Что я упустил или спорол?

Думаю, здесь всё верно.
Ищите в другом месте.
(питание, замыкание, детектор провалов питания, сторожевой таймер, генератор, цикл, компилятор...)
Палыч
Цитата(Алекс-666 @ Oct 26 2011, 17:05) *
Что я упустил или спорол?

Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:
Код
TCCR1A = 0x43;
Юрий_СВ
Цитата(Палыч @ Oct 26 2011, 19:59) *
Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:
Код
TCCR1A = 0x43;

ШИМ настроен правильно.
Он использует быстрый ШИМ со скважностью 50%,
а не "нормальный" или "перезапуск" с переключением выхода.
777777
Цитата(Палыч @ Oct 26 2011, 20:59) *
Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:
Код
TCCR1A = 0x43;

50%-ного ШИМа можно добиться по-разному, можно например загрузить в OCR1B половину значения до которого досчитывает счетчик, а это значение в выбранном режиме находится в OCR1A. Вероятно автор предполагал, что счетчик считает по кругу, поэтому записал в в OCR1A 0х8000. Но в режиме WGM13...0=1111 он считает до значения записанного в OCR1A, а скважность определяется значением OCR1B. Ну и ШИМ, разумееется, будет на выходе OC1B.
Палыч
Цитата(Юрий_СВ @ Oct 26 2011, 21:24) *
ШИМ настроен правильно.

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

Цитата(777777 @ Oct 26 2011, 22:01) *
50%-ного ШИМа можно добиться по-разному...
Да, можно. Но, нужно поменять или режим (mode) таймера, или выход на OC1B.
Алекс-666
Спасибо за помощь, джентльмены!
Цитата(777777 @ Oct 26 2011, 21:01) *
Вероятно автор предполагал, что счетчик считает по кругу
Аффтар именно так и предполагал. Когда благодаря сей подсказке перестал так предполагать, дело сдвинулось с мёртвой точки.
Я переделал на 10-разрядную быструю ШИМ:

TCCR1A = 0xc3;
TCCR1B = 0x0d;
OCR1A = 0x0155;

и ШИМ заработал. Осталось подобрать подходящую частоту, но это уже вопрос более чем просто решается через предделители.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.