Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Output Compare Modulator (OCM1C2)


Output Compare Modulator (OCM1C2)

Сообщений 1 страница 8 из 8

1

В datasheet на 128 мегу нашел описание данной функции. Но вот запустить ни-как не могу.
На сколько понял Timer1 следует сконфигурировать как PWM:
Config Timer1 = Pwm , Compare C Pwm = Clear Down , Prescale = 8

Возникает вопрос, а какова конфигурация Timer2 ?

0

2

'Модулятор выходов таймеров (OCM1C2)

'Таймер-счетчик 1 настроен на работу в режиме Fast PWM (без инверсии)
'а таймер-счетчик 2 генерирует импульсы в режиме СТС (сброс таймера при совпадении)
'с переключением выходного состояния выхода компаратора при совпадении (COMnx1:0 = 1).

'============================= Конфигурация таймера 1 ==========================
'Сброс OCnC при совпадении, установка OCnC на вершине счета.
'Fast PWM, 8-bit. Предделитель (From prescaler) clkI/O/64

  Tccr1a = &B00001001
  Tccr1b = &B00001011
'============================= Конфигурация таймера 2 ==========================
'Переключение (инвертирование) OC0 при каждом совпадении.
'Предделитель (From prescaler) clkI/O/1024

  Tccr2 = &B00011101
'============================= Настраиваем порт на выход =======================

'Регистр направления порта.
'Если DDRxy=0 — вывод работает как ВХОД.
'Если DDRxy=1 вывод работает на ВЫХОД.

  Ddrb.7 = 1

  Portb.7 = 1

  Ocr1c =128
'===============================================================================

В протеусе полная лабуда, по ходу не докурил datasheet. Модуляция не нормальная, то есть не так как в документации.
Может подскажите в чем проблема?

0

3

В Протеусе запустить не удалось, ни на одном МК.  В железе Atmega2561 работает так:

Исходник

$map       ' Получаем карту распределения памяти в отчёте компиляции
  $regfile = "m2561def.dat"       ' Используемый контроллер
  $crystal = 8000000       ' Частота работы контроллера
  $framesize = 64       ' Размер области используемой для преобразований
  $hwstack = 64       ' Размер аппаратного стека
  $swstack = 64       ' Размер программного стека

  $baud = 38400

  Print "Atmega2561 частота МК 8 МГц"
  Print "Залит BootLoader baud = 38400"

'===============================================================================
'                    Настройка Timer0   для частоты модуляции
'===============================================================================

  Ddrb.7 = 1       'Порт на выход
  Portb.7 = 0       'Полярность выхода

  Tccr0b.cs00 = 1       'Prescale = 1
  Tccr0a.wgm01 = 1       'CTC OCRA
  Tccr0a.com0a0 = 1       'WGM02 = 0: Normal Port Operation, OC0A Disconnected

  Ocr0a = 128       'частота модуляции

'===============================================================================
'                    Настройка Timer1  для несущей частоты
'===============================================================================

  Tccr1b.cs00 = 1       'Prescale = 1
  Tccr1b.wgm12 = 1       'CTC OCRnA Immediate MAX
  Tccr1a.com1c0 = 1       'Toggle OC1C on compare match

  Ocr1a = 5000       'Несущая частота

'===============================================================================


   Do

    Idle
   Loop

End

Экран осциллографа
http://s0.uploads.ru/t/n7Xmy.jpg

+1

4

Огромное спасибо. Примерно понял где закралась ошибка.
К стати вот не знал, что можно таким образом прописать конфигурацию таймера ( имею ввиду синтаксис  ).
Попробую на Atmega 128 в железе, по результатам отпишусь.

0

5

angald написал(а):

Попробую на Atmega 128 в железе

Не забудьте, что там модулирующий таймер другой !  TIMER2

Исходник для Atmega128

$map       ' Получаем карту распределения памяти в отчёте компиляции
  $regfile = "m128def.dat"       ' Используемый контроллер
  $crystal = 8000000       ' Частота работы контроллера
  $framesize = 64       ' Размер области используемой для преобразований
  $hwstack = 64       ' Размер аппаратного стека
  $swstack = 64       ' Размер программного стека

  $baud = 38400

  Print "Atmega2561 частота МК 8 МГц"
  Print "Залит BootLoader baud = 38400"

'===============================================================================
'                    Настройка Timer0   для частоты модуляции
'===============================================================================

  Ddrb.7 = 1       'Порт на выход
  Portb.7 = 0       'Полярность выхода

  Tccr2.cs20 = 1       'Prescale = 1
  Tccr2.wgm21 = 1       'CTC OCR2

  Ocr2 = 128       'частота модуляции

'===============================================================================
'                    Настройка Timer1  для несущей частоты
'===============================================================================

  Tccr1b.cs00 = 1       'Prescale = 1
  Tccr1b.wgm12 = 1       'CTC OCRnA Immediate MAX
  Tccr1a.com1c0 = 1       'Toggle OC1C on compare match

  Ocr1a = 5000       'Несущая частота

'===============================================================================


   Do

    Idle
   Loop

End

Отредактировано sasha_1973 (2016-11-25 20:18:05)

0

6

Да конечно, я в курсе.

0

7

Ладушки, УДАЧИ !

0

8

Все отлично!
http://s0.uploads.ru/t/HxvCV.jpg

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Output Compare Modulator (OCM1C2)