BASCOM AVR в вопросах и ответах
Доброго всем времени суток!
Есть небольшая заморока с директивой DEBOUNCE. Можно ли по этой директиве отсылать программу не по GOTO, а по адресу подпрограммы, т.е. GOSUB? нужно ли для этого прописать в начале DECLARE SUB? И ещё вопрос: можно ли DEBOUNCE вставлять в программу обработки прерывания, например, от таймера? Эффективен ли такой опрос кнопок?
Есть небольшая заморока с директивой DEBOUNCE. Можно ли по этой директиве отсылать программу не по GOTO, а по адресу подпрограммы, т.е. GOSUB? нужно ли для этого прописать в начале DECLARE SUB? И ещё вопрос: можно ли DEBOUNCE вставлять в программу обработки прерывания, например, от таймера? Эффективен ли такой опрос кнопок?
В примерах можно увидеть такие строки что они значат?
Первые две это похоже что за стек отвечают, но ведь стек один, и зачем две строки?
Нижняя вообще непонятно для чего...
Из справки что-то не совсем понятно. Пишется за аппаратный и программный стек. Но насколько мне изветсно, стек один и находится в ОЗУ.
А за что отвечает $framesize вообще непонятно.
Код: Выделить всё
$hwstack = 32
$swstack = 10
$framesize = 40Первые две это похоже что за стек отвечают, но ведь стек один, и зачем две строки?
Нижняя вообще непонятно для чего...
Из справки что-то не совсем понятно. Пишется за аппаратный и программный стек. Но насколько мне изветсно, стек один и находится в ОЗУ.
А за что отвечает $framesize вообще непонятно.
Igor_67
По поводу DEBOUNCE вопрос не понят, это время на дребезг контактов
например кнопки подключённой к пину ( не забудь поттяжку ).
GOSUB и GOTO операторы условного и безусловного перехода.
А DECLARE SUB декларирование функции к GOSUB и GOTO никаким боком не относятся.
PB_EXPERT
Это действительно стеки и размер программы лично оно нужно только для лучшей работы Bascom"a
Я такие строки в программу не ввожу и проблем нет.
По поводу DEBOUNCE вопрос не понят, это время на дребезг контактов
например кнопки подключённой к пину ( не забудь поттяжку ).
GOSUB и GOTO операторы условного и безусловного перехода.
А DECLARE SUB декларирование функции к GOSUB и GOTO никаким боком не относятся.
PB_EXPERT
$hwstack = 32
$swstack = 10
$framesize = 40
Это действительно стеки и размер программы лично оно нужно только для лучшей работы Bascom"a
Я такие строки в программу не ввожу и проблем нет.
- Shuriks
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Вт дек 30, 2008 20:51:09
- Откуда: Россия, г. Брянск
- Контактная информация:
Я такие строки в программу не ввожу и проблем нет.
to Деня : Не скажи ... Эти строки описывают стек для работы как самой программы ($swstack) , так и стек для работы "железа" МК (UART и т.д. директива $hwstack) Один раз при работе с UART пришлось повозиться подбирая вручную эти значения, и только после этого он начал работать без глюков , замечу однако , что в программе было прерывание (постоянно) по таймеру .. И в тоже время данные передавались (и принимались) по UART. Вот для таких вещей собственно это и предназначенно
Кстати , в одном примере который идет в комплекте с программой примерно тоже самое и было написанно ... Поищу - выложу
- Gryphon
- Нашел транзистор. Понюхал.
- Сообщения: 152
- Зарегистрирован: Пн ноя 03, 2008 12:08:42
- Откуда: Владивосток
- Контактная информация:
Доброго времени, форумчане! Кто знает, как на тиньки2313 в BASCOM-AVR на один из выходов вывести частоту 1500000 Гц (мне нужно подтактировать YM2149F или AY-3-8910). А, ну раз разговор пошел, кто поможет YM2149F или AY-3-8910 подключить к меге8 на BASCOM-AVR (если надо, образец на CodeVisionAvr могу дать).
Вы получаете от людей больше, если им противоречите
Gryphon писал(а):Доброго времени, форумчане! Кто знает, как на тиньки2313 в BASCOM-AVR на один из выходов вывести частоту 1500000 Гц (мне нужно подтактировать YM2149F или AY-3-8910). А, ну раз разговор пошел, кто поможет YM2149F или AY-3-8910 подключить к меге8 на BASCOM-AVR (если надо, образец на CodeVisionAvr могу дать).
Нужно смотреть либо в сторону таймера настроенного в режим СТС, с выходом на ногоу контроллера (см. описание регистров нужного таймера в ДШ), и есть еще вариант - затактировать контроллер на частоте 1,5 МГц и выводить эту частоту наружу на вывод CKOUT - это делается с помощью фьюза CKOUT.
- Gryphon
- Нашел транзистор. Понюхал.
- Сообщения: 152
- Зарегистрирован: Пн ноя 03, 2008 12:08:42
- Откуда: Владивосток
- Контактная информация:
Нужно смотреть либо в сторону таймера настроенного в режим СТС, с выходом на ногоу контроллера (см. описание регистров нужного таймера в ДШ), и есть еще вариант - затактировать контроллер на частоте 1,5 МГц и выводить эту частоту наружу на вывод CKOUT - это делается с помощью фьюза CKOUT.А если у меня тинька на 4МГц, то как организовать все это дело. Напишите пожалуйста саму программу, а то я не очень владею языком.
Вы получаете от людей больше, если им противоречите
Тихан писал(а):Повторяю вопрос:А возможно с помощью электретного микрфона , барсика, и AVR'а сделать звукопереключатель?
Скажем если есть сигнал то включить какойто выход.
Или както подругому?Мозет кто знает?
В принципе, возможно всё! Только надо сперва сформировать входной сигнал от электретного микрофона и задать какой-то порог срабатывания. Опять же сигнал надо усилить до нужного напряжения, чтобы AVR его увидел. То есть больше заморочек с аналоговой частью, чем с цифровой. А уж если аналоговая часть правильно заработает, тогда зачем вообще контроллер нужен? Просто подать сигнал на обыкновенный триггер и будет вам счастье!
Деня писал(а):Igor_67
По поводу DEBOUNCE вопрос не понят, это время на дребезг контактов
например кнопки подключённой к пину ( не забудь поттяжку ).
GOSUB и GOTO операторы условного и безусловного перехода.
А DECLARE SUB декларирование функции к GOSUB и GOTO никаким боком не относятся.
PB_EXPERT$hwstack = 32
$swstack = 10
$framesize = 40
Это действительно стеки и размер программы лично оно нужно только для лучшей работы Bascom"a
Я такие строки в программу не ввожу и проблем нет.
Декларирование (объявление) функции - это ИМХО DECLARE FUNCTION, а вот DECLARE SUB - это объявление подпрограммы. Так вот, я и спрашивал, надо ли объявлять какую либо ПП заранее, если в директиве DEBOUNCE SUB имеется ссылка на эту ПП? И про использование директивы DEBOUNCE в прерывании так никто и не ответил.
Тихан писал(а):Igor_67, Поддскажи с аналоговой частью! С цифровой думаю разберусь.
Как сформировать сигнал,
че за порог срабатывания,
и как усилять сигнал до нужного напряжения?Резистором уменьшают , а увеличавают?
Вобче-то увеличивают сигнал УВЕЛИЧИТЕЛЕМ
А вообще, такой вопрос лучше задать в разделе "ТЕОРИЯ". Наверняка подскажут умные люди , то есть коты, как правильно надо сделать...
...сейчас вот специально посмотрел. Действительно в разделе "СТАТЬИ" есть "Применение операционных усилителей" в трёх частях. ИМХО, в твоём случае нужен неинвертирующий усилитель + компаратор (а ещё лучше триггер Шмитта). Неинвертирующий усилитель предпочтительней потому, что у микрофона довольно высокое выходное сопротивление (хотя, смотря какой микрофон), а компаратором задаётся нужный порог включения/выключения (за счёт изменения опорного напряжения на неинвертирующем входе ОУ) подбором резисторов делителя. Думаю, здесь можно применить один сдвоенный ОУ, например К157УД2 или К140УД20, а ещё лучше - импорт!
Igor_67
Извини сначала не туда.
Подпрограмму объявлять не нужно, ты указываеш на нее здесь-
Debounce Pind.0 , 0 , Pr , Sub
DEBOUNCE в прерывании работает, но в программе в момент наступления события, подтормаживает.
Это очень тяжело поймать.
Я чтоб не заморачиватся пользуюсь циклом
(FOR, NEXT), и прерывания проходят и дребезг контролирую.
Извини сначала не туда.
Подпрограмму объявлять не нужно, ты указываеш на нее здесь-
Debounce Pind.0 , 0 , Pr , Sub
DEBOUNCE в прерывании работает, но в программе в момент наступления события, подтормаживает.
Это очень тяжело поймать.
Я чтоб не заморачиватся пользуюсь циклом
(FOR, NEXT), и прерывания проходят и дребезг контролирую.