Подскажите, пожалуйста команду для работы с матричной клавиатурой (Getkbd()), что бы код кнопки выбирался не при нажатии, а при отпускании кнопки.... т.е. надо проверку на отпускание кнопки, как это сделать?
Атмега8515, несколько последних попыток прошивать закончились крахом. Стер микросхему и прошил нормально, после чего заработал. Теперь включил в программе таймер для генерации ШИМ, прошил и мой МК больше не подавал признаков жизни. Конфигурацию фузов не менял, настроен на внешний кварц - 10 МГц.
какие могут быть соображения?
программатор покупной Авр910, другие МК прошивает на ура, так что проблема не в нем. Чуть не забыл, программирую внутри схемы, на линиях к программатору ничего нет и плата чистая, никакого флюса и мусора.
Подскажите, пожалуйста команду для работы с матричной клавиатурой (Getkbd()), что бы код кнопки выбирался не при нажатии, а при отпускании кнопки.... т.е. надо проверку на отпускание кнопки, как это сделать?
Раньше по теме описывали. При нажатии на кнопку отправить в подпрограмму, где проверять - не отпустили ли кнопку. И если отпустили, выполнить ... ну, что там надо.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 23, 2011 19:34:35
Первый раз сказал Мяу!
Зарегистрирован: Пт май 23, 2008 03:48:36 Сообщений: 36 Откуда: Украина
Рейтинг сообщения:0
Кто может, гляньте, почему в железе не работает код обработки длинного нажатия кнопки, хотя в Протеусе все работает как надо: If Pind.2 = 0 Then Nlock1 = Nlock1 + 1 Waitms 100 If Nlock1 = 20 Then If Pind.0 = 1 Then Portd.0 = 0 Else Portd.0 = 1 End If Nlock1 = 0 End If
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Атмега8515, несколько последних попыток прошивать закончились крахом. Стер микросхему и прошил нормально, после чего заработал. Теперь включил в программе таймер для генерации ШИМ, прошил и мой МК больше не подавал признаков жизни. Конфигурацию фузов не менял, настроен на внешний кварц - 10 МГц.
Проблема решена. Как оказалось, при стирании - черт знает как установились новые фюзы, от и все дела. Микросхема включилась на внешний тактирующий сигнал, а на схеме установлен кварц.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс дек 25, 2011 01:56:28
Первый раз сказал Мяу!
Зарегистрирован: Пт май 23, 2008 03:48:36 Сообщений: 36 Откуда: Украина
Рейтинг сообщения:0
raf65 писал(а):
я так понял, второе долгое нажатие должно включить блок, а он не включает? или что то другое
Оба варианта в Протеусе работают корректно. Когда прошивка залита в контроллер, то при длинном нажатии ничего не происходит вообще. Ни выключает, ни включает.
Последний раз редактировалось vitalkalm Вс дек 25, 2011 02:17:45, всего редактировалось 1 раз.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс дек 25, 2011 02:10:09
Первый раз сказал Мяу!
Зарегистрирован: Пт май 23, 2008 03:48:36 Сообщений: 36 Откуда: Украина
Рейтинг сообщения:0
vanyap1 писал(а):
vanyap1 писал(а):
Атмега8515, несколько последних попыток прошивать закончились крахом. Стер микросхему и прошил нормально, после чего заработал. Теперь включил в программе таймер для генерации ШИМ, прошил и мой МК больше не подавал признаков жизни. Конфигурацию фузов не менял, настроен на внешний кварц - 10 МГц.
Проблема решена. Как оказалось, при стирании - черт знает как установились новые фюзы, от и все дела. Микросхема включилась на внешний тактирующий сигнал, а на схеме установлен кварц.
Может не прошла идентификация чипа, а Вы при этом нажали "Program". Вообще я приучился от других програм при программировании сначала ститывать фузы, а затем зашивать программу(был горький опыт поначалу...). Кстате, как-то попадался на подобное - чип запрограммировал от внешнего тактирования по неопытности. Но понял я это после того, как удалось его считать, но каким образом! Вместо установленного согласно схемы кварца на 16 Мгц, вставил на несколько сот килогерц. Проц завелся!
я так понял, второе долгое нажатие должно включить блок, а он не включает? или что то другое
Оба варианта в Протеусе работают корректно. Когда прошивка залита в контроллер, то при длинном нажатии ничего не происходит вообще. Ни выключает, ни включает.
попробуй так
Код:
Sub Knoblong() If Pind.2 = 0 Then Nlock1 = Nlock1 + 1 Waitms 100 If Nlock1 <= 10 Then set Portd.0 Else reset Portd.0 End If end IF If Nlock1 = 20 Then
Мда... Что же Вы имели ввиду под "порт отключится" и "порт снова включится"? А в предыдущем примере вообще ерунда. Нужно по факту нажатия сидеть на жопе и щупать вывод кнопки. И до тех пор пока кнопка удерживается, увеличивать значение счетчика. И уже от значения этого счетчика плясать. А в том примере вообще получится подсчет нажатий и не более того...
Посмотрите в сторону While .. Wend, на этой конструкции можно легко сделать проверку на удержание кнопки.
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Мда... Что же Вы имели ввиду под "порт отключится" и "порт снова включится"? А в предыдущем примере вообще ерунда. Нужно по факту нажатия сидеть на жопе и щупать вывод кнопки. И до тех пор пока кнопка удерживается, увеличивать значение счетчика. И уже от значения этого счетчика плясать. А в том примере вообще получится подсчет нажатий и не более того...
Посмотрите в сторону While .. Wend, на этой конструкции можно легко сделать проверку на удержание кнопки.
там кусок кода программы работающей в непрерывном цикле, и пока нажата кнопка увеличивается значение переменной Nlock1
там кусок кода программы работающей в непрерывном цикле
Лично я вижу не кусок кода а законченую подпрограмму Knoblong, о чем явно говорит Sub. Покажите мне вызов этой подпрограммы. Проверка If .. Then позволяет проверить условие только в один проход. Это же не While .. Wend, которое проверяет "до тех пор пока..."
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Кто может, гляньте, почему в железе не работает код обработки длинного нажатия кнопки, хотя в Протеусе все работает как надо: If Pind.2 = 0 Then Nlock1 = Nlock1 + 1 Waitms 100 If Nlock1 = 20 Then If Pind.0 = 1 Then Portd.0 = 0 Else Portd.0 = 1 End If Nlock1 = 0 End If
Вот я и спрашиваю, как сделать так, чтобы нажатие и удержание кнопки постоянно вызывало подпрограмму Knoblong. Посмотрите на предложеный Вами же код.
Код:
Sub Knoblong() If Pind.2 = 0 Then Nlock1 = Nlock1 + 1 Waitms 100 If Nlock1 <= 10 Then set Portd.0 Else reset Portd.0 End If end IF If Nlock1 = 20 Then
Nlock1 = 0 end IF End Sub
Ну допустим эта подпрограмма была вызвана чем-нибудь типа If Pind.2 = 0 Then Gosub Knoblong. Ну или Call, это не так и важно. Главное, что мы зафиксировали нажатие и ушли на подпрограмму. Где смотрим, ага, кнопка нажата? (спрашивается, нахрена If Pind.2 = 0 Then, если мы туда попали то значит кнопка явно нажата была ). Ладно, нажата. Увеличиваем значение счетчика (Nlock1 = Nlock1 + 1). Был он изначально равен 0, стал равен 1, проверили, да, меньше 10, выдали 1 на PORTD.0. И? Что дальше-то? Куда мы уходим по End Sub (Return)? Я и спрашиваю...
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
If Count => 20 Then ' если кнопка удерживается 1 секунду Reset Porta.0 ' гасим красный светодиод Set Porta.1 ' включаем зеленый Count = 0 ' обнуляем счетчик Goto Ext ' уходим End If ' конец условия
Wend
' если же кнопка удерживалась менее секунды
Reset Porta.1 ' гасим зеленый светодиод Set Porta.0 ' включаем красный Count = 0 ' обнуляем счетчик
Ext: ' уходим
Return ' возврат в основной цикл
Сидим себе в основном цикле, болтаем ногой и щупаем кнопку. Как только зафиксировали нажатие - уходим на обработку. А там уже попадаем в ловушку цикла While - Wend. И если кнопка удерживается то тикаем счетчиком. Натикали 1 секунду (50 мс * 20 = 1000 мс = 1 с), включаем зеленый светодиод. Ну а если уж отпустили раньше, то включаем красный.
Код конечно может быть оптимизирован еще, но и в этом состоянии работоспособен вполне. И в протеусе и в железе. В протеусе проект привязываю, а в железе проверил лично. Видео снять?
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Последний раз редактировалось edm2007 Ср дек 28, 2011 19:02:25, всего редактировалось 2 раз(а).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения