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

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

Сообщение edm2007 »

Пожалуйста. Так и мне полнейшая выгода. Покопаться-то интересно же. :) Вообще, ожидание отпускания кнопки появилось когда нужно было использовать выход из режима POWERDOWN. Просто, проснуться из него можно только по НИЗКОМУ уровню внешнего прерывания (LOW LEVEL). А оно генерируется ВСЕ ВРЕМЯ, пока нажата кнопка. И флаги сброшены ПОСТОЯННО. Так что тут только разрешать / запрещать. Вот и появилась такая защита от преднамеренного удержания кнопки. Просто, если кнопка удерживалась специально, то в момент разрешения прерывания оно тут же шло обрабатываться. Что было недопустимо. Ну и здесь тоже... Я не знаю кто и как решает такую проблему, но с такой проверкой за месяцы работы в разных устройствах небыло замечено вообще ни единого ложного срабатывания, дребезга, глюка и прочего...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

Сообщение saschai »

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

Сообщение edm2007 »

Буду честен, почти ничего не понял. :)) Что именно тебя смущает? А для устройства нормально, что оно будет сбрасываться если кнопку передержали?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

Сообщение saschai »

Смущает :)) , что не сбрасывается флаг прерывания, после сброса МК, по собачему таймеру :))
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

А-а-а, в том смысле что сброс происходит до того как очистится флаг? :) Так вроде по вектору сброса все регистры в первоначальное состояние того... Ну кроме регистра статуса, разумеется... Я вот так посмотрел, уходит на прерывание программа после сброса только когда кнопка отпускается...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

Сообщение saschai »

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

Сообщение edm2007 »

Так реле на пине висит? И что, при подаче питания оно включается? Разве что через p-n-p транзистор. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

Сообщение saschai »

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

Сообщение edm2007 »

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

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

Доброго времени суток всем !

Случилась такая ерунда: подключил LCD 16x2 к тиньке, все работает как надо. Но нужно мне, чтобы питанием экрана тоже тинька управляла. Добавил:

Portb.1=output
PORTB.1 = 1 ;подаем питание на LCD

что-то выводим на экран

Portb.1=0 ;снимаем питание с LCD

Powerdown ;баиньки

И экран начал выводить мусор вместо нормальной информации...
Если его запитать напрямую от +5в, то работает нормально.
Пробовал задержки всякие - не помогает.
Где копать ? Подскажите плиз...
С уважением,
Алексей.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Сообщение ВНН »

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

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

ВНН писал(а):Всмысле ты питаеш индикатор от ножки тиньки или управляеш питанием через ключ.
Питаю от ножки тиньки. Видел в каком-то проекте такую реализацию питания LCD 16x2 от порта тини2313, там все работало.
С уважением,
Алексей.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Тогда нужно самому инициализировать дисплей.
В твоем случае нужно сделать так:

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

PORTB.1 = 1 ' подаем питание на LCD
INITLCD     ' инициализация LCD
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Сообщение kip96 »

Подскажите,коты, как выйти из подпрограммы. Замудрил так, что из подпрограммы нужно перейти на метку , примерно так:

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

Perehod:
  If Bu = 0 Then
   K = K + 1
     If K > 9 Then Goto Aa
   Waitms 500                                             
   If Bu = 0 Then Goto Aa
 Goto Budon(k)
 End If

Return

Как корректно написать?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

kip96 писал(а):Как корректно написать?
По этому куску сложно что-то сказать.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

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

kip96 писал(а):Goto Budon(k)
Переход по элементу массива? BASCOM такое не умеет.
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Сообщение kip96 »

Нет, не массив. Баском схавает же как метку? Или в метке скобки нельзя ставить? :dont_know: (метка обзывается так исключительно для личного удобства)
Просто когда зашёл в подпрограмму и с неё ушёл на метку, то RETURN не произошёл, и получается я болтаюсь в подпрограмме? Вот глянул в асм ( я в нём пока ноль), вроде ни каких флагов там нет ,при перходе на подпрограмму :dont_know:
Вообщем вопрос - где я болтаюсь и как из этого вылезти :)) :o :o :)) !
Иначе, конечно, придётся переписывать всё :shock:
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

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

kip96 писал(а):Нет, не массив. Баском схавает же как метку? Или в метке скобки нельзя ставить?
Скобки лучше нигде, кроме массивов, не использовать.
kip96 писал(а):Просто когда зашёл в подпрограмму и с неё ушёл на метку, то RETURN не произошёл, и получается я болтаюсь в подпрограмме?
Если есть GOSUB, обязательно в конце должен быть RETURN. Даже если подпрограмма использует переходы по GOTO. Например:

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

Gosub Podprogr
...
Podprogr:
If x=1 Then Goto M1
If y=2 Then Goto M2
Return

M1:
x=2
Return

M2:
y=3
Return
Кстати, экспериментальным путём обнаружил, что использование Return внутри If приводит к неработоспособности программы, например:

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

If x=1 Then Return 'Так не работает и вешает МК
If x=1 Then Goto Endp
Endp:
Return 'А так работает ОК
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Сообщение Moto_v3x »

Возможно так будет работать:

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

If x=1 Then Exit Sub
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Сообщение kip96 »

Всё понятно., вообщем не буду мудрить, буду переделывать.
Вот другой вопрос. Чисто из спортивного интереса, хочу выжать с тини2313 всё, поэтому такой код:

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

For I = 1 To 18
Chas(i) = 24
Next
для меня прожорлив.
Т.к. эта строчка работает только единожды, в начальных установках, думаю переменную забить сразу в НЕХ файле, сэкономив таким образом 3 % памяти. Как занести переменную в конкретный адресс, что-бы потом не искать её?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Ответить

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