реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как заставить работать ШИМ?, Пока не удаётся...(((
Алекс-666
сообщение Oct 26 2011, 13:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 6-06-07
Пользователь №: 28 233



Добрый день, леди и джентльмены!
Надобно мне поиметь меандр на выходе OC1A (он же PD5 для АТмеги16А).
Мне казалось, что достаточно написать при инициализации

DDRD = 0x20;

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

Почему-то АТмеге так не казалось.
Что я упустил или спорол?
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 26 2011, 14:51
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Как минимум еще надо
OCR1A = 0x4000;
если я больше ничего не пропустил.

Сообщение отредактировал IgorKossak - Oct 27 2011, 07:54
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Oct 26 2011, 16:28
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(Алекс-666 @ Oct 26 2011, 16:05) *
Надобно мне поиметь меандр на выходе OC1A (он же PD5 для АТмеги16А).
DDRD = 0x20;

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

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

Думаю, здесь всё верно.
Ищите в другом месте.
(питание, замыкание, детектор провалов питания, сторожевой таймер, генератор, цикл, компилятор...)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 26 2011, 16:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Алекс-666 @ Oct 26 2011, 17:05) *
Что я упустил или спорол?

Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:
Код
TCCR1A = 0x43;
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Oct 26 2011, 17:24
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



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

ШИМ настроен правильно.
Он использует быстрый ШИМ со скважностью 50%,
а не "нормальный" или "перезапуск" с переключением выхода.
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 26 2011, 18:01
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



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

50%-ного ШИМа можно добиться по-разному, можно например загрузить в OCR1B половину значения до которого досчитывает счетчик, а это значение в выбранном режиме находится в OCR1A. Вероятно автор предполагал, что счетчик считает по кругу, поэтому записал в в OCR1A 0х8000. Но в режиме WGM13...0=1111 он считает до значения записанного в OCR1A, а скважность определяется значением OCR1B. Ну и ШИМ, разумееется, будет на выходе OC1B.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 26 2011, 18:38
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Юрий_СВ @ Oct 26 2011, 21:24) *
ШИМ настроен правильно.

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

Цитата(777777 @ Oct 26 2011, 22:01) *
50%-ного ШИМа можно добиться по-разному...
Да, можно. Но, нужно поменять или режим (mode) таймера, или выход на OC1B.
Go to the top of the page
 
+Quote Post
Алекс-666
сообщение Oct 27 2011, 06:30
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 6-06-07
Пользователь №: 28 233



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

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

и ШИМ заработал. Осталось подобрать подходящую частоту, но это уже вопрос более чем просто решается через предделители.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 16:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016