Прошу подсказки ШИМ ATMega8

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение 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 режима в голову больше ничего не приходит (опыта мало).
Контактная информация:
Реклама
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

up
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Сообщение radio-kot »

Сигнал цифровой, амплитуда должна быть одинаковой.

Настройка ШИМ PWM в AVR - www.proavr.narod.ru/z8.htm
Будете проходить мимо- проходите!
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

Я согласен что должен но его то нету.

Код можете повторить и проверить
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Как сказал radio-kot, амплитуда разной быть не может. Может быть:
- глюк протеуса
- косяк в схеме
- косяк в программе\компиляторе (врядли)
Выложили бы проект (схема+hex), было бы проще. Попробуйте принудительно переключить пин с ШИМом на вывод (регистр DDRx), мало ли...
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Сообщение radio-kot »

vovksextra писал(а): Код можете повторить и проверить
Спасибо. Я то думал - на что убить время ... ну конечно же на проверку кривого кода.
Будете проходить мимо- проходите!
Реклама
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

radio-kot писал(а):
vovksextra писал(а): Код можете повторить и проверить
Спасибо. Я то думал - на что убить время ... ну конечно же на проверку кривого кода.
В чем заключается кривизна кода ??? Делал все по даташиту. Аргументы в студию
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Сообщение radio-kot »

Тогда вот так:

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

:beer:
Будете проходить мимо- проходите!
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

Engineer_Keen писал(а):Как сказал radio-kot, амплитуда разной быть не может. Может быть:
- глюк протеуса
- косяк в схеме
- косяк в программе\компиляторе (врядли)
Выложили бы проект (схема+hex), было бы проще. Попробуйте принудительно переключить пин с ШИМом на вывод (регистр DDRx), мало ли...
- глюк протеуса - может быть - железо приедет попробую вживую. Спасибо!
- косяк в схеме - схемы как таковой нету - один контроллер (ATMEGA8)и все

Прикрепил проект в протеусе. там же hex и lst (для любителей)
Вложения
5.ZIP
(33.91 КБ) 284 скачивания
Последний раз редактировалось vovksextra Пт июн 17, 2011 23:30:27, всего редактировалось 2 раза.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Сообщение radio-kot »

есть не кривой vmlab - www.proavr.narod.ru
Будете проходить мимо- проходите!
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

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

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

Две строчки когда можно и на любимом Си набрать )
Последний раз редактировалось vovksextra Пт июн 17, 2011 23:52:12, всего редактировалось 5 раз.
Контактная информация:
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

Engineer_Keen писал(а):Как сказал radio-kot,Попробуйте принудительно переключить пин с ШИМом на вывод (регистр DDRx), мало ли...
ъ

Ну так в коде же я написал

DDRB.1 := 1; первый пин порта на вывод.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Упс, про DDRB не заметил...
В общем, у меня ШИМ вообще не наблюдается, может версия протеуса старая (7.6). Это уже не первый раз, когда он не эмулирует некоторые вещи. На всякий случай переписал на асме (кстати hex в 2 раза уменьшился), реакция аналогичная. Ждем результатов в железе :)))

PS: Можно скрин с ШИМом на осциллографе?
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

Частоту кварца выставь в int rc 8 Mhz

Ниже выложу скрин версии протеуса. Мой hex должен работать.

Железо заказал - почтой приедет. Как только приедет проверю )


PS спасибо за "сочуствие".

Тему поднял так как задал себе цель на кварце или на внутреннем RC 8Mhz получить аппаратный шим с частотой 50 гц и с переменной скважность. Получается его можно реализовать только в 14ом режиме. Только сигнал на выходе "кривой". Если есть у кого идеи буду рад принять )
Вложения
proteus.jpg
(56.97 КБ) 590 скачиваний
Последний раз редактировалось vovksextra Вс июн 19, 2011 23:42:07, всего редактировалось 2 раза.
Контактная информация:
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

Engineer_Keen писал(а): PS: Можно скрин с ШИМом на осциллографе?
рис.1

ICR1 = 20000;
Duty :=10000; ICR1/2

рис.2

ICR1 = 20000;
Duty :=5000;


рис.3

ICR1 = 20000;
Duty :=15000;


PS и всеж найди "ШИМ" ))
Вложения
шим3.jpg
(145.46 КБ) 673 скачивания
шим2.jpg
(147.44 КБ) 588 скачиваний
шим1.jpg
(148.45 КБ) 608 скачиваний
Контактная информация:
Родился
Сообщения: 3
Зарегистрирован: Сб апр 06, 2013 16:33:31

Сообщение baigor »

Всем доброго дня. В VMLAB сконфигурил симулятор для AtMega8 выполняющий функцию ШИМ генератора Tamer1. Использовал 14 режим Fast PWM, где разрешающую способность задаём через ICR1, а шим через OCR1A. Оказалось что VMLAB не способен на симуляцию этого режима. В Си коде бит WGM13 регистра TCCR1B пишется единица, а в VMLAB этот бит в нуле и ни какими способами переписать бит там не удаётся, так как в VMLAB этот бит оказывается зарезервирован и всегда в нём будет ноль. Если кто сталкивался с такой проблемой подскажите, как научить VMLAB понимать что в AtMega8 этот режим существует. У меня VMLAB версии 3.15. Более высокой версии пока не попадалось.
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

vovksextra писал(а):В протеусе вижу красивую осцилограмму нужной мне частоты, скважности. Но амплиатуда меняется в зависимости от скажности.
Где Вы видите, что меняется амплитуда? Меняется среднее значение напряжения, как и должно быть.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Сообщение radio-kot »

baigor писал(а): как научить VMLAB
Не надо. Поставьте PROTEUS 7.10 и насладитесь! www.proteus123.narod.ru - он того стоит!
Будете проходить мимо- проходите!
Вымогатель припоя
Сообщения: 542
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

Переключите осциллограф в режим DC и не будет плавать.
Родился
Сообщения: 3
Зарегистрирован: Сб апр 06, 2013 16:33:31

Сообщение baigor »

Попробовал на протеусе поработать, хорошая среда, понимает AtMegy, одно но, в качестве источника выбрал блок питания DC указал +5в, а он выдаёт биполярное питание, где в свойствах подрулить, чтоб выдавал не +-2.5в , а +5в?
Ответить

Вернуться в «AVR»