BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Секретный кот »

Moto_v3x писал(а):Возможно так будет работать:

Для подпрограмм возможно да, но для прерываний точно нет :(

kip96 писал(а):Как занести переменную в конкретный адресс, что-бы потом не искать её?

Я бы использовал EEPROM. В своё время сэкономил так кучу памяти, подменив табличную функцию массивом в EEPROM.
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Gordon Shumway »

Доброго времени суток, уважаемые знатоки !

Никак я не закончу свой девайс, ибо знаний по Баскому не хватает...

Вопрос в следующем: нужно отвести определенное время на анализ порта, к примеру не пришла ли единица на pinb.7 в течение 10 секунд. Сейчас я сделал это циклом в цикле, а внутри IF. Подозреваю, что это очень коряво, не очень красиво и проч...
В обучалке с декады прочитал про прерывания Timer0 и Timer1 (по переполнению). Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).

Помогите с проблемой, плиз ! :)
С уважением,
Алексей.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: BASCOM AVR в вопросах и ответах

Сообщение Мурик »

Gordon Shumway писал(а):Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).
Можно включить предделитель таймера, а если будет мало - задействовать переменную в качестве счётчика числа прерываний таймера, т. е. при каждом прерывании, увеличиваем число в переменной на 1 и если в переменной окажется требуемое число, её обнуляем и выполняем нужные действия.
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: BASCOM AVR в вопросах и ответах

Сообщение Magicanin »

Доброго всем времени суток.
Имеется девайс в стадии разработки с внешним прерванием и шиной 1-wire.
Вопрос: Может ли сбоить обмен данными 1-wire при приходе внешнего прерывания, если да, то как синхронизировать, при условии что период прерываний имеет очень широкий диапозон (от счетчика эл.энергии с импульсным выходом)?
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

То бишь внешнее прерывание у Вас прерывает обмен по 1-Wire? Он не может сбоить, он БУДЕТ сбоить. Во время чтения/записи данных по шине 1-Wire нужно запрещать прерывания. Ну или работайте с 1-Wire в прерывании. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: BASCOM AVR в вопросах и ответах

Сообщение Magicanin »

Если работать в прерывании то обмен данными будет происходить не равномерно от раз в час до раз в секунду. Если запречать прерывания то замер периода между импульсами коту под хвост. Как же быть, чтобы обмен происходил не позже чем раз в минуту?
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Я не предлагал обмен делать во внешнем прерывании. Ну настройте по таймеру как вам необходимо.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: BASCOM AVR в вопросах и ответах

Сообщение Magicanin »

Спасибо. Не догнал. Не сталкивался с таймером в таком аспекте. Заказали устройство "все в одном", вот и ломаю голову с согласованием. Если не затруднит можно поподробнее ну или кусок кода, сам разберусь.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

У Вас работа с 1-Wire занимает так много времени? В любом случае нельзя чтобы внешнее прерывание рвало данные. Так а про прерывание по таймеру - просто заходим по переполнению и увеличиваем переменную. Достигнет определенного значения - там же работаем с 1-Wire. Только в любом случае прерывание по переполнению запретит внешнее. Разве что выставится флаг внешнего прерывания, и оно не будет потеряно. Впрочем, оно и при запрете не потеряется.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: BASCOM AVR в вопросах и ответах

Сообщение Magicanin »

Времени прилично займет - опрос девяти датчиков температуры. Будем разбираться...
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Gordon Shumway »

Мурик писал(а):
Gordon Shumway писал(а):Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).
Можно включить предделитель таймера, а если будет мало - задействовать переменную в качестве счётчика числа прерываний таймера, т. е. при каждом прерывании, увеличиваем число в переменной на 1 и если в переменной окажется требуемое число, её обнуляем и выполняем нужные действия.


Оказалось, что Timer1 с предделителем 1024 вполне достаточно. Вот только я не понял, как этим пользоваться ? Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?
Мне нужно поанализировать порт 10 секунд, а потом идти дальше, если на этом порту никаких изменений не произошло.
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Gordon Shumway писал(а):Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?


Ну разумеется накапливает. В счетном регистре. А понять можно по прерыванию при переполнении. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Gordon Shumway »

edm2007 писал(а):
Gordon Shumway писал(а):Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?


Ну разумеется накапливает. В счетном регистре. А понять можно по прерыванию при переполнении. :)


Сорри, а можно поподробнее ? Я пока не совсем понял, как это описАть в баскоме... Где искать этот счетный регистр ? И как поймать это прерывание при переполнении ?
:shock:
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Да все просто на самом деле.

Код: Выделить всё

'*************************[Псевдокоманды управления]*********************

$regfile = "attiny2313.dat"    ' тип МК
$crystal = 4000000              ' выбор кристала для расчета задержек

'*************************[Инициализация прерываний]*********************

Config Timer0 = Timer , Prescale = 64   ' конфигурируем таймер
On Timer0 Refresh                               ' обзываем прерывание

Enable Interrupts                                  ' разрешаем все прерывания
Enable Timer0                                       ' и для таймера в частности
Start Timer0                                        ' запускаем таймер

'*************************[Начало основной программы]*********************

Do        ' крутимся здесь, ожидая прерывания

Loop

'**********************[Процедуры обработки прерываний]******************

Refresh:                             ' прерывание таймера Т0 по переполнению

' делаем тут что нам нужно

Return                               ' выход из обработчика прерывания



Сначала настраиваем таймер. Командой On Timer0 Refresh мы даем ему метку, по которой он перейдет при переполнении счетного регистра. Затем, разрешаем работу этого прерывания. И все. Крутимся себе в основном цикле, что-нибудь делая, например. А как только таймер переполнится, программа сразу уйдет на метку Refresh. После обработки прерывания программа вернется на место, где была прервана.
В коде выше при тактовой частоте 4 МГц и пределителе 64 он будет увеличивать свое значение каждые 64 / 4 000 000 = 0,016 мс. Значит переполняться он будет каждые 255 * 0,016 = 4,08 мс.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Доброго дня! Хочу попробовать изготовить светосинхронизатор для внешней фотовспышки на Tiny13, но ощущаю серьезную нехватку знаний. Имеющийся в наличии промышленный синхронизатор работает на первую ведущую вспышку, в то время, когда многие фотоаппараты дают 2-3 предвспышки для замера экспозиции и сужения зрачка фотографируемого (для предотвращения красных глаз). Подскажите схемку, чтобы можно было выбирать, на какой пых ведущей вспышки срабатывала ведомая.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

Темой не ошиблись?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Темой не ошибся, но возможно, не совсем корректно сформулировал. Поскольку пытаюсь писать на Bascom, хотел узнать, как именно можно зафиксировать резкое изменение освещенности, с возможностью выбора, по какому из них замкнуть синхроконтакт вспышки. Логику для себя вижу такую: питание - 9В, делитель напряжения последовательно с фотодиодом (фототранзистором? фоторезистором?) и на АЦП. При включении устройства - замер напряжения, соответствующего освещенности. При резком изменении напряжения - подсчет количества этих изменений. Но правильно ли я себе это представляю - не уверен.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

Не знаю тонкостей вашей работы, могу посоветовать:
В зависимости от того, насколько сильно датчик освещается.
Если применить фототранзистор-так вообще можно на любой порт, или прерывание, взависимости от задачи.

Код: Выделить всё

do
if chot=3(или сколько надо) then....
....
chot=0
end if
loop
int0:
incr chot
return

если применять ацп с фоторезистором
то проверять его по таймеру, каждые полсекунды скажем.
и сравнивать с предыдущим.
Но ацп медленный вроде,для таких делов :dont_know: Не ориентируюсь в скорости вспышек.
Разницу тут уже экспериментально, подбирать наверное, чтоб на тучи не реагировало.
ЗЫ. Я б воще такую байду на компораторе и счётчике сделал :)) Но опять-же, не знаю всех тонкостей.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Привет, коты!
Вопрос на засыпку: кто-нибудь пробовал реально (не в симуляторе) подключать больше двух датчиков DS18B20 на шину 1WIRE?
И образец кода, если можно, в баскоме. У меня больше двух датчиков - кажут всякую хрень.
В данный момент свой код предоставить не могу, по причине того, что работаю с ноута, а все проекты на стационаре...
Цапу крутить надо!!! Ку или не ку?
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Спасибо kip96! Наверное, попробую сделать на фототранзисторе, хотя еще есть вопросы по конструкции, но кое-что нашел в инете. Почему-то народ избегает микроконтроллеры, используя логику и тригеры.
Ответить

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