Перейти к содержанию
    

Как заставить работать ШИМ?

Добрый день, леди и джентльмены!

Надобно мне поиметь меандр на выходе OC1A (он же PD5 для АТмеги16А).

Мне казалось, что достаточно написать при инициализации

 

DDRD = 0x20;

 

TCCR1A = 0xc3;

TCCR1B = 0x1d;

OCR1A = 0x8000;

 

Почему-то АТмеге так не казалось.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как минимум еще надо

OCR1A = 0x4000;

если я больше ничего не пропустил.

Изменено пользователем IgorKossak
Бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надобно мне поиметь меандр на выходе OC1A (он же PD5 для АТмеги16А).

DDRD = 0x20;

 

TCCR1A = 0xc3;

TCCR1B = 0x1d;

OCR1A = 0x8000;

 

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

Думаю, здесь всё верно.

Ищите в другом месте.

(питание, замыкание, детектор провалов питания, сторожевой таймер, генератор, цикл, компилятор...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:

TCCR1A = 0x43;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:

TCCR1A = 0x43;

ШИМ настроен правильно.

Он использует быстрый ШИМ со скважностью 50%,

а не "нормальный" или "перезапуск" с переключением выхода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неправильно настроен режим переключения выхода ОС1А (требуется "Toggle" COM1A1:0=01). Т.е, необходимо изменить:

TCCR1A = 0x43;

50%-ного ШИМа можно добиться по-разному, можно например загрузить в OCR1B половину значения до которого досчитывает счетчик, а это значение в выбранном режиме находится в OCR1A. Вероятно автор предполагал, что счетчик считает по кругу, поэтому записал в в OCR1A 0х8000. Но в режиме WGM13...0=1111 он считает до значения записанного в OCR1A, а скважность определяется значением OCR1B. Ну и ШИМ, разумееется, будет на выходе OC1B.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ШИМ настроен правильно.

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

 

50%-ного ШИМа можно добиться по-разному...
Да, можно. Но, нужно поменять или режим (mode) таймера, или выход на OC1B.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за помощь, джентльмены!

Вероятно автор предполагал, что счетчик считает по кругу
Аффтар именно так и предполагал. Когда благодаря сей подсказке перестал так предполагать, дело сдвинулось с мёртвой точки.

Я переделал на 10-разрядную быструю ШИМ:

 

TCCR1A = 0xc3;

TCCR1B = 0x0d;

OCR1A = 0x0155;

 

и ШИМ заработал. Осталось подобрать подходящую частоту, но это уже вопрос более чем просто решается через предделители.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...