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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Я уже указал тебе на ошибку, но ты все равно упорно ее совершаешь.
Sub Hilighton
T2 = 0
While T2 < 10
Incr T1
If Pind.3 = 0 Then : Return
End If
Waitms 100
Wend
Set Portb.3
End Sub
Опять после THEN идет двоеточие, то есть получается условие без следствия. И чего ты хочешь тогда добиться?
Я тебе немного исходник подрихтовал, он во вложении. Пробуй. Честно признаюсь, у себя не проверял - некогда, извини! :oops:
Да, потом заметил еще один момент. В п/п Highlighton сначала T2=0? , а потом цикл, пока Т2<10...
Ну дык оно(Т2) всегда будет меньше 10, при обращении к этой п/п. Короче думай-переделывай...
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Доброго времени суток. Проблема у меня с динамической индикацией. Attiny2313+ds18b20. В главном цикле измерение и расчет температуры, по прерыванию таймера - индикация. В целом все работает (только не закончен расчет отрицательной температуры и прочие знаки минуса, не определился еще в каком формате выводить на дисплей). Но вот через равные промежутки времени индикация "дергается" (чуть пригасает). При чем зависят эти провалы от задержки в главном цикле. Понять не могу, вроде таймер нигде надолго не останавливается (только чтоб чтению датчика не мешать). Надпись Err при отсутствии датчика нормально отображается. Очень нужна Ваша помощь. Вобщем, вот код:

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

Config Timer0 = Timer , Prescale = 8                        ' таймер динамической индикации
On Timer0 Refresh                                           ' обзываем прерывание

Enable Interrupts                                           ' разрешаем все прерывания
Enable Timer0                                               ' и для таймера в частности

'*********************************************[Присвоение уникальных имен]****************************************

Dig1 Alias Portd.4 : Dig2 Alias Portd.5 : Dig3 Alias Portd.6       ' обзываем разряды

'**********************************************[Начало основной программы]****************************************

I(1) = 11                                                   ' при включении, пока не считали температуру
I(2) = 11                                                   ' выводим прочерки
I(3) = 11

Do

Stop Timer0

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

If Err = 1 Then Goto Error                                  ' если датчик не отозвался, выводим надпись "err"

1wwrite &HCC                                                ' иначе, пропуск ПЗУ
1wwrite &H44                                                ' запускаем преобразование температуры

Start Timer0

Waitms 750                                                  ' ждем окончания преобразования

Stop Timer0

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

If Err = 1 Then Goto Error                                  ' если датчик не отозвался, выводим надпись "err"

1wwrite &HCC                                                ' иначе, пропуск ПЗУ
1wwrite &HBE                                                ' читаем из ОЗУ, чего мы там наизмеряли

Byte0 = 1wread()                                            ' читаем нулевой и первый байт памяти датчика
Byte1 = 1wread()                                            ' (в них хранится считанная температура)

Start Timer0

T1 = Byte0 / 16                                             ' Сдвигаем нулевой байт вправо на 4 бита
T2 = Byte1 * 16                                             ' Сдвигаем первый байт влево на 4 бита

T = T1 + T2                                                 ' собираем целую часть в кучу

I(1) = T / 10
I(2) = T Mod 10
I(3) = 10

Loop

'**********************************************[Вспомогательные процедуры]****************************************

Error:                                                      ' подпрограмма, выполняемая при ошибке опроса датчика

Start Timer0                                                ' запускаем таймер индикации

I(1) = 12                                                   ' выводим надпись Err
I(2) = 13
I(3) = 13

Goto Error                                                  ' и остаемся тут

'*******************************************[Процедуры обработки прерываний]**************************************

Refresh:                                                    ' динамическая индикация

Stop Timer0

Reset Dig1 : Reset Dig2 : Reset Dig3                        ' гасим индикатор

Incr Count : If Count > 3 Then Count = 1                    ' выбираем какую цифру сейчас включать

Portb = Lookup(i(count) , Digits)                           ' грузим в порт из массива

Select Case Count                                           ' и включаем соответствующий разряд индикатора
 Case 1 :
 Set Dig1
 Case 2 :
 Set Dig2
 Case 3 :
 Set Dig3
End Select

Start Timer0                                                ' запускаем таймер0

Return

'**************************************************[Массивы и данные]*********************************************

Digits:                                                     ' цифры и буквы

Data &B11111100 , &B01100000 , &B11011010 , &B11110010 , &B01100110 , &B10110110       ' 0 1 2 3 4 5
Data &B00111110 , &B11100000 , &B11111110 , &B11100110 , &B10011101 , &B00000010       ' 6 7 8 9 C -
Data &B10011110 , &B00001010                                ' E r
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

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

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

Сообщение edm2007 »

kip96 писал(а):И вообще- без коментариев трудно понять что хотите? Пишите не работает- а чё не работает догадываться надо?
симулятором пользуетесь? Очень удобно по шагам пройтись
далее-пишем GOSUB, выделяем курсором ,нажимаем F1 - понимаем, что всё намного проще


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

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

Сообщение edm2007 »

kip96 писал(а):Igor_67, почему

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

Shift B0 , Right , 5
Shift B1 , Left , 3
, сдвигаем в право на 5, а в лево на 3?
И ещё -в протеусе с Мегой 8, чтобы нормально работала DS18B20, пришлось частоту до 1Мгц уменьшить, а с 2313 прерывания некорректно работали.
Может глюк Протеуса?


В протеусе действительно DS18B20 работает непонятно как. Мне только правка свойств датчика помогла.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

edm2007 писал(а):Это мне?

нет :))
а это тебе
Я иногда вместо

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

Waitms 750
писал

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

Bitwait Portd.1 , Set                                       ' Ждем окончания преобразования 
-преобразование происходило быстрее,
опрос 18B20 происходит постоянно-надобы задержку поставить пару секунд.
а то брехать будет от собственного нагрева
Посмотри мой код-рабочий 100% (несколько постов выше)
Правда термометр в составе часов, изеряет темп. перед индикацией потом показывает 5 сек.
вычисляет и отриц.температуру и дробную часть без ошибок.
Просьба и к тебе- если оптимизируеш код отпишись.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

kip96 писал(а):
edm2007 писал(а):Это мне?

нет :))
а это тебе
Я иногда вместо

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

Waitms 750
писал

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

Bitwait Portd.1 , Set                                       ' Ждем окончания преобразования 
-преобразование происходило быстрее,
опрос 18B20 происходит постоянно-надобы задержку поставить пару секунд.
а то брехать будет от собственного нагрева
Посмотри мой код-рабочий 100% (несколько постов выше)
Правда термометр в составе часов, изеряет темп. перед индикацией потом показывает 5 сек.
вычисляет и отриц.температуру и дробную часть без ошибок.
Просьба и к тебе- если оптимизируеш код отпишись.

Да, я разумеется смотрел твой код, в плане измерения - почти одно лицо. :) Я просто понять хочу в чем у меня дело. Задержка в главном цикле только увеличивает интервал мырганий. Явно же что где-то тут проблема. Надпись Err и прочерки при первом запуске без проблем отображаются. Сейчас смотрю, два мырга, пауза как раз почти в секунду и далее по кругу. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

скорее всего у тебя $crystal = 8000000
значит переполнение таймера будет - 8\8000000*256=256uS
Процес инициализации происходит переводом шины 1-wire в 0 минимум 480us
потом ждём ответа примерно столькоже (15-60 выжидает и 60-240 отвечает)
Может тут ответ
edm2007 писал(а):Задержка в главном цикле только увеличивает интервал мырганий

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

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

Сообщение edm2007 »

kip96 писал(а):Это странно :dont_know: Не должно быть.


Так вот в том-то и дело. Если в главном цикле установить задержку например в 10 сек, то и едва заметное мырганье будет с интервалом в 10 сек, примерно. Впрочем, если программа запинается, то так оно и будет. И запинается она, вероятнее всего, при инициализации датчика. Именно тогда таймер остановлен. Да, кристал 8 000 000. Только сейчас и не соображу, 6 утра уже просто. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Я вот подумал-
Попробуй останавливать таймер не ДО 1wreset, а ПОСЛЕ
Ведь по сути защёлка сработает на сброс линии. А прерывание по таймеру быстро проскочит :))
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

kip96 писал(а):Я вот подумал-
Попробуй останавливать таймер не ДО 1wreset, а ПОСЛЕ
Ведь по сути защёлка сработает на сброс линии. А прерывание по таймеру быстро проскочит :))


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

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

Сообщение edm2007 »

Ну неужели ни у кого нет мыслей по этому поводу. В целом-то все же работает. :(

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

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

Сообщение edm2007 »

kip96, а можно твой исходник полностью?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
vladik-bob
Родился
Сообщения: 4
Зарегистрирован: Сб ноя 06, 2010 14:59:22
Откуда: Владивосток

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

Сообщение vladik-bob »

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

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

Сообщение edm2007 »

vladik-bob писал(а):Сразу прошу прощения за глупый вопрос, но я ничего не понимаю в бейсике. Кто-нибудь может мне помочь объяснить, как написать программу, чтоб нажал на кнопочку светодиодик светится второй раз нажал светодиодик не светится? Заранее спасибо!


Как вариант - так:

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

'#######################################################################

' Определение переменных и констант:

Config Debounce = 50                ' устанавливаем константу для антидребезга (50 ms)

'#######################################################################

' Инициализация портов:

Config Pind.2 = Input                                       ' вход (кнопка)
Config Portb.0 = Output                                     ' выход (светодиод)

Set Portd.2                                                 ' подтягиваем кнопку к питанию
Reset Portb.0                                               ' обнуляем светодиод

'#######################################################################

' Присвоение уникальных имен:

Button Alias Pind.2                                         ' присваиваем имя порту кнопки
Led Alias Portb.0                                           ' присваиваем имя порту светодиода

'#######################################################################

' Начало основной программы:

Do                                                          ' начало цикла программы

Debounce Button , 0 , Smena , Sub           ' щупаем кнопку на наличие низкого уровня, и при появлении идем к подпрограмме smena (sub - вызвать как подпрограмму)
                                                             
Loop

'########################################################################

' Вспомогательные процедуры:

Smena:                                           ' подпрограмма смены состояния светодиода

Toggle Led                                           ' меняем состояние на противоположное

While Button = 0                                          ' цикл ожидания отпускания кнопки
Wend

Return                                                      ' выход из подпрограммы

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

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

Сообщение edm2007 »

В принципе, там цикл ожидания отпускания кнопки для примера...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
vladik-bob
Родился
Сообщения: 4
Зарегистрирован: Сб ноя 06, 2010 14:59:22
Откуда: Владивосток

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

Сообщение vladik-bob »

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

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

Сообщение edm2007 »

vladik-bob писал(а):Спасибо большое за ответ, а где можно найти команды и вообще с чего начать начинающему, чтобы самому хотя бы такое можно было написать?


Начни отсюда. http://www.decada.org.ru/project/lessons/bascom_avr/index.php Великолепная обучалка. А вообще в сети полно всего...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

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

Сообщение max50 »

vladik-bob писал(а):Сразу прошу прощения за глупый вопрос, но я ничего не понимаю в бейсике. Кто-нибудь может мне помочь объяснить, как написать программу, чтоб нажал на кнопочку светодиодик светится второй раз нажал светодиодик не светится? Заранее спасибо!


Можно проше:

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

'#######################################################################

' Определение переменных и констант:

' Инициализация портов:

Config Pind.2 = Input                                       ' вход (кнопка)
Config Portb.0 = Output                                     ' выход (светодиод)

Set Portd.2                                                 ' подтягиваем кнопку к питанию
Reset Portb.0                                               ' обнуляем светодиод

'#######################################################################

' Присвоение уникальных имен:

Button Alias Pind.2                                         ' присваиваем имя порту кнопки
Led Alias Portb.0                                           ' присваиваем имя порту светодиода

'#######################################################################

' Начало основной программы:

Do                                                          ' начало цикла программы

If Button = 0 Then
Waitms 50                                                ' задержку можно менять
Toggle Led
End if
                                                             
Loop

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

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

Сообщение edm2007 »

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

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