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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

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

Сообщение mr4ester »

так в чем проблема?, опрашиваете по очереди ножки, ножка=1? старт таймерХ, и так далее.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
implex
Родился
Сообщения: 15
Зарегистрирован: Пт фев 17, 2012 23:19:13

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

Сообщение implex »

mr4ester писал(а):так в чем проблема?, опрашиваете по очереди ножки, ножка=1? старт таймерХ, и так далее.

На ножке следующий расклад: 10мс единица, 10мс ноль. Необходим сброс таймера в момент перехода с ноля на единицу и наоборот. При вашем варианте, как мне кажется, первые 10 мс таймер будет постоянно сбрасываться, а вторые 10 мс будет работать так как надо. Всё равно спасибо. Свой вариант уже написал, должно получиться, завтра проверю. Если получится отпишусь.
implex
Родился
Сообщения: 15
Зарегистрирован: Пт фев 17, 2012 23:19:13

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

Сообщение implex »

Вообщем всё заработало правильно следующим способом:

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

Dim A As Bit
A = 1
Do
If Pinb.3 = A Then
Else
A = Pinb.3
Stop Timer0
Timer0 = 0
Start Timer0
.........
loop
End If

Если есть возможность проще реализовать такую же функцию, прошу отписаться.
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

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

Сообщение mr4ester »

вам не кажется что вы не правильно описали функцию. зачем вам else, у вас сейчас написано ели пин=А тогда, иначе ......, зачем это иначе?, и зачем вот это A = Pinb.3 действие?, и вообще не до конца понятно, что вам нужно считать.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
purgen
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт мар 16, 2012 13:28:31

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

Сообщение purgen »

Добрый день уважаемые коты. Никак не могу скомпилить прилагаемый код, слишком мало опыта. Пожите кто чем может. Спасибо!
Вложения
2.txt
(17.49 КБ) 256 скачиваний
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Добрый.

Откуда код-то? Для начала все кавычки в коде неправильные. Например, подключаться файл должен так:

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

$regfile = "m168def.dat"


а не так:

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

$regfile = “m168def.dat”


Комментарии опять же:

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

'configure lcd screen
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
implex
Родился
Сообщения: 15
Зарегистрирован: Пт фев 17, 2012 23:19:13

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

Сообщение implex »

mr4ester писал(а):вам не кажется что вы не правильно описали функцию. зачем вам else, у вас сейчас написано ели пин=А тогда, иначе ......, зачем это иначе?, и зачем вот это A = Pinb.3 действие?, и вообще не до конца понятно, что вам нужно считать.

Случайно не правильно скопировал:

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

Dim A As Bit
A = 1
Do
If Pinb.3 = A Then
Else
A = Pinb.3
Stop Timer0
Timer0 = 0
Start Timer0
.........
loop

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

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

Сообщение edm2007 »

implex писал(а):Нужно следующее: если порт не равен переменной то....


А, вот откуда эта ерунда с Else. :)) Если нужна проверка на неравенство:

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

If Pinb.3 <> A Then
A = Pinb.3
Stop Timer0
Timer0 = 0
Start Timer0
.........
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
implex
Родился
Сообщения: 15
Зарегистрирован: Пт фев 17, 2012 23:19:13

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

Сообщение implex »

Edm 2007 огромное спасибо! Именно то, что нужно. Вводил в гугл "неравно в bascom" и не нашел - плохо искал. По этому думал, что знака неравно нету. В исходниках по ходу то же редко встречается.
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

кто подскажет как переменную типа word , вытащить на 4х разрядный led индикатор ?. Пробовал разбить её на два байта , с помощью high и low и последующим делением на 10 но получается какято хрень . Кто и как это победил ?
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Какая разница сколько разрядов на индикаторе и какой тип переменной? Есть масса вариантов по разносу переменной по разрядам, и тип / разряды тут не имеют никакого значения. Можно оформить все это в цикл, который сам разобьет переменную по разрядам, а можно просто разнести руками, используя элементарно деление / остаток от деления. Будьте добры пример кода, в котором у Вас возникли затруднения.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

Dim Razdisp(4)as Byte , N As Byte , L As Byte , Displ As Byte , Dat_adc As Word , R As Byte , G As Byte
Patcon:
Dat_adc = 256
'Razdisp(4) = High(dat_adc)
'Razdisp(3) = Low(dat_adc)

R = Dat_adc / 10
Razdisp(1) = Dat_adc Mod 10 '5
Razdisp(2) = R Mod 10
Razdisp(3) = R / 10
'razdisp(4) = Dat_adc / 10
Return

вот этот кусок программы , если в Dat_adc положитьчисло до 255 то всё нормально а если больше начинаются чудеса .
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Для начала разберитесь с типами переменных, у Вас Dat_adc имеет тип Word, а переменная R всего лишь Byte, в которой этот Word Вы пытаетесь делить. Та же история происходит в операциях с массивом Razdisp. Разумеется, будут чудеса если значение больше 255, оно же превышает значение типа Byte.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

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

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

Сообщение edm2007 »

Да это всего лишь с типами переменных немного ошибка. Ерунда совсем. Конечно R не может нормально разделить переменную, она просто не в состоянии вместить тип Word. Та же история с Razdisp(..). А в остальном все верно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

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

Сообщение pavel123 »

Если уже было, извините... :)
Вот еще сайт с обучалками и примерами.
Может кому пригодится.
http://avr.ru/beginer/bascom
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

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

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

Сообщение edm2007 »

vanyap1 писал(а):Потому как если я отключу от МК датчик температуры то схема останавливается полностью.


Это с чего вдруг?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

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

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

Сообщение edm2007 »

Если не был получен импульс присутствия, то Err возвращает 1.

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

1wreset                                                     ' сбрасываем линию

If Err = 1 Then                                             ' если датчик не отозвался...
..........................
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ответить

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