Страница 148 из 304

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

Добавлено: Пн окт 08, 2012 14:20:59
осторожно! леоныч!!!
Да я давненько роюсь в примере. Переделал как хотел. Но когда выполняется подпрограмма нельзя отслеживать кнопку. Это не очень хорошо, но что нибудь попробую придумать. Может в подпрограмму дописать команду чтоб отслеживать светодиодом нажата она или нет? Эх... Опыту мало :(

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

Добавлено: Пн окт 08, 2012 14:55:56
edm2007
Повесьте кнопку на внешнее прерывание. Делов-то. :)

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

Добавлено: Пн окт 08, 2012 14:57:57
осторожно! леоныч!!!
Но тогда индикация будет сбрасываться :oops: Ведь я применил в программе ваш пример :)

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

Добавлено: Пн окт 08, 2012 15:09:41
edm2007
Это почему же? Прерывание таймера - это одно. А прерывание кнопки - совершенно другое. И вместе они запросто уживутся. :)

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

Добавлено: Пн окт 08, 2012 15:23:58
осторожно! леоныч!!!
Сейчас попробую :)))

Пока не вьехал в стройку как это сделать :oops:
Почитаю еще литературы немного :facepalm:

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

Добавлено: Пн окт 08, 2012 15:50:59
осторожно! леоныч!!!
Мозги уже кипят :))) :))) :)))

По нажатию кнопки происходит переход сразу в подпрограмму. Это понятно из вашего примера.
Далее работает подпрограмма. Весь основной цикл опрашивается кнопка и все. Что то дописывать (даже простейшее ) туда бесполезно , программа отрабатывает сразу переход в подпрограмму. Что то я совсем отупел уже :))) :))) :))) Не могу уже придумать ничего :facepalm:

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

Добавлено: Пн окт 08, 2012 16:19:02
edm2007
Нормальное явление, не переживайте. :)) Давайте начнем с того, что именно вас не устраивает в имеющемся варианте?

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

Добавлено: Пн окт 08, 2012 16:59:33
осторожно! леоныч!!!
Устраивает всё :) Но проблема в том что помимо переключения светодиодов и отключения через 3 сек надо еще индицировать нажатие кнопки в реальном времени отдельным светодиодом. Но в основном цикле у меня это сделать как я понимаю уже не получится. В остальном все получается очень даже хорошо :))

Да и как тут не переживать? Столько усилий прикладываешь чтоб создать элементарное, даже стыдно :oops: :oops: :oops:

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

Добавлено: Пн окт 08, 2012 20:34:03
Gordon Shumway
Доброго времени суток !

Тоже решил впрячься в решение задачи.

осторожно! леоныч!!!, а что конкретно сейчас не устраивает ? edm2007 предложил рабочее решение, только что попробовал.

edm2007, виртуозно написано ! :) Я пока так не умею...

Можно прокомментировать поподробнее ?

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

Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1    ' отсчет 3-х секунд
Ocr1a = &HB71B
On Oc1a 3sec

Enable Interrupts                                           ' разрешаем прерывание
Enable Oc1a
Я не понял, как тут отсчитывается 3 секунды ?

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

Добавлено: Пн окт 08, 2012 20:51:12
Секретный кот
Gordon Shumway писал(а):

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

Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1    ' отсчет 3-х секунд
Ocr1a = &HB71B
On Oc1a 3sec
Я не понял, как тут отсчитывается 3 секунды ?
Таймер 1 тактируется сигналом с частотой F0/256=15625 Гц. Чтобы получить задержку 3 с, нам необходимо пропустить 3*15625=46875 периодов этого сигнала. Что в шестнадцатеричном выражении равно &hB71B. Это значение и записывается в регистр сравнения таймера, по достижению которого сработает прерывание.

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

Добавлено: Вт окт 09, 2012 04:36:54
осторожно! леоныч!!!
осторожно! леоныч!!!, а что конкретно сейчас не устраивает ? edm2007 предложил рабочее решение, только что попробовал.

edm2007, виртуозно написано ! :) Я пока так не умею...

Можно прокомментировать поподробнее ?


Да все меня устраивает. Код замечательный, не спорю. Я этот пример использовал в своей программе для мк. Дополнил еще очень много чем. Как я уже писал, я не программист, это моя вторая работа.

Просто я не мог вчера придумать как в ходе работы предложенного кода отслеживать нажатие кнопки и индицировать его отдельным светодиодом в реальном времени. В остальном все отлично.

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

Добавлено: Вт окт 09, 2012 06:13:54
edm2007
Gordon Shumway писал(а):Я не понял, как тут отсчитывается 3 секунды ?
Я же выше расписывал подробно. :)

Секретный кот, спасибо. :beer:

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

Добавлено: Вт окт 09, 2012 08:02:12
осторожно! леоныч!!!
Вот зараза. Не получается. Хоть еще один порт задействуй. Глупо как то......

Нашел довольно не плохой список команд с описанием http://www.cqham.ru/bascom.htm
Может как и мне кому нибудь пригодиться.

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

Добавлено: Вт окт 09, 2012 08:41:44
Gordon Shumway
осторожно! леоныч!!! писал(а):Вот зараза. Не получается. Хоть еще один порт задействуй. Глупо как то......
Вы про индикацию нажатий кнопок ? В каком виде она вам нужна - отдельным светодиодом, или как-то существующие светодиоды должны отреагировать помимо их основной работы ?

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

Добавлено: Вт окт 09, 2012 08:46:00
edm2007
осторожно! леоныч!!! писал(а):Вот зараза. Не получается.
Вы нормально скажите, что нужно-то? Сформулируйте задание. А то
осторожно! леоныч!!! писал(а):Дополнил еще очень много чем.
А чем именно - непонято. О нажатии кнопки должен сигнализировать светодиод? И как? Пока нажата кнопка, или что?

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

Добавлено: Вт окт 09, 2012 09:40:25
осторожно! леоныч!!!
Поясню проще) Считаем что ваш пример без изменений, надо просто индицировать нажатие кнопки. Кнопка нажата - отдельный светодиод горит, отпущена - не горит. При это функция счета 3 светодиодов должна оставаться. Я пробовал перенести подпрограмму в основной цикл, думал так получится. Но так и не разобрался :oops: Компилятор обматерил меня как мог :facepalm: :)

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

Добавлено: Вт окт 09, 2012 10:24:24
amv2000
осторожно! леоныч!!! писал(а): Считаем что ваш пример без изменений, надо просто индицировать нажатие кнопки. Кнопка нажата - отдельный светодиод горит, отпущена - не горит.
А если включить в обработку прерывания такой код

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

3leds:                                                      ' подпрограмма обработки нажатия кнопки

if Button = 0 then 
Set Led_4  ' здесь ваш отдельный светодиод, не забыть в начале присвоить его к порту например: Led_4 Alias Portb.4
Else
Reset Led_4

Timer1 = 0                                                  ' обнуляем таймер отсчета 3-х секунд

Incr Count
If Count > 3 Then Count = 3

If Count = 1 Then

   Set Red_led

Elseif Count = 2 Then

   Set Yellow_led

Elseif Count = 3 Then

   Set Green_led

End If

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

Добавлено: Вт окт 09, 2012 10:39:13
осторожно! леоныч!!!
Очень интересно amv2000 :) Сам бы точно не допёр :( Да еще второй день зуб болит,башка вообще почти не варит. Сейчас попробую :beer:

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

Добавлено: Вт окт 09, 2012 10:51:56
осторожно! леоныч!!!
label not found (endif0) Вот так снова меня обматерил компилятор :shock:

Даже после успешной компиляции с одной строкой If Button = 0 Then Set Leda (просто зажечь светодиод) "leda" - так он прописан, он не загорается...

Только сейчас вспомнил что вроде вчера так пробовал только без присвоения имен, просто порт прописывал.

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

Добавлено: Вт окт 09, 2012 11:06:22
amv2000
осторожно! леоныч!!! писал(а):label not found (endif0) Вот так снова меня обматерил компилятор
Ну да еще один End If внизу допишите

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

Elseif Count = 3 Then

   Set Green_led

End If
End if
или так

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

if Button = 0 then 
Set Led_4  ' здесь ваш отдельный светодиод, не забыть в начале присвоить его к порту например: Led_4 Alias Portb.4
Else
Reset Led_4
End if
А если поменять подключение светодиода, чтобы загорался когда на ножке 0, код еще меньше получается.

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

if Button = 0 then : Set Led_4 = Button : End if