Страница 1 из 1

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

Добавлено: Пт фев 17, 2012 13:33:13
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
Возможно, эта информация от Марка Альбертса кому-то будет полезной.

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

Добавлено: Пт фев 17, 2012 13:35:20
МитяРа
Это что? На вопрос вроде не похоже.. :roll: :tea:

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

Добавлено: Сб фев 18, 2012 13:35:35
ut1wpr
МитяРа писал(а):Это что? На вопрос вроде не похоже.. :roll: :tea:
Чел поделился радостью открытия. :) Вот только цитирование описания здесь лишнее. Можно было бы просто написать "Я научился и теперь умею!!!". На радостях добавить смайлик... :)

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

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