Страница 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 для интерактивной настройки таймеров и ШИМ :lol:

Добавлено: Вт фев 02, 2010 13:54:45
GP1
Labus писал(а):Еще есть мастер для CVAVR ICC WinAVR для интерактивной настройки таймеров и ШИМ :lol:
Человек пишет на асме.
Если хочешь использовать СТС, тогда 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 может она не будет так делать. Ну да ладно - самое главное - РАБОТАЕТ! Спасибо за участие в чужом горе!