Страница 64 из 304

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

Добавлено: Пт фев 25, 2011 01:10:38
Секретный кот
Moto_v3x писал(а):Возможно так будет работать:
Для подпрограмм возможно да, но для прерываний точно нет :(
kip96 писал(а):Как занести переменную в конкретный адресс, что-бы потом не искать её?
Я бы использовал EEPROM. В своё время сэкономил так кучу памяти, подменив табличную функцию массивом в EEPROM.

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

Добавлено: Пн фев 28, 2011 15:02:43
Gordon Shumway
Доброго времени суток, уважаемые знатоки !

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

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

Помогите с проблемой, плиз ! :)

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

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

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

Добавлено: Вт мар 01, 2011 04:20:01
Magicanin
Доброго всем времени суток.
Имеется девайс в стадии разработки с внешним прерванием и шиной 1-wire.
Вопрос: Может ли сбоить обмен данными 1-wire при приходе внешнего прерывания, если да, то как синхронизировать, при условии что период прерываний имеет очень широкий диапозон (от счетчика эл.энергии с импульсным выходом)?

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

Добавлено: Вт мар 01, 2011 10:43:41
edm2007
То бишь внешнее прерывание у Вас прерывает обмен по 1-Wire? Он не может сбоить, он БУДЕТ сбоить. Во время чтения/записи данных по шине 1-Wire нужно запрещать прерывания. Ну или работайте с 1-Wire в прерывании. :)

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

Добавлено: Вт мар 01, 2011 15:51:47
Magicanin
Если работать в прерывании то обмен данными будет происходить не равномерно от раз в час до раз в секунду. Если запречать прерывания то замер периода между импульсами коту под хвост. Как же быть, чтобы обмен происходил не позже чем раз в минуту?

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

Добавлено: Вт мар 01, 2011 16:06:38
edm2007
Я не предлагал обмен делать во внешнем прерывании. Ну настройте по таймеру как вам необходимо.

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

Добавлено: Вт мар 01, 2011 16:34:59
Magicanin
Спасибо. Не догнал. Не сталкивался с таймером в таком аспекте. Заказали устройство "все в одном", вот и ломаю голову с согласованием. Если не затруднит можно поподробнее ну или кусок кода, сам разберусь.

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

Добавлено: Вт мар 01, 2011 17:56:48
edm2007
У Вас работа с 1-Wire занимает так много времени? В любом случае нельзя чтобы внешнее прерывание рвало данные. Так а про прерывание по таймеру - просто заходим по переполнению и увеличиваем переменную. Достигнет определенного значения - там же работаем с 1-Wire. Только в любом случае прерывание по переполнению запретит внешнее. Разве что выставится флаг внешнего прерывания, и оно не будет потеряно. Впрочем, оно и при запрете не потеряется.

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

Добавлено: Вт мар 01, 2011 18:25:04
Magicanin
Времени прилично займет - опрос девяти датчиков температуры. Будем разбираться...

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

Добавлено: Ср мар 02, 2011 17:16:20
Gordon Shumway
Мурик писал(а):
Gordon Shumway писал(а):Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).
Можно включить предделитель таймера, а если будет мало - задействовать переменную в качестве счётчика числа прерываний таймера, т. е. при каждом прерывании, увеличиваем число в переменной на 1 и если в переменной окажется требуемое число, её обнуляем и выполняем нужные действия.
Оказалось, что Timer1 с предделителем 1024 вполне достаточно. Вот только я не понял, как этим пользоваться ? Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?
Мне нужно поанализировать порт 10 секунд, а потом идти дальше, если на этом порту никаких изменений не произошло.

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

Добавлено: Ср мар 02, 2011 17:26:25
edm2007
Gordon Shumway писал(а):Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?
Ну разумеется накапливает. В счетном регистре. А понять можно по прерыванию при переполнении. :)

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

Добавлено: Ср мар 02, 2011 17:39:08
Gordon Shumway
edm2007 писал(а):
Gordon Shumway писал(а):Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?
Ну разумеется накапливает. В счетном регистре. А понять можно по прерыванию при переполнении. :)
Сорри, а можно поподробнее ? Я пока не совсем понял, как это описАть в баскоме... Где искать этот счетный регистр ? И как поймать это прерывание при переполнении ?
:shock:

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

Добавлено: Ср мар 02, 2011 17:57:08
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 мс.

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

Добавлено: Ср мар 09, 2011 12:22:07
dhouse
Доброго дня! Хочу попробовать изготовить светосинхронизатор для внешней фотовспышки на Tiny13, но ощущаю серьезную нехватку знаний. Имеющийся в наличии промышленный синхронизатор работает на первую ведущую вспышку, в то время, когда многие фотоаппараты дают 2-3 предвспышки для замера экспозиции и сужения зрачка фотографируемого (для предотвращения красных глаз). Подскажите схемку, чтобы можно было выбирать, на какой пых ведущей вспышки срабатывала ведомая.

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

Добавлено: Чт мар 10, 2011 08:48:04
kip96
Темой не ошиблись?

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

Добавлено: Чт мар 10, 2011 09:03:02
dhouse
Темой не ошибся, но возможно, не совсем корректно сформулировал. Поскольку пытаюсь писать на Bascom, хотел узнать, как именно можно зафиксировать резкое изменение освещенности, с возможностью выбора, по какому из них замкнуть синхроконтакт вспышки. Логику для себя вижу такую: питание - 9В, делитель напряжения последовательно с фотодиодом (фототранзистором? фоторезистором?) и на АЦП. При включении устройства - замер напряжения, соответствующего освещенности. При резком изменении напряжения - подсчет количества этих изменений. Но правильно ли я себе это представляю - не уверен.

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

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

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

do
if chot=3(или сколько надо) then....
....
chot=0
end if
loop
int0:
incr chot
return
если применять ацп с фоторезистором
то проверять его по таймеру, каждые полсекунды скажем.
и сравнивать с предыдущим.
Но ацп медленный вроде,для таких делов :dont_know: Не ориентируюсь в скорости вспышек.
Разницу тут уже экспериментально, подбирать наверное, чтоб на тучи не реагировало.
ЗЫ. Я б воще такую байду на компораторе и счётчике сделал :)) Но опять-же, не знаю всех тонкостей.

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

Добавлено: Чт мар 10, 2011 20:38:03
Igor_67
Привет, коты!
Вопрос на засыпку: кто-нибудь пробовал реально (не в симуляторе) подключать больше двух датчиков DS18B20 на шину 1WIRE?
И образец кода, если можно, в баскоме. У меня больше двух датчиков - кажут всякую хрень.
В данный момент свой код предоставить не могу, по причине того, что работаю с ноута, а все проекты на стационаре...

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

Добавлено: Чт мар 10, 2011 21:00:50
dhouse
Спасибо kip96! Наверное, попробую сделать на фототранзисторе, хотя еще есть вопросы по конструкции, но кое-что нашел в инете. Почему-то народ избегает микроконтроллеры, используя логику и тригеры.