BASCOM AVR в вопросах и ответах
-
us5caa
- Первый раз сказал Мяу!
- Сообщения: 38
- Зарегистрирован: Пт апр 04, 2008 08:48:57
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Подскажите, пожалуйста команду для работы с матричной клавиатурой (Getkbd()), что бы код кнопки выбирался не при нажатии, а при отпускании кнопки.... т.е. надо проверку на отпускание кнопки, как это сделать?
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Атмега8515, несколько последних попыток прошивать закончились крахом. Стер микросхему и прошил нормально, после чего заработал. Теперь включил в программе таймер для генерации ШИМ, прошил и мой МК больше не подавал признаков жизни. Конфигурацию фузов не менял, настроен на внешний кварц - 10 МГц.
какие могут быть соображения?
программатор покупной Авр910, другие МК прошивает на ура, так что проблема не в нем.
Чуть не забыл, программирую внутри схемы, на линиях к программатору ничего нет и плата чистая, никакого флюса и мусора.
какие могут быть соображения?
программатор покупной Авр910, другие МК прошивает на ура, так что проблема не в нем.
Чуть не забыл, программирую внутри схемы, на линиях к программатору ничего нет и плата чистая, никакого флюса и мусора.
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
us5caa писал(а):Подскажите, пожалуйста команду для работы с матричной клавиатурой (Getkbd()), что бы код кнопки выбирался не при нажатии, а при отпускании кнопки.... т.е. надо проверку на отпускание кнопки, как это сделать?
Раньше по теме описывали. При нажатии на кнопку отправить в подпрограмму, где проверять - не отпустили ли кнопку. И если отпустили, выполнить ... ну, что там надо.
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
Кто может, гляньте, почему в железе не работает код обработки длинного нажатия кнопки, хотя в Протеусе все работает как надо:
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
В архиве полный текст и протеус-проект
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
В архиве полный текст и протеус-проект
- Вложения
-
- POWER SUPLY.rar
- (28.26 КБ) 213 скачиваний
Re: BASCOM AVR в вопросах и ответах
посмотрите как в этой программе реализован переход в сервис, и попробуйте так же.
офф. кстати для прота есть энкодер
офф. кстати для прота есть энкодер
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
raf65 писал(а):посмотрите как в этой программе реализован переход в сервис, и попробуйте так же.
офф. кстати для прота есть энкодер
Так Я тоже пробовал.
Код: Выделить всё
Sub Knoblong()
If Pind.2 = 0 Then
Goto Startknoblong
End If
Goto Endknoblong
Startknoblong:
Nlock1 = 1
Asdf:
If Pind.2 = 0 Then
Nlock1 = Nlock1 + 1
Waitms 100
If Nlock1 = 20 Then
Portd.0 = 0
End If
Goto Asdf
End If
If Pind.0 = 0 Then
Locate 1 , 9
Lcd " PWR OFF"
Waitms 1000
End If
Endknoblong:
End SubМожет это связано с компилятором? Ну я не знаю, вдруг наименование метки слишком длинное, к примеру...
PS Чё-то не нашел энкодера
Re: BASCOM AVR в вопросах и ответах
я так понял, второе долгое нажатие должно включить блок, а он не включает? или что то другое
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
vanyap1 писал(а):Атмега8515, несколько последних попыток прошивать закончились крахом. Стер микросхему и прошил нормально, после чего заработал. Теперь включил в программе таймер для генерации ШИМ, прошил и мой МК больше не подавал признаков жизни. Конфигурацию фузов не менял, настроен на внешний кварц - 10 МГц.
Проблема решена. Как оказалось, при стирании - черт знает как установились новые фюзы, от и все дела.
Микросхема включилась на внешний тактирующий сигнал, а на схеме установлен кварц.
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
raf65 писал(а):я так понял, второе долгое нажатие должно включить блок, а он не включает? или что то другое
Оба варианта в Протеусе работают корректно. Когда прошивка залита в контроллер, то при длинном нажатии ничего не происходит вообще. Ни выключает, ни включает.
Последний раз редактировалось vitalkalm Вс дек 25, 2011 02:17:45, всего редактировалось 1 раз.
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
vanyap1 писал(а):vanyap1 писал(а):Атмега8515, несколько последних попыток прошивать закончились крахом. Стер микросхему и прошил нормально, после чего заработал. Теперь включил в программе таймер для генерации ШИМ, прошил и мой МК больше не подавал признаков жизни. Конфигурацию фузов не менял, настроен на внешний кварц - 10 МГц.
Проблема решена. Как оказалось, при стирании - черт знает как установились новые фюзы, от и все дела.
Микросхема включилась на внешний тактирующий сигнал, а на схеме установлен кварц.
Может не прошла идентификация чипа, а Вы при этом нажали "Program". Вообще я приучился от других програм при программировании сначала ститывать фузы, а затем зашивать программу(был горький опыт поначалу...).
Кстате, как-то попадался на подобное - чип запрограммировал от внешнего тактирования по неопытности. Но понял я это после того, как удалось его считать, но каким образом! Вместо установленного согласно схемы кварца на 16 Мгц, вставил на несколько сот килогерц. Проц завелся!
Re: BASCOM AVR в вопросах и ответах
vitalkalm писал(а):raf65 писал(а):я так понял, второе долгое нажатие должно включить блок, а он не включает? или что то другое
Оба варианта в Протеусе работают корректно. Когда прошивка залита в контроллер, то при длинном нажатии ничего не происходит вообще. Ни выключает, ни включает.
попробуй так
Код: Выделить всё
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-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
Так отключится порт до следующего цикла, но если отпусить кнопку, то порт снова включится?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Мда... Что же Вы имели ввиду под "порт отключится" и "порт снова включится"?
А в предыдущем примере вообще ерунда. Нужно по факту нажатия сидеть на жопе и щупать вывод кнопки. И до тех пор пока кнопка удерживается, увеличивать значение счетчика. И уже от значения этого счетчика плясать. А в том примере вообще получится подсчет нажатий и не более того...
Посмотрите в сторону While .. Wend, на этой конструкции можно легко сделать проверку на удержание кнопки.
Посмотрите в сторону While .. Wend, на этой конструкции можно легко сделать проверку на удержание кнопки.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):Мда... Что же Вы имели ввиду под "порт отключится" и "порт снова включится"?А в предыдущем примере вообще ерунда. Нужно по факту нажатия сидеть на жопе и щупать вывод кнопки. И до тех пор пока кнопка удерживается, увеличивать значение счетчика. И уже от значения этого счетчика плясать. А в том примере вообще получится подсчет нажатий и не более того...
Посмотрите в сторону While .. Wend, на этой конструкции можно легко сделать проверку на удержание кнопки.
там кусок кода программы работающей в непрерывном цикле, и пока нажата кнопка увеличивается значение переменной Nlock1
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
raf65 писал(а):там кусок кода программы работающей в непрерывном цикле
Лично я вижу не кусок кода а законченую подпрограмму Knoblong, о чем явно говорит Sub. Покажите мне вызов этой подпрограммы. Проверка If .. Then позволяет проверить условие только в один проход. Это же не While .. Wend, которое проверяет "до тех пор пока..."
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
to edm2007
vitalkalm писал(а):Кто может, гляньте, почему в железе не работает код обработки длинного нажатия кнопки, хотя в Протеусе все работает как надо:
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
В архиве полный текст и протеус-проект
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
raf65, нет, я не о том немного. Это Вы советуете:
Вот я и спрашиваю, как сделать так, чтобы нажатие и удержание кнопки постоянно вызывало подпрограмму Knoblong. Посмотрите на предложеный Вами же код.
Ну допустим эта подпрограмма была вызвана чем-нибудь типа 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)? Я и спрашиваю...
raf65 писал(а):попробуй так
Вот я и спрашиваю, как сделать так, чтобы нажатие и удержание кнопки постоянно вызывало подпрограмму 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, если мы туда попали то значит кнопка явно нажата была
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
вот так она и вызывается
Код: Выделить всё
.....
Do
Call Knoblong
Call U_i_metr
Call Diapason 'вычисление номера реле
Call Akseler
'подпрограмма коэф ускорения енкод
Call Knob
Call U_i_set
Call Isobra ' вывод изображения
Loop
End
....
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Появилось 10 свободных минут, появился на свет следующий код под эту задачу:
Сидим себе в основном цикле, болтаем ногой и щупаем кнопку. Как только зафиксировали нажатие - уходим на обработку. А там уже попадаем в ловушку цикла While - Wend. И если кнопка удерживается то тикаем счетчиком. Натикали 1 секунду (50 мс * 20 = 1000 мс = 1 с), включаем зеленый светодиод. Ну а если уж отпустили раньше, то включаем красный.
Код конечно может быть оптимизирован еще, но и в этом состоянии работоспособен вполне. И в протеусе и в железе. В протеусе проект привязываю, а в железе проверил лично. Видео снять?
Удержание кнопки
Код: Выделить всё
$regfile = "attiny2313.dat" ' тип МК
$crystal = 4000000 ' тактовая частота
'----------
Config Portd.2 = Input ' кнопка
Config Porta.0 = Output ' красный светодиод
Config Porta.1 = Output ' зеленый светодиод
Config Debounce = 50 ' антидребезг
'----------
Dim Count As Byte ' счетчик удержания кнопки
Reset Porta.0 ' гасим оба светодиода
Reset Porta.1 ' (начальное состояние)
'----------
Do ' основной цикл
Debounce Pind.2 , 0 , Button , Sub ' опрос кнопки
Loop
'----------
Button: ' обработка нажатия кнопки
While Pind.2 = 0 ' до тех пор пока кнопка удерживается
Incr Count ' увеличиваем счетчик
Waitms 50 ' задержка
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 раза.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
все хорошо, но в программе , в другой подпрограмме, эта кнопка выполняет и другую функцию