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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

Считываем текущее значение из порта или компаратора и пишем его в младший бит переменной.
Далее переменную двигаем.
Как-то так:

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

For I = 1 To 8
    Var.0 = Pinb.0
    Shift Var , Left , 1
    Waitms 2
Next I
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

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

Сообщение ВНН »

В связи с тем что шум величина случайная и Время между сработкой компаратора тоже случайно.
Для большего разброса параметров можно с вывода ШИМ через интегрирующую цепочку завести
на внешний компаратор или усилитель.
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

Мурик писал(а):Считываем текущее значение из порта или компаратора и пишем его в младший бит переменной.
Далее переменную двигаем.

А, тоже вариант. Можно ещё например время между появлениями единицы по таймеру считать. Но как-то ресурсоёмко выходит.
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

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

Сообщение ВНН »

Тогда по int отталкиваясь от аплитуды шим на внешнем компараторе
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

Это и получится самопальный АЦП :))
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

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

Сообщение ВНН »

Еще один вариант .По приходу имп. на компаратор считываем значение шим и
делим на переменную в какомто заданном диапазоне (вставленно в основной цыкл).Время прихода импульса неизвестно,значит и количество циклов тоже, каки и число делителя.Более простое решение больше на ум неприходит.
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

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

Сообщение saschai »

Что делаю не так? после обработки PP.1, MK уходит в перезагрузку,, решил проблему, безусловным переходом по Лейблу.1, все работает, но надо же разобраться, тем более, что шевеление портами в теле Подпрограммы прерывания и штатный выход из оной к критическим действиям не приводит
И еще проблемка, порт подтянут через 10к к +5В. Замучал дребезг кантактов, отрабатывал в Протеусе, все изумительно, на живом устройстве, то срабатывает, потом отключается, то не срабатывает, то по нескольку раз, как с этим бороться, время задержки менял до 1сек :))
Зы кошачий таймер на перезагрузку влиять не может, стоит с максимальным делителем и отслежмвается, не он точно, уже убирал :))

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

$regfile = "m8def.dat"                                      
$crystal = 8000000 

Config Pind.2 = Input
Config Int0 = Falling
On Int0 baton
Enable Interrupts
Enable Int0

Do
  ...
  If Stjag  = 1 Then Goto PP.1
Лейбл.1   
    ...
Loop

baton :
Asm
Stjag = 1
конец  Asm
Waitms 250
Gifr = 64                                                 
wdr
Return

PP.1:
Stjag = 0
Шевелю ногами
Лейбл.1
Return

End
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

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

Сообщение ВНН »

Скорее всего тебн не хватает стека
Это параметрв то умолчанию
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space

Более развернуто http://bascomavr.3bb.ru/viewtopic.php?id=494
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

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

Сообщение saschai »

Не, здесь вроде все в порядкке, на всякий случай проверил, увеличил еще, не в этом проблема

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

$hwstack = 64
$swstack = 32
$framesize = 64
$lib "lcd4.lbx"
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Как-то смущает меня переход по goto а возврат по return. Может стоит по gosub уйти?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

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

Сообщение saschai »

Как-то смущает меня переход по goto а возврат по return. Может стоит по gosub уйти?

Волшебник!!! и чего я сразу не сделал, раньше все метки декларировал как ПП, а тут поленился :oops:
Благодарю :beer:
Осталось теперь только с дребезгом контактов разобраться :))
Последний раз редактировалось saschai Ср фев 16, 2011 12:01:04, всего редактировалось 1 раз.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Ну вот и славно. :) Я вот не знаю, возможно и без проблем работает, но мне как-то спокойнее, если на метку по goto то возращаться тогда тоже goto в рабочий цикл. Ну а return он же как возврат из подпрограммы. Ну и из прерывания, разумеется. :)

А вот с дребезгом пока не понятно. Даже если и флаг от дребезга ловится, то в любом случае он сбрасывается перед выходом. Есть конечно место после сброса, пока сторожевой таймер обнуляется, но так и задержка огромная.... Впрочем, я всегда антидребезг ставлю в самом начале, а сброс флага непосредственно перед выходом.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

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

Сообщение saschai »

Можно кусочек кода глянуть?
Наверное придераюсь :)) , приввыык работать с DEBOUNCE, и наплевать на длительное удержание, читал, что можно сие использовать при обработке прерывания, вот только не знаю как :))
Перенос задержки в начало ПП прерывания слегка улучшил ситуациюю. но в корне не изменил, может у меня кнопки не правильные :))

Ты прав, ГОТО-РЕТУРН, не работает!!! Проверил в др. месте, не задикларировав ПП, тоже получил вылет.! Недавно подсмотрел в чужом листинге :)) , а поскольку програмка получилась обширной, в некоторых случаях, поленился декларировать ПП, а где работает :)) , посмотрел, что у меня организован, безусловный переход на метку :))

И еще один вопросик, про грамотный синтаксис описание включения сторожевого таймера, в основном коввыряюсь в АСМе с Пиками, там все просто, ставлю бит конфигурации и делитель однойй строкой, поппробывал в АВР, для протеуса все катит, но на реальной меге8, МК безвозратно виснет, в фьюзах WTDON, не программирую. а пользую

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

$framesize = 64
$lib "lcd4.lbx"
Wdtcr = &B00001111
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Действительно, если просто обрабатывать прерывание (даже с антидребезгом), то есть повторные срабатывания. И как я понимаю, происходят они в момент отпускания кнопки. То бишь прерывание уже отработано, а кнопку мы держим, и в момент отпускания из-за дребезга оно снова идет обрабатываться.

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

$regfile = "attiny2313.dat"
$crystal = 4000000

'----------

Config Porta.1 = Output       ' светодиод
Config Pind.2 = Input         ' INT0
Const Debouncetime = 150      ' 150 мс
Led Alias Porta.1
Led = 0

'----------

Config Int0 = Falling
On Int0 Button
Enable Interrupts
Enable Int0

'----------

Do

Loop

'----------

Button:

Toggle Led
Waitms Debouncetime  ' антидребезг
Eifr = 64                     ' сбрасываем флаг

Return

End


Я не видел подобных решений, но в процессе экспериментов получилось, что полностью убирает ложные срабатывания только проверка на удержание кнопки, непосредственно перед очисткой флага прерывания.

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

Button:

Waitms Debouncetime           ' антидребезг
Toggle Led

While Pind.2 = 0                   ' если кнопка удерживается
Waitms Debouncetime
Wend                                  ' крутимся здесь

Eifr = 64                             ' сбрасываем флаг

Return


P.S. C удовольствием посмотрел бы другие решения. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

saschai писал(а):ГОТО-РЕТУРН, не работает!!!
Я бы удивился если бы работало. :shock:
Это создаст фатальные проблемы со стеком, что приведёт к краху программы! :kill:
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

saschai писал(а):И еще один вопросик, про грамотный синтаксис описание включения сторожевого таймера


Ну по регистру вроде все правильно... Хотя, в баскоме есть свои плюшки :)

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

Config Watchdog = 2048
Start Watchdog

Reset Watchdog


Но судя по симулятору пишется в регистр все так же.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Мурик писал(а):Это создаст фатальные проблемы со стеком, что приведёт к краху программы!


Ну оно и приводит к краху, так что все хорошо. :))
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

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

Сообщение saschai »

Я не видел подобных решений, но в процессе экспериментов получилось, что полностью убирает ложные срабатывания только проверка на удержание кнопки, непосредственно перед очисткой флага прерывания.

Шаман, однако, вчера просмотрел кучу листингов такого не видел, реально работает, и работает на ура!
Благодарю!
сейчас попробую с таймером, протеус глотает все без проблем, а вот на реальном МК, виснет, причем малая часть кода исполняется :))
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Проверил сейчас в железе на тиньке, работает сторожевой таймер средствами баском. Пока сбрасывается - все нормально. Не сбрасывается - перезагружается. Все как и положено. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
saschai
Говорящий с текстолитом
Сообщения: 1596
Зарегистрирован: Вс дек 14, 2008 20:36:47
Откуда: SPb

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

Сообщение saschai »

Как пприятно напрячь, умного человека :)) , с тем, чем мучался два дня, решилось за пол часа :))
Огромная благодарность!
Действительно средствами Васика все работает и в железе и в Симе, просто вчера перерыл весь он-лайн и офф хелп и кроме как упоменание в командах асм WDR, ничего не нашел.
Ответить

Вернуться в «AVR»