BASCOM AVR в вопросах и ответах
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
так в чем проблема?, опрашиваете по очереди ножки, ножка=1? старт таймерХ, и так далее.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Re: BASCOM AVR в вопросах и ответах
mr4ester писал(а):так в чем проблема?, опрашиваете по очереди ножки, ножка=1? старт таймерХ, и так далее.
На ножке следующий расклад: 10мс единица, 10мс ноль. Необходим сброс таймера в момент перехода с ноля на единицу и наоборот. При вашем варианте, как мне кажется, первые 10 мс таймер будет постоянно сбрасываться, а вторые 10 мс будет работать так как надо. Всё равно спасибо. Свой вариант уже написал, должно получиться, завтра проверю. Если получится отпишусь.
Re: BASCOM AVR в вопросах и ответах
Вообщем всё заработало правильно следующим способом:
Если есть возможность проще реализовать такую же функцию, прошу отписаться.
Код: Выделить всё
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 в вопросах и ответах
вам не кажется что вы не правильно описали функцию. зачем вам else, у вас сейчас написано ели пин=А тогда, иначе ......, зачем это иначе?, и зачем вот это A = Pinb.3 действие?, и вообще не до конца понятно, что вам нужно считать.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Re: BASCOM AVR в вопросах и ответах
Добрый день уважаемые коты. Никак не могу скомпилить прилагаемый код, слишком мало опыта. Пожите кто чем может. Спасибо!
- Вложения
-
- 2.txt
- (17.49 КБ) 256 скачиваний
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Добрый.
Откуда код-то? Для начала все кавычки в коде неправильные. Например, подключаться файл должен так:
а не так:
Комментарии опять же:
Откуда код-то? Для начала все кавычки в коде неправильные. Например, подключаться файл должен так:
Код: Выделить всё
$regfile = "m168def.dat"а не так:
Код: Выделить всё
$regfile = “m168def.dat”Комментарии опять же:
Код: Выделить всё
'configure lcd screen"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
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 в вопросах и ответах
implex писал(а):Нужно следующее: если порт не равен переменной то....
А, вот откуда эта ерунда с Else.
Код: Выделить всё
If Pinb.3 <> A Then
A = Pinb.3
Stop Timer0
Timer0 = 0
Start Timer0
.........
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
Edm 2007 огромное спасибо! Именно то, что нужно. Вводил в гугл "неравно в bascom" и не нашел - плохо искал. По этому думал, что знака неравно нету. В исходниках по ходу то же редко встречается.
- dimon-790
- Мучитель микросхем
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
кто подскажет как переменную типа word , вытащить на 4х разрядный led индикатор ?. Пробовал разбить её на два байта , с помощью high и low и последующим делением на 10 но получается какято хрень . Кто и как это победил ?
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Какая разница сколько разрядов на индикаторе и какой тип переменной? Есть масса вариантов по разносу переменной по разрядам, и тип / разряды тут не имеют никакого значения. Можно оформить все это в цикл, который сам разобьет переменную по разрядам, а можно просто разнести руками, используя элементарно деление / остаток от деления. Будьте добры пример кода, в котором у Вас возникли затруднения.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- dimon-790
- Мучитель микросхем
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
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 то всё нормально а если больше начинаются чудеса .
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 в вопросах и ответах
Для начала разберитесь с типами переменных, у Вас Dat_adc имеет тип Word, а переменная R всего лишь Byte, в которой этот Word Вы пытаетесь делить. Та же история происходит в операциях с массивом Razdisp. Разумеется, будут чудеса если значение больше 255, оно же превышает значение типа Byte.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- dimon-790
- Мучитель микросхем
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Согласен с переменными бардак , давно не баскомил позабывал многое , спасибо edm2007 . Дальше я уже сам .
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да это всего лишь с типами переменных немного ошибка. Ерунда совсем. Конечно R не может нормально разделить переменную, она просто не в состоянии вместить тип Word. Та же история с Razdisp(..). А в остальном все верно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- pavel123
- Грызет канифоль
- Сообщения: 268
- Зарегистрирован: Чт май 17, 2007 09:44:13
- Откуда: Украина, г. Кривой Рог
Re: BASCOM AVR в вопросах и ответах
Если уже было, извините...
Вот еще сайт с обучалками и примерами.
Может кому пригодится.
http://avr.ru/beginer/bascom
Вот еще сайт с обучалками и примерами.
Может кому пригодится.
http://avr.ru/beginer/bascom
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Подскажите пожалуйста как отключить опрос датчиков на шине I2C если они отсутствуют? Потому как если я отключу от МК датчик температуры то схема останавливается полностью.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
vanyap1 писал(а):Потому как если я отключу от МК датчик температуры то схема останавливается полностью.
Это с чего вдруг?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Схема работает стабильно, все в полном порядке, но если отключить датчик температуры или часы и не убрать опрос с программы то вся схема становится нерабочей. Все датчики и часы находятся на одной шине I2C, МК - Atmega8.
Можно как то установить флаг отсутствия устройства при первом опросе и не опрашивать последующий раз?
Можно как то установить флаг отсутствия устройства при первом опросе и не опрашивать последующий раз?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Если не был получен импульс присутствия, то Err возвращает 1.
Код: Выделить всё
1wreset ' сбрасываем линию
If Err = 1 Then ' если датчик не отозвался...
..........................
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон