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

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

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

Сообщение edm2007 »

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

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

Сообщение kip96 »

Тогда предложите другое решение.
edm2007 писал(а):дело не во флагах.
Это же Ваши слова?
Предложите оптимальное решение без сбрасывания флагов.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Реклама
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

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

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

Сообщение kip96 »

edm2007 писал(а):Не думаете же Вы, что при включении во флагах мусор?
Думаю!, и не только во флагах. По этому всегда на ногу "Reset" МК вешаю кондёр с резистором.
edm2007 писал(а):Не думал, что уточнять нужно, очевидно же.
А надо думать, и уточнять. После моего поста Вы написали что "дело не во флагах". А оно всё-таки во флагах.
edm2007 писал(а):Пины энкодера подтянуты к питанию? Очевидно же, что при включении программа сразу уходит в прерывание
edm2007 писал(а): Почему у меня в железе этот код нормально себя ведет, без всяких сбросов флагов?
Странно, Вам очевидна проблема, но код у Вас с очевидной проблемой ведёт себя нормально.
edm2007 писал(а):низкий уровень на втором выводе. Как так выходит, что без стороннего вмешательства выполняются оба этих условия?
Вам не приходило в голову, что энкодер , при включении МК может находиться в таком положении, что пин может быть замкнут на "0"?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

kip96 писал(а):А оно всё-таки во флагах.
Безусловно, но я-то прекрасно понял куда Вы клоните. Во флагах, но не в самопроизвольном их возникновении. Срабатывание прерывания отметится флагом, понятное дело. Не за то Вы уцепились.
kip96 писал(а):Странно, Вам очевидна проблема, но код у Вас с очевидной проблемой ведёт себя нормально.


Вы это серьезно? :) В коде никаких проблем нет, и если в железе все в порядке, то и ведет он себя нормально.
kip96 писал(а):Вам не приходило в голову, что энкодер , при включении МК может находиться в таком положении, что пин может быть замкнут на "0"?
Такое конечно возможно. Не должно быть у исправного энкодера, но чего только не бывает. И-и-и? Начнем с начала. Если прерывание настроено на спад, при каком условии оно сработает? Или еще проще, сработает ли прерывание, если на этом выводе сразу будет низкий уровень? :))

P.S. Или тут такой случай, когда одна нога энкодера оказалась на земле, в голове регистрах мусор, и все это ка-а-а-к случилось в одном устройстве! :solder:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Реклама
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Оооо, конечно! Все мои энкодеры, которые я проверил, и новые и бу с автомагнитол, имеют положение, когда пин замкнут на "общий". Видимо все они "неисправны" :)) По сему, другого решения нет, как сбросить флаги при включении прерывания.
А так, будем равняться на Вас , о Учитель!
edm2007 писал(а): если на этом выводе сразу будет низкий уровень?
А если сразу высокий? Сработает?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Реклама
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Если на выводе высокий а настроен на спад? Ну в вашем волшебном королевстве и не такое возможно. :)) А так, нет конечно. Пока перепада с высокого на низкий не будет, прерывание не сработает. И даже если Ваш чудный энкодер будет прижимать пин внешнего прерывания к земле до старта МК, при включении прерывание не сработает. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Ага, теперь дальше.
Любой энкодер имеет бешенный дребезг. Лично у меня, с моими "не исправимыми", ни когда не получалось добиться нормальной работы, не повесив на ноги энкодера конденсатор. И пины подтягиваем к "+" программно. Дальше объяснять?
По сему, другого решения, как сбросить флаги перед включением прерывания НЕТ!
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

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

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

Сообщение kip96 »

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

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

Сообщение edm2007 »

Что-то Вы повторяетесь. Действительно не понимаете, или это ход такой хитрый? :)) Очевидно - это относится к тому, как такое могло произойти, что при включении никто ничего не трогал, а переменная уменьшилась (и перевалила через 0). Прерывание сработало и на втором выводе тоже был 0. Логично же? Других вариантов нет. Как могло сработать прерывание? Только по перепаду с высокого на низкий. Следовательно, Ваша версия с кособокими энкодерами, у которых один вывод уже прижат к земле не жизнеспособна. Нужен перепад, а тут всегда земля.

Если все подключено верно, то каким бы ни был энкодер, при включении код не уйдет обрабатывать прерывание. Для этого просто не будет условий, понимаете? Логическая единица там была при включении, или логический ноль, не имеет никакого значения. Да хоть оба вывода пусть будут на земле, это ничего не изменит.

Куда проще-то? Зацепились за то, что мне очевидно. Разумеется очевидно, что произошло. Такие вещи анализировать нужно, выясняя что случилось, а не флаги сбрасывать. Светодиод зажигать в прерывании, например. И при включении смотреть, загорится он или нет. Загорелся без вмешательства? Значит прерывание точно сработало. Смотреть уровни на ногах. Перепада не было? Выяснять, почему у МК при включении снесло чердак. Если это питание, то хотя бы выставить фьюзы Start-up time: 6 CK + 64 ms, чтобы питание успело стабилизироваться. Или повесить тот же конденсатор на RESET... А если при следующем включении программу унесет еще по какому-нибудь вектору, тоже флаги сбрасывать будете?

Все это - лично мое мнение. Я никому его не навязываю, и никого не собираюсь учить, как и что делать. Вашу позицию я понял, моя более чем прозрачна, на этом вопрос закроем, я думаю. :tea:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

edm2007 писал(а): Прерывание сработало и на втором выводе тоже был 0. Логично же? Других вариантов нет. Как могло сработать прерывание? Только по перепаду с высокого на низкий. Следовательно, Ваша версия с кособокими энкодерами, у которых один вывод уже прижат к земле не жизнеспособна
Вы уже путаетесь. У меня не было ни когда такой версии. Я ответил на Ваш вопрос, как "и на втором выводе тоже был 0"
Я предложил решение проблемы, Вы его оспорили "дело не во флагах." И написали , что Вам что-то очевидно. Вот и расскажите Вашу версию, может она лучше. Если дело не во флагах, тогда в...... Что нужно исправить?
Вот вам идеальные условия
Вложения
прерывание.rar
(34.87 КБ) 165 скачиваний
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

kip96 писал(а):У меня не было ни когда такой версии.
Еще бы. :) Естественно, это моя версия. Это я анализировал, как могло произойти, что при включении программа сразу попала в прерывание и уменьшила переменную. Понятно? Прерывание сработало и на втором выводе оказался 0. Именно это и очевидно. Все еще понятно? :) Как могла уменьшиться переменная понятно. Другое дело, почему это произошло. Энкодер не крутили, перепадов не создавали, а оно все равно произошло. Как Вы? Не потеряли нить? :)
kip96 писал(а):Вот вам идеальные условия
1. Пин INT0 настроен на выход (точнее весь порт D, а INT0 под раздачу попал, потому как он PD2)
2. Подтянут PB0, а это PCINT0. Вы же знаете, что это за прерывание?
3. И самое интересное, если настроить как положено INT0 на вход, подтянуть именно его резистором (а не PCINT0), то... Светодиод все равно зажигается. Казалось бы, ерунда какая, не может же такого быть. Но пошаговая симуляция тут же в протеусе все ставит на свои места. Светодиод зажигается еще до конфигурации порта на выход. Код в прерывание не попадает, а светодиод все равно зажигается.

Догадаетесь, почему? :tea:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Да, мой косяк, На нетбуке пишу, не доглядел.
edm2007 писал(а):Догадаетесь, почему?
Нет, не догадываюсь, просветите!
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Светодиод на выводе TxD, а в коде

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

$baud = 38400
Собственно, в этом и дело...
Вложения
другое прерывание.rar
(33.54 КБ) 164 скачивания
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Понятно!
Значит дело всё таки не во флагах. Мой ответ не верный, прощу прощения у форумчан, что ввёл вас в заблуждение.
edm2007 писал(а):Пины энкодера подтянуты к питанию? Очевидно же, что при включении программа сразу уходит в прерывание
Из всех наших дебатов понял, что очевидно, что прерывание сработало, и навело на эту мысль подтянутые пины энкодера к питанию, энкодер у автора тоже видимо глючный, либо кондёр на ноге большой, дело не во флагах, и просто так их сбрасывать опасно.
Пойду удалю своё сообщение и буду теперь моргать светодиодом, и часики писать.
З.ы. А что же Вы посоветуете автору?
Ах да, повесить лампочку и ловить прерывание. Нет первым делом сделать нормальный БП,(не дай бог питается схема от USB, и програмьатор не отключает во время теста.) Купить нормальный энкодер, и обязательно подключать экранированным проводом. И главное, время заряда кондёра на пинах не должно превысить 64 mS. И лучше всё в экран.
Ну , а если всё же не получится, сбросьте флаги перед включением прерывания (GIFR=64). Тем более, что перед включением прерывания - ни кому не повредит, а только на пользу. Вы же не хотите неожиданностей. И вам наверняка мало интересны факты прерывания, до того как вы решили его включить.
Всё пошёл, часики ждут :))
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Эх, чижолый Вы все же человек. :)) Но тут уж действительно, каждому - свое. Не хочется разбираться, с какого это перепугу прерывание само сработало, ну да и ладно. Проще флаги сбрасывать, ну да ради бога. Можно таймер завести, чтобы само все сбрасывалось, мало ли чего, а ну как сработает еще само. Завтра, например. :)

Сарказм Ваш понятен, конечно, но если все же это устройство сложнее и ответственнее часиков, то разобраться в причинах нужно. Потому как это не нормально, когда прерывание срабатывает само, без видимых причин. Пусть у Вас энкодер такой, что жмется к земле (наслышан о таких, но за 20 лет практики не встречал), но это явно не причина.

Вы всё пытаетесь получить совет, что делать автору с его проблемой, и никак не можете понять, что проблемы-то нет. Смотрите, ладно, пусть и один вывод прижат к земле. Пусть этот вывод второй, по которому принимается решение, куда вертят энкодер, но если мы энкодер не трогали, мы не должны попасть в прерывание. Это-то понятно? А если попали - на то есть явно причина. И лично для меня, в моем устройстве, принципиально ее найти. Что бы потом не краснеть за свои поделки, когда этот баг вылезет где-то снова. Найти - это значит точно знать, что послужило причиной срабатывания. Конденсаторы большие на пинах? Точно убедились? Замечательно. Тогда сбрасываем флаги спокойно. Мусор во флаговых регистрах? Точно? Что может быть проще, вывести его содержимое в любом удобном виде на индикацию и понаблюдать... Про подтяжку я в первую очередь спросил, потому как плохая подтяжка на выводе прерывания запросто нахватает помех.

Ну неужели Вам самому не интересно узнать, что происходит в Вашем устройстве. Ведь Ваш же пример был нагляднее некуда, когда ожидаем одно, происходит другое, а причина вообще в третьем. Не интересно и проще костыль вставить? Право Ваше. :tea:
kip96 писал(а):Вы же не хотите неожиданностей.
В этом-то все и дело. :)) На этом закончим, было бы о чем спорить.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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

Сообщение Адвансед »

kip96 писал(а): Я предложил решение проблемы, Вы его оспорили "дело не во флагах." И написали , что Вам что-то очевидно. Вот и расскажите Вашу версию, может она лучше.
присоединяюсь, было бы интересно узнать Ваш вариант решения моей проблемы, возможно он будет более правильным,
ps; это не претензия, спрашиваю в целях самообразования.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Здравствуйте.

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

Теперь с Вашей конструкцией. Будьте добры, ответьте на несколько вопросов:

1. В положении покоя средняя нога энкодера замкнута с какой-либо из других?
2. У пинов энкодера подтяжка внутренняя или внешняя? Если внешняя, то каковы ее номиналы?
3. Висят ли на пинах энкодера конденсаторы?
4. Если не трогать ручку энкодера и просто подать питание, на дисплее сразу появляется N65535?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

решил попробовать USB,взял вольтметр из этой статьи http://avrproject.ru/publ/poleznaja_inf ... /4-1-0-118,исходник не компилируется в BASCOM 2.07.8-выводит ошибки
Error : 380 Line : 469 Array<>Non Array mismatch [TXSTATE(I),TXSTATE] , in File : C:\Users\Администратор\Desktop\usb termo\usb termo исх данные\001.bas
Error : 380 Line : 507 Array<>Non Array mismatch [TXSTATE(3),TXSTATE] , in File : C:\Users\Администратор\Desktop\usb termo\usb termo исх данные\001.bas
Error : 7 Line : 507 IF THEN expected [ 644] , in File : C:\Users\Администратор\Desktop\usb termo\usb termo исх данные\001.bas
Error : 123 Line : 507 END IF expected , in File : C:\Users\Администратор\Desktop\usb termo\usb termo исх данные\001.bas
как бы не старался-ошибка и все,попробовал добавить это
#if _build >= 20076
Config Error = Ignore , 380 = Ignore
#endif
не помогло,что может быть-может кто сталкивался?
Ответить

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