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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

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

Сообщение max50 »

edm2007 писал(а):max50, пока кнопка нажата, светодиод будет моргать туда-сюда. Это не совсем вписывается в поставленую задачу. Тогда хоть ожидание отпускания кнопки надо добавить.


Была задача:
vladik-bob писал(а):чтоб нажал на кнопочку светодиодик светится второй раз нажал светодиодик не светится?


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

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

Сообщение edm2007 »

max50, я про что говорю, пока нажата кнопка, состояние светодиода будет меняться на противоположное каждые 100 мс. Работать-то оно будет, но это же ерунда полнейшая. Чуть задержался, и он снова сменил состояние... Не серьезно...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

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

Сообщение max50 »

edm2007 писал(а):max50, я про что говорю, пока нажата кнопка, состояние светодиода будет меняться на противоположное каждые 100 мс. Работать-то оно будет, но это же ерунда полнейшая. Чуть задержался, и он снова сменил состояние... Не серьезно...


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

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

Сообщение edm2007 »

max50 писал(а):Для начала в самый раз!


Ну да, чтоб он потом эту конструкцию куда-нибудь вкорячил... :)) В железе попробовал сейчас, 100 мс очень мало, ловить нужное состояние жутко неудобно. По мне, если уж без всяких debounce и попроще, то так:

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

Do

While Button = 1 ' пока кнопка не нажата, сидим тут
Wend

Waitms 50 ' иначе, антидребезг

Toggle Led ' изменение состояния на противоположное

While Button = 0 ' ожидание отпускания
Wend

Waitms 50 ' еще раз

Loop ' пошагали по кругу

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

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

Сообщение kip96 »

edm2007 писал(а):Как вариант - так:

при использовании
Debounce Button , 0 , Smena , Sub
код

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

While Button = 0                                          ' цикл ожидания отпускания кнопки 
Wend

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

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

Сообщение kip96 »

edm2007 писал(а):По мне, если уж без всяких debounce и попроще, то так:

чтобы работал антидребезг, нужно либо:
после

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

 Waitms 50 ' иначе, антидребезг

проверить нажата ли кнопка или нет,
либо оператор Waitms 50 вставить в цикл

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

While Button = 1 ' пока кнопка не нажата, сидим тут
Wend

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

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

Сообщение edm2007 »

kip96 писал(а):
edm2007 писал(а):Как вариант - так:

при использовании
Debounce Button , 0 , Smena , Sub
код

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

While Button = 0                                          ' цикл ожидания отпускания кнопки 
Wend

лишний


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

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

Сообщение edm2007 »

kip96 писал(а):
edm2007 писал(а):По мне, если уж без всяких debounce и попроще, то так:

чтобы работал антидребезг, нужно либо:
после

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

 Waitms 50 ' иначе, антидребезг

проверить нажата ли кнопка или нет,
либо оператор Waitms 50 вставить в цикл

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

While Button = 1 ' пока кнопка не нажата, сидим тут
Wend

Последнее не есть гуд :))


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

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

Сообщение kip96 »

Я особено не придумал ни чего, как

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

If Kn = 0 Then                                   '                    '
           Waitms 600
           Debounce Kn , 0 , Aa                                                               
           End If

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

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

Сообщение edm2007 »

kip96 писал(а):Я особено не придумал ни чего, как

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

If Kn = 0 Then                                   '                    '
           Waitms 600
           Debounce Kn , 0 , Aa                                                               
           End If

работает пока нормально
600 мс выбрал экспериментально-
и при кратковремменном нажатии задержку вроде незаметно , и достаточно долго удерживать надо.
для 5 секунд скорее всего ТАЙМЕР нужен (хотя к чему 5 сек)
К примеру нажали кнопку, запустили таймер и каждые (к примеру) 500мс проверяем состояние кнопки- если нажата-проверяем дальше и увеличиваем переменную. Если не нажата- то переходим на метку. Если переменная превысила значение 10( 10 раз проверили условие нажатия кнопки и она была нажата) то переходим на другую метку.
Примерно так я делал, когда надо было проверить "не нажатие" кнопки. Т.Е. если кнопка долго не нажата то переходим в основной цикл.


А здорово так-то с debounce, обязательно попробую такой ход. А 5 сек к тому, что надо попасть в меню, которое в принципе использоваться будет только для начальной настройки. Ну может еще когда, но очень редко. И лишние попадания туда совсем не нужны. Хотя, я так подумал... Зачем в программу забивать вещами, которые так редко используются... Проще наверное проверку нажатия при подаче питания сделать и все. Кнопку нажал, питание подал, и попал в это самое меню. Там в eeprom занес изменяемую переменную и всех делов. Как-то так... И проверка НЕ нажатия тут как раз кстати. Спасибо. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
leseni
Родился
Сообщения: 5
Зарегистрирован: Пн мар 01, 2010 15:18:32

Re:

Сообщение leseni »

rotor писал(а):Добрый день или вечер!
Решил попробовать BASCOM AVR, столкнуля с одной проблемой.
при чтении датчика температуры ds18b20 при указанном параметре
$crystal = 4000000
прчитанные 9-ть байт не соответствут реальным, каждый байт больше в два раза, а при параметре $crystal = 1000000 или $crystal = 2000000 или $crystal = 3000000 все нормально.
Хотя команда
Reg_no(1) = 1wsearchfirst()
работает нормально при любых параметрах $crystal.
Испльзую BASCOM v1.11.9.0
Вопрос: ктонибудь сталкивался с такой проблемой если да, как с этим бороться?
Всем спасибо.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: Re:

Сообщение edm2007 »

leseni писал(а):
rotor писал(а):Добрый день или вечер!
Решил попробовать BASCOM AVR, столкнуля с одной проблемой.
при чтении датчика температуры ds18b20 при указанном параметре
$crystal = 4000000
прчитанные 9-ть байт не соответствут реальным, каждый байт больше в два раза, а при параметре $crystal = 1000000 или $crystal = 2000000 или $crystal = 3000000 все нормально.
Хотя команда
Reg_no(1) = 1wsearchfirst()
работает нормально при любых параметрах $crystal.
Испльзую BASCOM v1.11.9.0
Вопрос: ктонибудь сталкивался с такой проблемой если да, как с этим бороться?
Всем спасибо.


День добрый. Народ совсем обленился, уже просто копирует сообщения других пользователей, и все. :)) Подробнее-то хоть напишите, какой МК, в железе это или в протеусе, свой исходник... В протеусе есть такое, там датчик немного настроить надо. А в железе все замечательно читается...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Ну, здесь собака зарыта, похоже, в Протосе! Причем что интересно, что в разных версиях Протоса-разные глюки на эту тему. 8) Я уже с такой фигней давно смирился. В реальном железе все равно все работает, а если не работает, то USB-AVR910-Prottoss вам в помощь. Да собственно, от Протеуса и не требуется точного отображения всей вашей программы. Достаточно просто оценить работоспособность, а уж отладка будет в реальном железе... :sleep:

Ну и на правах рекламы:
самая лучшая обучалка по Bascom-AVR от многоуважаемого товарища WildCat-a находится здесь:
http://www.decada.org.ru/project/lessons/bascom_avr/ и да простят меня админы и модеры :beer:
Цапу крутить надо!!! Ку или не ку?
spy-tuning
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пн окт 18, 2010 17:33:15
Контактная информация:

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

Сообщение spy-tuning »

Igor_67 писал(а):Я уже указал тебе на ошибку, но ты все равно упорно ее совершаешь.
Sub Hilighton
T2 = 0
While T2 < 10
Incr T1
If Pind.3 = 0 Then : Return
End If
Waitms 100
Wend
Set Portb.3
End Sub
Опять после THEN идет двоеточие, то есть получается условие без следствия. И чего ты хочешь тогда добиться?
Я тебе немного исходник подрихтовал, он во вложении. Пробуй. Честно признаюсь, у себя не проверял - некогда, извини! :oops:
Да, потом заметил еще один момент. В п/п Highlighton сначала T2=0? , а потом цикл, пока Т2<10...
Ну дык оно(Т2) всегда будет меньше 10, при обращении к этой п/п. Короче думай-переделывай...

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

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

Сообщение kip96 »

Повторюсь.
1 Проще воспользоваться GOSUB-RETURN
при этом ничего декларировать не нужно
2 Воспользуйся симулятором в компиляторе. Очень удобно. Пошагово поймёшь куда программа уходит , потом легче ошибку искать.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Master_of_Puppets
Родился
Сообщения: 3
Зарегистрирован: Чт сен 03, 2009 08:48:24

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

Сообщение Master_of_Puppets »

Приветствую.
Ребята, как за определенное, довольно небольшое время посчитать количество импульсов с помощью Bascom'а.
Время - в районе 0,5 секунды. На ногу МК приходят импульсы. Как узнать сколько?
Думаю импульсы считать с помощью прерываний. Т.е. пришел импульс - в обработчике прерываний переменную для количества импульсов увеличиваю на 1. Но вот как ограничить время подсчета?
Заранее спасибо.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

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

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

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

Сообщение kip96 »

Вот сдесь до конца прочитаем
и плюс хелп добавить и всё просто окажется
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Master_of_Puppets
Родился
Сообщения: 3
Зарегистрирован: Чт сен 03, 2009 08:48:24

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

Сообщение Master_of_Puppets »

Я правильно понял, что время, в течение которого считаются импульсы задается этой строкой?
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Master_of_Puppets писал(а):Я правильно понял, что время, в течение которого считаются импульсы задается этой строкой?
Config Timer1 = Counter , Edge = Falling , Prescale = 1


Этой строкой конфигурируется таймер. Ну в обучалке же есть пример подсчета:

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

Do
  Counter1 = 0
  Start Counter1
  Waitms 25
  Stop Counter1
  Cls
  Lcd "Counter1: " ; Counter1
  Waitms 100
Loop
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ответить

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