Страница 1 из 1
ATMEGA8 режимы таймера CTC или PWM?
Добавлено: Пн фев 01, 2010 22:59:22
tuco2009
Мяу, ТОВАРИЩИ! Надо сделать генератор-ШИМ на МК. Не могу что-то разобраться с таймером1 MEGA8. Режим СТС мне подходит, поскольку при нем обнуляется таймер при достижении значения в регистре OCR1B и начинает счет сначала; также прикотячил изменение лог. уровня на OCR1 выводе по достижении значения в OCR1A. НО как сделать,чтобы бит на ноге меги (OCR1) обнулялся при достижении значения OCR1B (обнуления счетчика)? Возможно и другое решение вопроса, только без прерываний или больших величин счетчика (например обнуление бита по достижения 0xff, как это реализовано в PWM).
Задача просто такая: надо чтобы частота на ноге была близкая к частоте кварца, например кварц 8 Мгц, а на ноге меандр 2 МГЦ, соответственно значения таймера при совпадении 2 - установить бит, при достижении 4 - удалить бит. Потом еще надо простейший ШИМ на 4 положения: например, на 1 - установить, на 4 удалить и т.д. Вот программный код и проект AVRStudio 4,14.
Код: Выделить всё
ldi FreqRegister,8
ldi FreqPause,3
ldi temp,6
out OCR1AL,FreqRegister ;Общий период импульсов
out OCR1BL,FreqPause ;Место спада (период/2)
out ICR1L,temp
ldi temp,0b00010000 ;{Инит Таймера 1
;Выход СОМ1Б
out TCCR1A,temp ;Он выдает разную частоту
ldi temp,0b00011001 ;следования посылок импульсов и как ШИМ
out TCCR1B,temp ;СТС режим (WGM2,3)
;Изменение сигнала по OCR1B,сброс таймера
;по OCR1A }
Добавлено: Вт фев 02, 2010 09:02:30
ARV
я так и не понял, в чем проблема: есть режим FastPWM и просто PWM (ну и PhaseCorrect PWM) у таймера №1 - выберите нужный и просто используйте его возможности, вот и все. только для ШИМ прерывания не требуются, все аппаратно.
Добавлено: Вт фев 02, 2010 12:48:49
Labus
Еще есть мастер для CVAVR ICC WinAVR для интерактивной настройки таймеров и ШИМ

Добавлено: Вт фев 02, 2010 13:54:45
GP1
Labus писал(а):Еще есть мастер для CVAVR ICC WinAVR для интерактивной настройки таймеров и ШИМ

Человек пишет на асме.
Если хочешь использовать СТС, тогда OCR1A - будет определять частоту, а OCR1B - заполнение ШИМ, есно вывод OCR1B
Добавлено: Вт фев 02, 2010 15:25:38
tuco2009
В режимах PWM таймер досчитывает до конца 8, 10, 13 бит, а мне надо 3-4 бита.
В режиме СТС не могу понять как осуществляется ркгулировка ШИМ и частоты. В студии отлаживал: бит на выводе в первое совпадение (OCR1B) устанавливается, потом после сброса таймера по OCR1A и следующем совпадении OCR1B удаляется, не пойму как регулируется ШИМ, если сумма неизменна, иначе говоря частота меняется, а спад и нарастание не меняются...
Код: Выделить всё
_______________ ____ ____ ____
; | | | | |
; | | | | |
; | | | | |
; | | | | |
; | | | | |
;_____| |___________| |_______| ___________________| |
;OCR1B|OCR1A|OCR1B |OCR1A|OCR1B
Добавлено: Вт фев 02, 2010 15:45:33
Meteor
Для начала, режим СТС не формирует ШИМ. Он формирует (максимум) меандр, путем переброса состояния вывода. Если нужно ШИМ на основе СТС, то тут придется задать, например, для OCRA установку в 1, а по совпадению OCRB (OCRB<OCRA) сбрасывать (программно) в обработке прерывания этот вывод в 0. (Безотносительно к конкретному таймеру)
Добавлено: Вт фев 02, 2010 21:20:13
tuco2009
тогда грустно получается - режим PWM работает в режиме ШИМ с фиксированной частотой (имеется ввиду плавно не изменяется), а режим CTC только плавно меняет частоту...Так чтоли?
Добавлено: Вт фев 02, 2010 21:26:58
tuco2009
ARV писал(а):я так и не понял, в чем проблема: есть режим FastPWM и просто PWM (ну и PhaseCorrect PWM) у таймера №1...
Пока что-то не нашел режим как регулировать и частоту и импульс сдвигать вправо-влево...
ARV писал(а):.. только для ШИМ прерывания не требуются, все аппаратно.
Вот так то как раз и надо, с прерываниями каждый сможет...
Добавлено: Вт фев 02, 2010 21:30:34
tuco2009
GP1 писал(а):
Если хочешь использовать СТС, тогда OCR1A - будет определять частоту, а OCR1B - заполнение ШИМ, есно вывод OCR1B
OCR1A+OCR1B = частота; импульс не двигается, если увеличивать один из регистров, просто удлинняется период и все, по достижении OCR1B на ноге напруга появляется далее считает до OCR1A и напруга не исчезает как, хотелось бы мне, а считает еще до OCR1B и только потом снимает с ноги лог 1...вот такая загогулина...
Добавлено: Вт фев 02, 2010 21:42:46
ARV
на сколько я помню, режим
FastPWM можно настроить на "вершину" счета от 3-битов, т.е. желаемые 3-4 бита для счетчика делаются аппаратно и без проблем. изучайте документацию - проще ШИМа аппаратного может быть только молоток

Добавлено: Ср фев 03, 2010 16:50:28
Барсик
tuco2009 писал(а):В режимах PWM таймер досчитывает до конца 8, 10, 13 бит...
Ничего подобного. Есть режим "Fast PWM top=ICR1" Докуда считать - записать в регистр ICR1. А докуда "шимить" - в регистры OCR1A и OCR1B.
Добавлено: Ср фев 03, 2010 22:36:18
tuco2009
Барсик писал(а):
Ничего подобного. Есть режим "Fast PWM top=ICR1" Докуда считать - записать в регистр ICR1. А докуда "шимить" - в регистры OCR1A и OCR1B.
Неа, не работает, вот проект. Считает до конца 9 бит и 10 бит, может чего неправильно делаю, как по пуководству выставляю режим 14 (у меня считает не до ICR1, а до 9 бит) или 15 (10 бит) по табл 39. Фото ниже
Добавлено: Ср фев 03, 2010 22:37:57
tuco2009
ARV писал(а):на сколько я помню, режим
FastPWM можно настроить на "вершину" счета от 3-битов, т.е. желаемые 3-4 бита для счетчика делаются аппаратно и без проблем. изучайте документацию - проще ШИМа аппаратного может быть только молоток

Чет не нашел в доках режима на 3 бита , фото доков в предыдущем моем посте
Добавлено: Ср фев 03, 2010 23:04:37
ARV
студия лажает с FastPWM - почитайте в хелпе о том, что она умеет и чего не умеет.
Добавлено: Чт фев 04, 2010 09:50:18
tuco2009
ЗАМУРРРРРРЧАТЕЛЬНО! работает! Спасибо ARV и всем кто помогал! Режим 8,9 по табл 39 документации (PWM, Phase and Frequency Correct). Шпротеус показывает правильно, а студия в этом режиме считает до конца!!! Скачаю новую студию 4,18 может она не будет так делать. Ну да ладно - самое главное - РАБОТАЕТ! Спасибо за участие в чужом горе!