Заголовок сообщения: DS18B20 не определяется первый датчик в массиве
Добавлено: Вс сен 19, 2021 17:03:34
Родился
Зарегистрирован: Вс сен 19, 2021 16:50:36 Сообщений: 7
Рейтинг сообщения:0
Доброго дня всем.
На днях столкнулся с не приятностью. Подключил датчики DS18B20 параллельно (3 шт.) и прописал поиск w1_search. Поиск показывает 3 устройства. Начинаю читать и тут прикол... Первый датчик выдает белеберду а остальные текущую температуру. Убрал датчик косячный, остались нормальные. Включаю и находится 2 шт. отлично но читается с первого датчика тоже самое. Но он то целый!!! (((
Ух сколько много скачали. В общем это цена за бесплатный компилятор. Проблема в функции w1_read(), которая, к сожалению, куда-то уходит в cvavr_Final_Crack.exe.
Вот проект, собранный в версии 2.05.0, только не вздумайте пересобрать
Стопудово проблема в функции w1_search. Как вообще 1-wire реализовано? На таймере с прерываниями или на UART с прерываниями?
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
Добавлено: Пн сен 20, 2021 22:00:29
Родился
Зарегистрирован: Вс сен 19, 2021 16:50:36 Сообщений: 7
Рейтинг сообщения:0
Не поверите!!! Нашел косяк и он в компиляторе. Поменяйте две строчки местами и о чудо, заработало!!!! Но пропадает вторая строка LCD unsigned char lcd_buf[16], lcd_buf1[16]; unsigned char rom_code[MAX_DEVICES][9];
Перенос переменной из глобал в локал (unsigned char rom_code[MAX_DEVICES][9];) Соблюдается очередность и вторая строка появляется на LCD.... Разработчики прикольнулись
И не важно это 3,12 или 2,05 везде одинаково!!! Убил весь вечер на поиски истины Миссия выполнена
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Да совершенно верно. Две переменные были объединены и получили один массив регистров. А у контроллера видимо нет проверки соблюдения распределения регистров. Поэтому он наезжал на следущий регистр при записи текста в регистр lcd_buf. Я программист промышленных плк. И у промышленных плк такое возможно когда используешь память косвенно на заранее распределенную память или меркеры памяти которые уже представлены в виде готового набора регистров.
Перенос на локалку, сожрало следующие регистры, поэтому и появилась вторая строка.
Добавлено after 23 minutes 27 seconds: Скорее всего это касается настроек компелятора. Будет время поковыряю его.
Добавлено after 48 minutes 44 seconds: Если не мучаться то расширить массив lcd_buf до 32 символов ну или сидеть и считать динамические данные чтоб не прыгнуть на соседний регистр)))
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения