Прямая работа с регистрами в BASCOM-AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 66
Зарегистрирован: Пт дек 10, 2010 18:29:26

Сообщение user2007 »

Марк Альбертс создавал BASCOM-AVR как C-BASIC.Это означает, что в синтаксисе языка заложена возможность прямой работы с регистрами МК.
Например, для организации низкочастотной ШИМ при управлении мощностью в нагрузке с помощью тиристора или транзистора удобнее всего управлять ШИМ по прерыванию от таймера TIMER0, получая виртуальную «пилу» увеличением переменной 1 на 1 при каждом прерывании и сбрасывая ее в 0 при достижении максимального значения, и сравнивать значение «пилы» с переменной 2, выключая энергию при равенстве значений.
Все это работает прекрасно, но если в системе используются датчики DS18S20, требуется регулярно запрещать прерывания на время работы с датчиком, что нарушает работу ШИМ и других устройств,работающих по временному прерыванию.
Для того, чтобы убрать этот дефект, можно использовать возможность прямого управления регистрами МК.Например, для использования TIMER2 в качестве аппаратного ШИМ, Марк Альбертс предлагает следующее.Чип ATmega8535.
1)Задаем режимы регистра управления TCCR2 для режима FAST PWM, например:
FOC2=0 ‘8 разряд
WGM20=1 ‘fast PWM
COM21=1 ‘выход уст. в ноль
COM20=0 ‘выход уст. в ноль
WGM21=1 ‘fast PWM
CS22=1 ‘делитель (на 256)
CS21=0 ‘то же
CS20=0 ‘то же
2)В регистр управления OCR2 периодически записываем переменную для регулирования скважности A , величину которой регулируем от 0 до 255(например, нажатием кнопок).

&clock = 16000000
Dim A As Byte
Config Timer 2 = Timer
Preskale = 256
TCCR2 = 124 ‘(0+64+32+0+8+4+0+0)

Begin:
………………………………………………………………….
(меняем А в цикле)
OCR2=A ‘ШИМ с частотой 1 кГц
………………………………………………………………….
Disable interrupts ‘ШИМ непрерывен на выходе Timer 2!
(работа с 18S20)
Enable interrupts
………………………………………………………………….
Goto Begin
Возможно, эта информация от Марка Альбертса кому-то будет полезной.
Последний раз редактировалось user2007 Пт фев 17, 2012 13:35:44, всего редактировалось 1 раз.
Реклама
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Это что? На вопрос вроде не похоже.. :roll: :tea:
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

МитяРа писал(а):Это что? На вопрос вроде не похоже.. :roll: :tea:
Чел поделился радостью открытия. :) Вот только цитирование описания здесь лишнее. Можно было бы просто написать "Я научился и теперь умею!!!". На радостях добавить смайлик... :)
С уважением,
Виктор.
Открыл глаза
Сообщения: 66
Зарегистрирован: Пт дек 10, 2010 18:29:26

Сообщение user2007 »

Во-первых, в свое время я просил администрацию сайта сделать раздел:"программирование на BASCOM-AVR",в котором "вопросы и ответы" были бы подразделом.Так что эта тема вывалилась оттуда и это - не моя вина.
Во-вторых, Вы ,похоже,не работаете с BASCOM-AVR , поскольку в нем есть единственная директива "CONFIG Timer... = PWM".
Учитывая, что режимов PWM 8-разрядный счетчик AVR имеет 6 видов, я поинтересовался у автора языка, какой именно PWM он имел в виду. На это и последовала рекомендация по прямой работе с регистрами(это было лет 5 назад), которая позволяет работать в этих 6 режимах. Главное, что компилятор ПОНИМАЕТ прямое обращение к регистрам, как в С.Другое дело, что аппаратные возможности AVR некорректны и требуют дополнительных усилий:в частности, при А=0 в вышеприведенном примере на выходе будет короткий всплеск из-за асинхронного обнуления счетчика, то есть не 0!Также прямая работа с регистрами возможна и для других устройств МК. Автор языка попросил меня довести вышеприведенную информацию до пользователей BASCOM-AVR, а недавно спросил, сделал ли я это.И вот, наконец... :)
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

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