Страница 45 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб ноя 06, 2010 22:51:54
max50
edm2007 писал(а):max50, пока кнопка нажата, светодиод будет моргать туда-сюда. Это не совсем вписывается в поставленую задачу. Тогда хоть ожидание отпускания кнопки надо добавить.
Была задача:
vladik-bob писал(а):чтоб нажал на кнопочку светодиодик светится второй раз нажал светодиодик не светится?
Поставь задержку больше(я ставлю 100) и все прекрасно будет работать.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб ноя 06, 2010 23:00:49
edm2007
max50, я про что говорю, пока нажата кнопка, состояние светодиода будет меняться на противоположное каждые 100 мс. Работать-то оно будет, но это же ерунда полнейшая. Чуть задержался, и он снова сменил состояние... Не серьезно...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб ноя 06, 2010 23:14:22
max50
edm2007 писал(а):max50, я про что говорю, пока нажата кнопка, состояние светодиода будет меняться на противоположное каждые 100 мс. Работать-то оно будет, но это же ерунда полнейшая. Чуть задержался, и он снова сменил состояние... Не серьезно...
Для начала в самый раз!
Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб ноя 06, 2010 23:21:48
edm2007
max50 писал(а):Для начала в самый раз!
Ну да, чтоб он потом эту конструкцию куда-нибудь вкорячил...

В железе попробовал сейчас, 100 мс очень мало, ловить нужное состояние жутко неудобно. По мне, если уж без всяких debounce и попроще, то так:
Код: Выделить всё
Do
While Button = 1 ' пока кнопка не нажата, сидим тут
Wend
Waitms 50 ' иначе, антидребезг
Toggle Led ' изменение состояния на противоположное
While Button = 0 ' ожидание отпускания
Wend
Waitms 50 ' еще раз
Loop ' пошагали по кругу
End 'end program
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 09, 2010 10:12:01
kip96
edm2007 писал(а):Как вариант - так:
при использовании
Debounce Button , 0 , Smena , Sub
код
Код: Выделить всё
While Button = 0 ' цикл ожидания отпускания кнопки
Wend
лишний
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 09, 2010 10:20:08
kip96
edm2007 писал(а):По мне, если уж без всяких debounce и попроще, то так:
чтобы работал антидребезг, нужно либо:
после
проверить нажата ли кнопка или нет,
либо оператор Waitms 50 вставить в цикл
Код: Выделить всё
While Button = 1 ' пока кнопка не нажата, сидим тут
Wend
Последнее не есть гуд

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 09, 2010 10:54:17
edm2007
kip96 писал(а):edm2007 писал(а):Как вариант - так:
при использовании
Debounce Button , 0 , Smena , Sub
код
Код: Выделить всё
While Button = 0 ' цикл ожидания отпускания кнопки
Wend
лишний
Да я и написал что лишний.

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 09, 2010 10:59:52
edm2007
kip96 писал(а):edm2007 писал(а):По мне, если уж без всяких debounce и попроще, то так:
чтобы работал антидребезг, нужно либо:
после
проверить нажата ли кнопка или нет,
либо оператор Waitms 50 вставить в цикл
Код: Выделить всё
While Button = 1 ' пока кнопка не нажата, сидим тут
Wend
Последнее не есть гуд

Угу, полностью согласен.

И вообще весь этот изврат не имеет смысла. В баскоме замечательная работа с кнопками по debounce. Кстати, про кнопки, я вот что хотел спросить, а как реализовать проверку на то, что кнопка нажата и удерживается определенное время? Ну к примеру, кратковременное нажатие выполняет одну задачу, а нажатие и удержание в течение 5 секунд уводит программу совсем в другое место.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 09, 2010 13:42:15
kip96
Я особено не придумал ни чего, как
Код: Выделить всё
If Kn = 0 Then ' '
Waitms 600
Debounce Kn , 0 , Aa
End If
работает пока нормально
600 мс выбрал экспериментально-
и при кратковремменном нажатии задержку вроде незаметно , и достаточно долго удерживать надо.
для 5 секунд скорее всего ТАЙМЕР нужен (хотя к чему 5 сек)
К примеру нажали кнопку, запустили таймер и каждые (к примеру) 500мс проверяем состояние кнопки- если нажата-проверяем дальше и увеличиваем
переменную. Если не нажата- то переходим на метку. Если
переменная превысила значение 10( 10 раз проверили условие нажатия кнопки и она была нажата) то переходим на другую метку.
Примерно так я делал, когда надо было проверить "не нажатие" кнопки. Т.Е. если кнопка долго не нажата то переходим в основной цикл.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 09, 2010 15:09:30
edm2007
kip96 писал(а):Я особено не придумал ни чего, как
Код: Выделить всё
If Kn = 0 Then ' '
Waitms 600
Debounce Kn , 0 , Aa
End If
работает пока нормально
600 мс выбрал экспериментально-
и при кратковремменном нажатии задержку вроде незаметно , и достаточно долго удерживать надо.
для 5 секунд скорее всего ТАЙМЕР нужен (хотя к чему 5 сек)
К примеру нажали кнопку, запустили таймер и каждые (к примеру) 500мс проверяем состояние кнопки- если нажата-проверяем дальше и увеличиваем
переменную. Если не нажата- то переходим на метку. Если
переменная превысила значение 10( 10 раз проверили условие нажатия кнопки и она была нажата) то переходим на другую метку.
Примерно так я делал, когда надо было проверить "не нажатие" кнопки. Т.Е. если кнопка долго не нажата то переходим в основной цикл.
А здорово так-то с debounce, обязательно попробую такой ход. А 5 сек к тому, что надо попасть в меню, которое в принципе использоваться будет только для начальной настройки. Ну может еще когда, но очень редко. И лишние попадания туда совсем не нужны. Хотя, я так подумал... Зачем в программу забивать вещами, которые так редко используются... Проще наверное проверку нажатия при подаче питания сделать и все. Кнопку нажал, питание подал, и попал в это самое меню. Там в eeprom занес изменяемую переменную и всех делов. Как-то так... И проверка НЕ нажатия тут как раз кстати. Спасибо.

Re:
Добавлено: Ср ноя 10, 2010 23:42:34
leseni
rotor писал(а):Добрый день или вечер!
Решил попробовать BASCOM AVR, столкнуля с одной проблемой.
при чтении датчика температуры ds18b20 при указанном параметре
$crystal = 4000000
прчитанные 9-ть байт не соответствут реальным, каждый байт больше в два раза, а при параметре $crystal = 1000000 или $crystal = 2000000 или $crystal = 3000000 все нормально.
Хотя команда
Reg_no(1) = 1wsearchfirst()
работает нормально при любых параметрах $crystal.
Испльзую BASCOM v1.11.9.0
Вопрос: ктонибудь сталкивался с такой проблемой если да, как с этим бороться?
Всем спасибо.
Re: Re:
Добавлено: Чт ноя 11, 2010 10:24:01
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
Вопрос: ктонибудь сталкивался с такой проблемой если да, как с этим бороться?
Всем спасибо.
День добрый. Народ совсем обленился, уже просто копирует сообщения других пользователей, и все.

Подробнее-то хоть напишите, какой МК, в железе это или в протеусе, свой исходник... В протеусе есть такое, там датчик немного настроить надо. А в железе все замечательно читается...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт ноя 16, 2010 20:49:41
Igor_67
Ну, здесь собака зарыта, похоже, в Протосе! Причем что интересно, что в разных версиях Протоса-разные глюки на эту тему.

Я уже с такой фигней давно смирился. В реальном железе все равно все работает, а если не работает, то USB-AVR910-Prottoss вам в помощь. Да собственно, от Протеуса и не требуется точного отображения всей вашей программы. Достаточно просто оценить работоспособность, а уж отладка будет в реальном железе...
Ну и на правах рекламы:
самая лучшая обучалка по Bascom-AVR от многоуважаемого товарища WildCat-a находится здесь:
http://www.decada.org.ru/project/lessons/bascom_avr/ и да простят меня админы и модеры

Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 14:00:28
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 идет двоеточие, то есть получается условие без следствия. И чего ты хочешь тогда добиться?
Я тебе немного исходник подрихтовал, он во вложении. Пробуй. Честно признаюсь, у себя не проверял - некогда, извини!

Да, потом заметил еще один момент. В п/п Highlighton сначала T2=0? , а потом цикл, пока Т2<10...
Ну дык оно(Т2) всегда будет меньше 10, при обращении к этой п/п. Короче думай-переделывай...
Я конечно извиняюсь, но на реальном железе не работает. С исправлениями по Т2. Не может быть косяка с компилятором у меня? Использую версию 1.11.9.5?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 14:17:57
kip96
Повторюсь.
1 Проще воспользоваться GOSUB-RETURN
при этом ничего декларировать не нужно
2 Воспользуйся симулятором в компиляторе. Очень удобно. Пошагово поймёшь куда программа уходит , потом легче ошибку искать.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 14:26:55
Master_of_Puppets
Приветствую.
Ребята, как за определенное, довольно небольшое время посчитать количество импульсов с помощью Bascom'а.
Время - в районе 0,5 секунды. На ногу МК приходят импульсы. Как узнать сколько?
Думаю импульсы считать с помощью прерываний. Т.е. пришел импульс - в обработчике прерываний переменную для количества импульсов увеличиваю на 1. Но вот как ограничить время подсчета?
Заранее спасибо.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 15:32:36
Мурик
Master_of_Puppets писал(а):Думаю импульсы считать с помощью прерываний. Т.е. пришел импульс - в обработчике прерываний переменную для количества импульсов увеличиваю на 1
Это слишком ресурсозатратно!
Нужно считать с помошью таймера и по переполнению последнего, уходить в прерывание.
Промежуток времени можно отсчитывать другим таймером, тактируемым от задающего генератора МК.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 15:56:46
kip96
Вот сдесь до конца прочитаем
и плюс хелп добавить и всё просто окажется
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 17:21:04
Master_of_Puppets
Я правильно понял, что время, в течение которого считаются импульсы задается этой строкой?
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср ноя 17, 2010 20:36:42
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