Страница 1 из 2
Прошу подсказки ШИМ ATMega8
Добавлено: Ср июн 15, 2011 02:43:20
vovksextra
Совсем недавно начал изучать МК. Среду для разработки выбрал mikroPascal Pro AVR(по-политическим соображениям). Застрял на одном месте и не могу сдвинуться дальше.
Использую 14 режим Fast PWM. привожу код:
Код: Выделить всё
program pwm;
var
Duty: word;
Procedure DutyPWM(const ADuty: word);
begin
OCR1AH :=hi(ADuty);
OCR1AL :=lo(ADuty);
end;
procedure INT0_ISR; iv IVT_ADDR_INT0;
begin
Duty:=Duty+1000;
DutyPWM(Duty);
end;
procedure INT1_ISR; iv IVT_ADDR_INT1;
begin
Duty:=Duty-1000;
DutyPWM(Duty);
end;
begin
DDRB.1 := 1; // настраивает порт на вывод (OC1A)
// http://content.mail.ru/arch/14905/5453491.html
// x = 50Гц
// ICR1=(1/x)/(1/(ftact/prescale))
// ICR1=(1/50)/(1/(8000000/8))=20000;
ICR1H := 0x4E; // ICR1 = 20000;
ICR1L := 0x20;
// Настраиваем работу ШИМ
// Fast PWM mode 14 TOP=ICR1;
// Делитель: 8
TCCR1A := (1 shl WGM11) or (1 shl COM1A1);
TCCR1B := (1 shl WGM12) or (1 shl WGM13) or (1 shl CS11);
Duty :=10000; // ICR1/2
DutyPWM(Duty);
GICR := (1 shl INT0) or (1 shl INT0); //разрешаем прерывание int0 и int1
MCUCR := (1 shl ISC00) or (1 shl ISC01) or (1 shl ISC10) or (1 shl ISC00); // условие срабатывания int0,int1 для кнопки 1 и 2 растущий фронт
SREG_I_bit := 1; //Разрешить прерывания
while TRUE do
end.
В протеусе вижу красивую осцилограмму нужной мне частоты, скважности. Но амплиатуда меняется в зависимости от скажности. При OCR1=ICR1/2 - 2.5v. Чем выше ОСR (больше скважность)- тем амплиатуда меньше и наоборот.... Могу реализовать програмный ШИМ - где будет уровень 5v всегда, но хотелось бы аппаратную реализацию.
Подскажите что не так или так и должно быть?? Прошу в даташит не отправлять - ибо там ничего не увидел, поэтому и обратился сюда )
PS
Задача сводилась к тому что-бы иметь кварц на 8Мгц и шим 50Гц. Кроме как 14 режима в голову больше ничего не приходит (опыта мало).
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Чт июн 16, 2011 18:06:55
vovksextra
up
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Чт июн 16, 2011 18:30:08
radio-kot
Сигнал цифровой, амплитуда должна быть одинаковой.
Настройка ШИМ PWM в AVR -
www.proavr.narod.ru/z8.htm
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 10:00:45
vovksextra
Я согласен что должен но его то нету.
Код можете повторить и проверить
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 10:15:26
Engineer_Keen
Как сказал radio-kot, амплитуда разной быть не может. Может быть:
- глюк протеуса
- косяк в схеме
- косяк в программе\компиляторе (врядли)
Выложили бы проект (схема+hex), было бы проще. Попробуйте принудительно переключить пин с ШИМом на вывод (регистр DDRx), мало ли...
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 11:17:44
radio-kot
vovksextra писал(а): Код можете повторить и проверить
Спасибо. Я то думал - на что убить время ... ну конечно же на проверку кривого кода.
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 23:00:36
vovksextra
radio-kot писал(а):vovksextra писал(а): Код можете повторить и проверить
Спасибо. Я то думал - на что убить время ... ну конечно же на проверку кривого кода.
В чем заключается кривизна кода ??? Делал все по даташиту. Аргументы в студию
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 23:05:02
radio-kot
Тогда вот так:
Спасибо. Я то думал - на что убить время ... ну конечно же на аргументацию кривизны кода.

Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 23:06:48
vovksextra
Engineer_Keen писал(а):Как сказал radio-kot, амплитуда разной быть не может. Может быть:
- глюк протеуса
- косяк в схеме
- косяк в программе\компиляторе (врядли)
Выложили бы проект (схема+hex), было бы проще. Попробуйте принудительно переключить пин с ШИМом на вывод (регистр DDRx), мало ли...
- глюк протеуса - может быть - железо приедет попробую вживую. Спасибо!
- косяк в схеме - схемы как таковой нету - один контроллер (ATMEGA8)и все
Прикрепил проект в протеусе. там же hex и lst (для любителей)
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 23:10:17
radio-kot
есть не кривой vmlab -
www.proavr.narod.ru
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 23:25:07
vovksextra
И всеж я файлики выложил. Вместо того что-бы флудить можно бы аргументированно объяснить почему так происходит и где в моем коде кривизна.
Две строчки когда можно и на любимом Си набрать )
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт июн 17, 2011 23:27:45
vovksextra
Engineer_Keen писал(а):Как сказал radio-kot,Попробуйте принудительно переключить пин с ШИМом на вывод (регистр DDRx), мало ли...
ъ
Ну так в коде же я написал
DDRB.1 := 1; первый пин порта на вывод.
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Вс июн 19, 2011 22:04:18
Engineer_Keen
Упс, про DDRB не заметил...
В общем, у меня ШИМ вообще не наблюдается, может версия протеуса старая (7.6). Это уже не первый раз, когда он не эмулирует некоторые вещи. На всякий случай переписал на асме (кстати hex в 2 раза уменьшился), реакция аналогичная. Ждем результатов в железе
PS: Можно скрин с ШИМом на осциллографе?
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Вс июн 19, 2011 23:24:28
vovksextra
Частоту кварца выставь в int rc 8 Mhz
Ниже выложу скрин версии протеуса. Мой hex должен работать.
Железо заказал - почтой приедет. Как только приедет проверю )
PS спасибо за "сочуствие".
Тему поднял так как задал себе цель на кварце или на внутреннем RC 8Mhz получить аппаратный шим с частотой 50 гц и с переменной скважность. Получается его можно реализовать только в 14ом режиме. Только сигнал на выходе "кривой". Если есть у кого идеи буду рад принять )
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Вс июн 19, 2011 23:26:04
vovksextra
Engineer_Keen писал(а):
PS: Можно скрин с ШИМом на осциллографе?
рис.1
ICR1 = 20000;
Duty :=10000; ICR1/2
рис.2
ICR1 = 20000;
Duty :=5000;
рис.3
ICR1 = 20000;
Duty :=15000;
PS и всеж найди "ШИМ" ))
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Сб апр 06, 2013 16:52:45
baigor
Всем доброго дня. В VMLAB сконфигурил симулятор для AtMega8 выполняющий функцию ШИМ генератора Tamer1. Использовал 14 режим Fast PWM, где разрешающую способность задаём через ICR1, а шим через OCR1A. Оказалось что VMLAB не способен на симуляцию этого режима. В Си коде бит WGM13 регистра TCCR1B пишется единица, а в VMLAB этот бит в нуле и ни какими способами переписать бит там не удаётся, так как в VMLAB этот бит оказывается зарезервирован и всегда в нём будет ноль. Если кто сталкивался с такой проблемой подскажите, как научить VMLAB понимать что в AtMega8 этот режим существует. У меня VMLAB версии 3.15. Более высокой версии пока не попадалось.
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Сб апр 06, 2013 17:22:21
Леонид Иванович
vovksextra писал(а):В протеусе вижу красивую осцилограмму нужной мне частоты, скважности. Но амплиатуда меняется в зависимости от скажности.
Где Вы видите, что меняется амплитуда? Меняется среднее значение напряжения, как и должно быть.
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Сб апр 06, 2013 21:30:35
radio-kot
baigor писал(а): как научить VMLAB
Не надо. Поставьте PROTEUS 7.10 и насладитесь!
www.proteus123.narod.ru - он того стоит!
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Сб апр 06, 2013 23:38:45
codenamehawk
Переключите осциллограф в режим DC и не будет плавать.
Re: Прошу подсказки ШИМ ATMega8
Добавлено: Пт май 31, 2013 17:42:46
baigor
Попробовал на протеусе поработать, хорошая среда, понимает AtMegy, одно но, в качестве источника выбрал блок питания DC указал +5в, а он выдаёт биполярное питание, где в свойствах подрулить, чтоб выдавал не +-2.5в , а +5в?