Страница 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
Тогда вот так:

Спасибо. Я то думал - на что убить время ... ну конечно же на аргументацию кривизны кода.

:beer:

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
radio-kot писал(а):есть не кривой vmlab - http://www.proavr.narod.ru

И всеж я файлики выложил. Вместо того что-бы флудить можно бы аргументированно объяснить почему так происходит и где в моем коде кривизна.

Две строчки когда можно и на любимом Си набрать )

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в?