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

Обсуждаем контроллеры компании Atmel.
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

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

Сообщение Tom91 »

Как записать биты в байт? Есть ли какая команда?

К примеру имеем 6 переменных типа bit:

A2
A3
A4
A5
A6
A7

А также одну переменную типа байт ByteA27 но как в неё поместить переменные A2-A7 ? (при этом не затронуть биты A0-A1)
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

Сложить.
А27 = А1+А2
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

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

Сообщение Tom91 »

vanyap1 писал(а):Сложить.
А27 = А1+А2

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

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

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

Tom91 писал(а):Как записать биты в байт? Есть ли какая команда?

например так :

Dim M_byte As Byte , A As Bit , B As Bit , C As Bit , D As Bit , E As Bit , F As Bit , G As Bit , H As Bit

'биты в байты
m_byte.0=a
m_byte.1=b
m_byte.2=c
m_byte.3=d
m_byte.4=e
m_byte.5=f
m_byte.6=g
m_byte.7=h

'байты в биты

a = m_byte.0
b = m_byte.1
c = m_byte.2
d = m_byte.3
e = m_byte.4
'....и т.д.
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

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

Сообщение Av4arik »

покажите или ткните, как реализовать опрос DS18b20 на atmega8? задача - прикрутить DS18b20 в одном или двух экземплярах по вот этой схеме часов, и выводить показания датчиков на 57-ой секунде (в исходнике стоит на эту секунду отображение даты) . из свободных ног контроллера (которые хочется использовать как раз для датчиков) - PB1 и PD0 (пины 2 и 15 соответственно) . download/file.php?id=72441 вот здесь исходник. кто может осуществить помощь? заранее благодарен.
З.Ы. попрошу не пинать, если сложно сделать, так и напишите, ибо я не учил языки программирования (пытался, но неудачно), и мне стыдно за это. с автором данной конструкции связывался, но он отказался....
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

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

Сообщение mr4ester »

вот сайт http://avrproject.ru/publ/kak_podkljuch ... 2/2-1-0-15 там подробно расписана работы с датчиком. А что бы выводить показания я бы в основном цикле бы поставил условие сравнивая секунд с числом 57 и по совпадению, уходил на подпрограмму измерения температуры и отображения но это моя теория, я еще не спец в этом деле, даже можно сказать начинающий.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

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

Сообщение Av4arik »

mr4ester дык, вывод даты и установлен на условии "если секунды= менее 57, то выводим время, а если более, то выводим дату..." так же к примеру, по Вашей ссылке не особо понятно, что нужно писать:
вот так:

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

Config port.d0 = input
Config_1wire = port.d0     
или достаточно просто написать

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

Config_1wire = port.d0     

дык и что получится по второму примеру - инпут на 1-wire или оутпут?
а сам исходник для часов я не потяну, там есть переменные, массивы, я даже еще почитать про это толком не успел, дык и данные с датчика должны же в переменную заводиться или ОЗУ, а вдруг этот участок который я сделаю, будет занят на этом исходнике...и как показывать плюсовая/минусовая температура - нужно будет зажигать одну из неонок (ИН-3), или все сразу, например если температура минусовая. самое главное - как реализовать на этой динамически-хитрой индикации вывод температуры на лампы, и чтобы левый код не отправился на них в случае ошибки опроса датчика или его отсутствия.... поэтому и спрашиваю, контроллер как и остальные элементы запалить не хочется, а ошибок я наделаю много... так же интересно, как опрашивать два датчика по одному пину контроллера (шина же 1-wire, а значит там может быть несколько датчиков сразу).
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

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

Сообщение mr4ester »

как мне кажется никто не будет заниматься этим кроме вас, так как на это нужно время, так что советую вникать в исходник, а на форуме вас направят в нужное русло. А по поводу минусовой температуры тут вообще затык, мне например не приходит в голову как на этих индикаторах отобразить минус
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

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

Сообщение Av4arik »

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

вся фишка в том, что индикация динамическая, как для самих ламп так и неонок. к примеру, если температура на датчике меньше нуля по цельсию, то загораются все неонки только при показе температуры (их три штуки), в остальном все работает в штатном режиме. Как я понял, этот язык программирования очень близок к обычному старому доброму бейсику? а чем BASCOM компилировать? чем проверять на ошибки? и где можно синтаксисы команд почитать? знаю, что можно найти в гугле, но инет это огромная помойка, описание может быть хорошим, а может быть и плохим - как различить пока не разбираешься, неизвестно. заранее благодарен.
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

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

Сообщение mr4ester »

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

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

Сообщение edm2007 »

Av4arik писал(а):даже еще почитать про это толком не успел


Вы куда-то торопитесь?

Av4arik писал(а):а чем BASCOM компилировать? чем проверять на ошибки? и где можно синтаксисы команд почитать?


Учебник Bascom AVR

А вообще у Bascom AVR великолепная справка в самой среде. Где каждая команда описана подробно. Да еще и с примерами.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

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

Сообщение Av4arik »

edm2007 писал(а):А вообще у Bascom AVR великолепная справка в самой среде. Где каждая команда описана подробно. Да еще и с примерами.

посмотрите исходник который я приложил выше.... думаю, вы поймете, почему я ломаю голову. курить буду данный самоучитель от товарища WildCat долго, ибо на данный момент интересует только этот проект (выше описал), а там полно переменных + динамическая индикация. так же задействован EEPROM, что для меня еще больше осложняет задачу.

З.Ы это не 10 строчек кода, тут на пару килобайт наберется, а для меня, как для начинающего это похлеще любого ада. пусть исходник хорошо прокомментирован, я там кроме разброса портов и набора переменных или массивов ничего больше не понял. учить времени особо много нет - работа...
как я понял, мне надо сконфигурировать одну ногу порта на 1-wire, создать массив/переменную , периодически запихивать в него данные датчика (читать), и выводить содержимое на дисплей. при условии когда секунды более 57...
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Av4arik писал(а):посмотрите исходник который я приложил выше....


Да смотрел конечно, и в тупик он меня не ставит. Ибо исходник прокомментирован замечательно.

Av4arik писал(а):курить буду данный самоучитель от товарища WildCat долго


Будете конечно, и не только его а еще тонны информации.

Av4arik писал(а): а там полно переменных + динамическая индикация. так же задействован EEPROM


Угу, а еще там темно и страшно. :wink:

Вы хоть что-нибудь делайте для начала, и спрашивайте по существу. А то как обычно, говорим "покажите или ткните", а подразумеваем "напишите за меня да разжуйте еще". Вам вот чем ссылка выше не угодила? Где есть и как шину настроить и как измерение запустить и как результат забрать. Не образец конечно (для LCD можно гораздо проще сделать), но для начала-то пойдет.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

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

Сообщение Av4arik »

edm2007 писал(а):смотрел конечно, и в тупик он меня не ставит. Ибо исходник прокомментирован замечательно.

для тех кто знает это не проблема.

edm2007 писал(а):Будете конечно, и не только его а еще тонны информации.

для одного проекта это уже слишком... звучит как "чтобы сделать измерение температуры, выучите азы программирования конкретной платформы, почитайте кучу аппноутов и даташитов, переберите исходник, переделайте под себя и готово".
edm2007 писал(а):Вам вот чем ссылка выше не угодила? Где есть и как шину настроить и как измерение запустить и как результат забрать. Не образец конечно (для LCD можно гораздо проще сделать), но для начала-то пойдет.

лучше бы подсказали, как их туды "внедрить", и куда данные датчика инклудить чтобы появилась температура а не другие цифры. я только понял, как настроить порт на 1-wire, и как читать ОЗУ датчика. для меня далеко не совсем разжеваны параметры и синтаксис каждой команды.
судя по исходнику, мне придется снова строить динамическую индикацию, преобразование двоичного кода в десятеричный (пример преобразования внутри исходника), сделать с десяток переменных и гонять их вместо даты или до нее/после нее...
edm2007 писал(а): Не образец конечно (для LCD можно гораздо проще сделать), но для начала-то пойдет.
для начала прекрасно подходит мигание светодиодов, светофоры, hd44780. но ни как не динамическая индикация с применением двух (!) дешифраторов по три индикатора на каждый.

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

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

Сообщение edm2007 »

Av4arik писал(а):для тех кто знает это не проблема.


Ну да, мне-то проще. Я таким родился, даже учиться не пришлось. :solder:

Av4arik писал(а):звучит как "чтобы сделать измерение температуры, выучите азы программирования конкретной платформы, почитайте кучу аппноутов и даташитов


В точку. Все так и есть. Только не "переберите под себя" а "напишите сами". Или Вы что думаете-то, даташиты это так, шутки ради? Для тех, кому заняться нечем? А у кого времени нет те просто "заводят с десяток переменых и инклудят там аккуратно, чтобы только в занятый участок не попасть"? Мне вот интересно, а как в Вашей версии все должно выглядеть? "В 10-строке напишите то-то, в 75 поправьте это, а в 120 исправьте так-то, и все заработает"? Так?

Av4arik писал(а):для начала прекрасно подходит мигание светодиодов


Вот и славно ! Вам есть с чего начать. А для того чтобы "поправить" чужой исходник, нужно разбираться в нем не хуже автора. Вы уверены что сможете "вписать" туда свой код, не нарушив структуру программы? Оценивайте свои силы реально...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Av4arik
Поставщик валерьянки для Кота
Сообщения: 1954
Зарегистрирован: Чт янв 20, 2011 16:47:18
Откуда: Старый Оскол
Контактная информация:

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

Сообщение Av4arik »

edm2007 писал(а): Вы уверены что сможете "вписать" туда свой код, не нарушив структуру программы? .

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

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

Сообщение mr4ester »

вообщем написал программу для измерения температуры с 2 датчиками 18В20. и второй день не могу разобраться что не так, вообщем задумка такая есть битовая переменная флаг при опросе датчика в зависимости от значения этого флага 0 или 1 считанная температура с датчика присваивается соответствующей переменной с последующим выводом на дисплей, но вот проблема почему то при подключении только одного датчика программа не должна выводить температуру второго датчика, а выводить слово об ошибке датчика, но вместо этого она дублирует температуру 1 датчика, честно уже не знаю в чем может быть собака зарыта, не могли бы вы глянуть на мой исходник и ткнуть пальцем если не трудно? Исходник вроде как пытался норм коментировать, вроде должно быть понятно, если нужно могу выложить файл исходник.

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

'*********** цифровой термометр на 2х ds18b20 ******************

$regfile = "m16def.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32

$baud = 9600



' ************** зададим переменные  и константы ***********************

Dim Znak As String * 1
Dim Dat1 As String * 5
Dim Dat2 As String * 5
Dim Byte0 As Byte
Dim Byte1 As Byte
Dim T As Byte
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Temp As Byte
Dim X As Byte
Dim W As Word
Dim Errord1 As Bit                                          ' переменная флаг ошибки 1 датчика
Dim Errord2 As Bit                                          ' переменная флаг ошибки 2 датчика
Dim Opr As Bit                                              ' переменная флаг для определения с какаим датчиком работали
Dim Prin As Bit                                             'переменная флаг для определения вывода данных в порт
Dim Breaking As Bit                                         ' переменная флаг сигнализирующая о прерывания
Dim Shethik As Word                                         ' переменнная для отсчета прерываний
Dim Tmax1 As String * 3                                     ' максимальная температура 1 датчика
Dim Tmin1 As String * 3                                     ' минимальная температура 1 датчика
Dim Tmax2 As String * 3                                     ' максимальная температура 2 датчика
Dim Tmin2 As String * 3                                     ' минимальная температура 2 датчика
Dim Rs232 As String * 5                                     ' переменная для работы с uart
Const Cons = 35535                                          ' константа для сравнения с таймером
Const Geth = 2274                                           ' константа для сравнения с счетчикаом прерываний


' *************** конфигугрируем подключение ЖКИ ****************

Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Config Lcd = 16 * 2                                         'дисплей 2 строки по 16 символов
Cursor Off                                                  'выключить курсор
Cls                                                         'очистить дисплей

' ************** конфигугрирем пин для подключения датчиков ******************

Config 1wire = Portb.0                                      ' на порт повесим 2 датчика с подтяжкой резистором на 4,7К

'*************** конфигурируем таймер для опроса датчика ***********************

Config Timer1 = Timer , Prescale = 256 , Compare A = Set , Clear Timer = 1
On Oc1a Tim                                                 ' обработка прерывания
Compare1a = Cons                                            ' загрузка в регистр сравнеия константы


'**************** конфигугурируем INT0 и INT1 для подключения кнопок *********************

Config Pind.2 = Input                                       'насторим вывод на вход
Config Pind.3 = Input                                       'настроим вывод на вход
Config Int0 = Falling                                       ' срабатывание по спаду
Config Int1 = Falling
Config Debounce = 75                                        ' задержка от дребезга контактов кнопки
On Int0 Button                                              'обработка кнопки
On Int1 Resbutton                                           'обработка кнопки сброса

'*************** конфигурируем прерывания по uart *******************

On Urxc Getchar



' ************* разрешаем все прерывания **************

Enable Interrupts
Enable Int0
Enable Int1
Enable Oc1a
Enable Urxc
Start Timer1
' ************* нарисуем знак градуса ***************

Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32


'***************** работаем с ds18b20 *****************

W = 1wirecount()                                            ' ищим датчики
Dsid1(1) = 1wsearchfirst()                                  'Считываем Семейный Код 1 Датчика
Do
Dsid2(1) = 1wsearchnext()                                   ' считываем семейный код 2 датчика
Loop Until Err = 1


'************** основной цикл программы ********************

Do

If Breaking = 1 Then                                        ' если флаг стоит значит было прерывание
Breaking = 0
End If                                                      ' сбросим флаг
Gosub Disp                                                  ' преходим к метке

Loop

'*****************************************
Disp:

' инициализируем датчики
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750

1wverify Dsid1(1) : Opr = 0 : Gosub Temperature             ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме

' opr флаг определения в подпрограмме с каким датчиком работаем opr=0 с 1 датчиком opr=1 со вторым
1wverify Dsid2(1) : Opr = 1 : Gosub Temperature             ' проверим на ошубку чтения со 2 датчика и перейдем к подпрограмме

Cls                                                         'очистим дисплей
If Errord1 = 1 Then                                         ' если стоит флаг ошибки
Errord1 = 0                                                 ' сбросим флаг
Lcd "гaїАёє Ѕe ѕoгє»."                                      ' выводим надпись датчик не подключен
Goto Datt2                                                  'переходим к работе с 2 датчиком
Else
Lcd "їeјѕepaї" ; Dat1 ; Chr(0) ; "C"                        ' выводим на дисплей слово температура, знак и значение темп, знак и символ градуса
End If
Datt2:

If Errord2 = 1 Then                                         ' если стоит флаг ошибки
Errord2 = 0                                                 ' сбросим флаг
Locate 2 , 1
Lcd "гaїАёє Ѕe ѕoгє»."                                      ' выводим надпись датчик не подключен
Else
Locate 2 , 1
Lcd "їeјѕepaї" ; Dat2 ; Chr(0) ; "C"                        ' выводим на дисплей слово температура, знак и значение темп, знак и символ градуса
End If

' сравниваем текущую температуру с максимальной и минимальной если изменилось то переписываем
If Dat1 < Tmin1 Then
Tmin1 = Dat1
End If
If Dat1 > Tmax1 Then
Tmax1 = Dat1
End If
If Dat2 < Tmin2 Then
Tmin2 = Dat2
End If
If Dat2 > Tmax2 Then
Tmax2 = Dat2
End If

'проверим установлен ли флаг Prin, если установлен значит прошло прим.  10мин выдаем  в порт текущие максимальные и минимальные температуры

If Prin = 1 Then
Print "текущая температура дом" ; Dat1 ; Chr(0) ; "C"
Print "минимальная" ; Tmin1
Print "максимальная" ; Tmax1
Print "текущая температура улица" ; Dat2 ; Chr(0) ; "C"
Print "минимальная" ; Tmin2
Print "максимальная" ; Tmax2
End If
Return

Temperature:
Disable Interrupts

If Err = 1 Then                                             ' если при опросе появился флаг ошибки тогда
Select Case Opr                                             ' в зависимости от того с каким датчиком работаем ставим ему флаг ошибки
Case 0 : Errord1 = 1
Case 1 : Errord2 = 1
End Select
Return                                                      ' возвращаемся обратно
Else                                                        ' если ошибки небыло тогда работаем с датчиком

1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
End If
If Byte1 >= 248 Then
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Znak = "-"
Else
Znak = "+"
End If
Temp = Byte0 / 16
T = Byte1 * 16
Temp = Temp + T
If Opr = 0 Then
Dat1 = Znak + Str(temp)
Else
Dat2 = Znak + Str(temp)
End If
Enable Interrupts
Return


'***************** обрботчик кнопки по прерыванию INT0 ******************************
'  по нажатию этой кнопки на дисплей будут выводиться максимальная и минимальная температура обоих датчиков
Button:
Cls                                                         ' очистим дисплей
Lcd "MAX" ; Tmax1 ; Chr(0) ; "C"
Locate 1 , 8
Lcd "MIN" ; Tmin1 ; Chr(0) ; "C"
Lowerline
Lcd "MAX" ; Tmax2 ; Chr(0) ; "C"
Locate 2 , 8
Lcd "MIN" ; Tmin2 ; Chr(0) ; "C"
Wait 5                                                      ' отображаем в течении 5 секунд
Return

'************** обработчик кнопки по прерыванию INT1 ******************************
'по нажатию кнопок будет сбрасываться максимальная и минимальная температура, и присвоена текущая
Resbutton:
Tmin1 = Dat1
Tmax1 = Dat1
Tmin2 = Dat2
Tmax2 = Dat2
Return

'****************** обработка прерывания по uart ***************************
Getchar:

Input Rs232
If Rs232 = "temp" Then
Print "текущая температура дом" ; Dat1 ; Chr(0) ; "C"
Print "минимальная" ; Tmin1
Print "максимальная" ; Tmax1
Print "текущая температура улица" ; Dat2 ; Chr(0) ; "C"
Print "минимальная" ; Tmin2
Print "максимальная" ; Tmax2
End If
Return

'****************** обработка перывания от таймера *********************

Tim:

Incr Shethik                                                ' увеличиваем на 1 счетчик прерываний
If Shethik = Geth Then                                      ' сравниваем переменную счетчик с константой
Shethik = 0                                                 ' если равно обнуляем счетчик
Prin = 1                                                    ' ставим флак что произошло сравнение
End If
Return
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

а что это означает?

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

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

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

Сообщение mr4ester »

ну как я понял это поиск датчиков которые висят на линии, это я подсмотрел в нескольких исходниках, если глянуть в хелп то вот что там пишут

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

 W = 1wirecount()

'It is IMPORTANT that the 1wirecount function returns a word/integer

'So the result variable must be of the type word or integer

'But you may assign it to a byte or long too of course

Print W
'as a bonus the next routine :

' first fill the array with an existing number

Reg_no(1) = 1wsearchfirst()

' unremark next line to chance a byte to test the ERR flag

'Reg_no(1) = 2

'now verify if the number exists

1wverify Reg_no(1)

Print Err

'err =1 when the ID passed n reg_no() does NOT exist

' optinal call it with pinnumber line  1wverify reg_no(1),pinb,1

 

'As for the other 1wire statements/functions, you can provide the port and pin number as anoption

'W = 1wirecount(pinb , 1)                                    'for example look at pin PINB.1

End
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Точнее количество датчиков.
Вы привели пример из хелпа.
А самая верхняя строчка:
This statement reads the number of 1wire devices attached to the bus

или Это говорится в заявлении число 1wire устройств, подключенных к шине (переводчик)
Т.е. в Вашем коде она как-бы лишняя. У Вас и так 2 датчика, чё их искать. Но она нам поможет.
Далее:

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

Dsid1(1) = 1wsearchfirst()                                  'Считываем Семейный Код 1 Датчика
Do
Dsid2(1) = 1wsearchnext()                                   ' считываем семейный код 2 датчика
Loop Until Err = 1

первый датчик мы и так находим, а второй будем искать до усёру(извините). Вы-же в цикле, пока не будет 1
Возвращает ERR установлен в 0, когда ID можно найти на автобусе в противном случае он будет 1(перевод)
Вообщем у Вас будут считываться оба датчика. даже если он один.
Меняйте код так:

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

W = 1wirecount()                                          
Dsid1(1) = 1wsearchfirst()                                 
If W > 1 Then Dsid2(1) = 1wsearchnext()

Откоментировать?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Ответить

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