Никак я не закончу свой девайс, ибо знаний по Баскому не хватает...
Вопрос в следующем: нужно отвести определенное время на анализ порта, к примеру не пришла ли единица на pinb.7 в течение 10 секунд. Сейчас я сделал это циклом в цикле, а внутри IF. Подозреваю, что это очень коряво, не очень красиво и проч... В обучалке с декады прочитал про прерывания Timer0 и Timer1 (по переполнению). Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).
Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).
Можно включить предделитель таймера, а если будет мало - задействовать переменную в качестве счётчика числа прерываний таймера, т. е. при каждом прерывании, увеличиваем число в переменной на 1 и если в переменной окажется требуемое число, её обнуляем и выполняем нужные действия.
Доброго всем времени суток. Имеется девайс в стадии разработки с внешним прерванием и шиной 1-wire. Вопрос: Может ли сбоить обмен данными 1-wire при приходе внешнего прерывания, если да, то как синхронизировать, при условии что период прерываний имеет очень широкий диапозон (от счетчика эл.энергии с импульсным выходом)?
_________________ Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!
То бишь внешнее прерывание у Вас прерывает обмен по 1-Wire? Он не может сбоить, он БУДЕТ сбоить. Во время чтения/записи данных по шине 1-Wire нужно запрещать прерывания. Ну или работайте с 1-Wire в прерывании.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Если работать в прерывании то обмен данными будет происходить не равномерно от раз в час до раз в секунду. Если запречать прерывания то замер периода между импульсами коту под хвост. Как же быть, чтобы обмен происходил не позже чем раз в минуту?
_________________ Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!
Я не предлагал обмен делать во внешнем прерывании. Ну настройте по таймеру как вам необходимо.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Спасибо. Не догнал. Не сталкивался с таймером в таком аспекте. Заказали устройство "все в одном", вот и ломаю голову с согласованием. Если не затруднит можно поподробнее ну или кусок кода, сам разберусь.
_________________ Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!
У Вас работа с 1-Wire занимает так много времени? В любом случае нельзя чтобы внешнее прерывание рвало данные. Так а про прерывание по таймеру - просто заходим по переполнению и увеличиваем переменную. Достигнет определенного значения - там же работаем с 1-Wire. Только в любом случае прерывание по переполнению запретит внешнее. Разве что выставится флаг внешнего прерывания, и оно не будет потеряно. Впрочем, оно и при запрете не потеряется.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Но это переполнение очень быстро происходит (у меня кварц 4 мгц, меньше нельзя).
Можно включить предделитель таймера, а если будет мало - задействовать переменную в качестве счётчика числа прерываний таймера, т. е. при каждом прерывании, увеличиваем число в переменной на 1 и если в переменной окажется требуемое число, её обнуляем и выполняем нужные действия.
Оказалось, что Timer1 с предделителем 1024 вполне достаточно. Вот только я не понял, как этим пользоваться ? Таймер где-то накапливает счет ? Как понять, что таймер переполнился ? Мне нужно поанализировать порт 10 секунд, а потом идти дальше, если на этом порту никаких изменений не произошло.
Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?
Ну разумеется накапливает. В счетном регистре. А понять можно по прерыванию при переполнении.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Таймер где-то накапливает счет ? Как понять, что таймер переполнился ?
Ну разумеется накапливает. В счетном регистре. А понять можно по прерыванию при переполнении.
Сорри, а можно поподробнее ? Я пока не совсем понял, как это описАть в баскоме... Где искать этот счетный регистр ? И как поймать это прерывание при переполнении ?
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 мс.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Доброго дня! Хочу попробовать изготовить светосинхронизатор для внешней фотовспышки на Tiny13, но ощущаю серьезную нехватку знаний. Имеющийся в наличии промышленный синхронизатор работает на первую ведущую вспышку, в то время, когда многие фотоаппараты дают 2-3 предвспышки для замера экспозиции и сужения зрачка фотографируемого (для предотвращения красных глаз). Подскажите схемку, чтобы можно было выбирать, на какой пых ведущей вспышки срабатывала ведомая.
Темой не ошибся, но возможно, не совсем корректно сформулировал. Поскольку пытаюсь писать на Bascom, хотел узнать, как именно можно зафиксировать резкое изменение освещенности, с возможностью выбора, по какому из них замкнуть синхроконтакт вспышки. Логику для себя вижу такую: питание - 9В, делитель напряжения последовательно с фотодиодом (фототранзистором? фоторезистором?) и на АЦП. При включении устройства - замер напряжения, соответствующего освещенности. При резком изменении напряжения - подсчет количества этих изменений. Но правильно ли я себе это представляю - не уверен.
Не знаю тонкостей вашей работы, могу посоветовать: В зависимости от того, насколько сильно датчик освещается. Если применить фототранзистор-так вообще можно на любой порт, или прерывание, взависимости от задачи.
Код:
do if chot=3(или сколько надо) then.... .... chot=0 end if loop int0: incr chot return
если применять ацп с фоторезистором то проверять его по таймеру, каждые полсекунды скажем. и сравнивать с предыдущим. Но ацп медленный вроде,для таких делов Не ориентируюсь в скорости вспышек. Разницу тут уже экспериментально, подбирать наверное, чтоб на тучи не реагировало. ЗЫ. Я б воще такую байду на компораторе и счётчике сделал Но опять-же, не знаю всех тонкостей.
_________________ Все делают ошибки, только мудрецы - новые, а дураки - старые.
Привет, коты! Вопрос на засыпку: кто-нибудь пробовал реально (не в симуляторе) подключать больше двух датчиков DS18B20 на шину 1WIRE? И образец кода, если можно, в баскоме. У меня больше двух датчиков - кажут всякую хрень. В данный момент свой код предоставить не могу, по причине того, что работаю с ноута, а все проекты на стационаре...
_________________ Цапу крутить надо!!! Ку или не ку?
Спасибо kip96! Наверное, попробую сделать на фототранзисторе, хотя еще есть вопросы по конструкции, но кое-что нашел в инете. Почему-то народ избегает микроконтроллеры, используя логику и тригеры.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения