Jump to content
kostya_unix

Инициализация DS18B20

Recommended Posts

все вопросы снимаются.

покопался в интернете и нашел ответы.

X8 + X5 + X4 + 1 - это число 0х31. и сдвигать нужно влево, проверяя старший бит.

1 - это X0

X8 - отбрасывается, показывает только степень полинома. в данном случае 8 - один байт.

"зеркальное" к нему число 0х8С, с которым сдвиг делается вправо и проверяется младший бит.

 


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

если интересно, то для тебя добавлю:

поскольку из датчика информация идет младшим битом вперед, то и считать контрольную сумму надо начинать с младшего бита.

а это означает, что сдвигать байты нужно вправо и использовать "зеркальное" число.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Экономичные решения МЕAN WELL для надежных разработок» (30.09.2021)

Компания Компэл приглашает 30 сентября на вебинар посвященный экономичным решениям МЕAN WELL. На вебинаре мы рассмотрим, как решения MEAN WELL позволяют сэкономить при выборе недорогого источника питания. Будут представлены основные группы источников питания по конструктивным признакам и по областям применения в контексте их стоимости или их особенностей, позволяющих снизить затраты на электропитание конечного устройства.
Подробнее

14 часа назад, Starichok сказал:

а это означает, что сдвигать байты нужно вправо и использовать "зеркальное" число

При условии использования готовй библиотечной функции для подсчета CRC знать эти тонкости совсем не обязательно.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Модульные RJ-соединители KLS — масштабное пополнение склада Компэл

Продуктовая линейка компании KLS на складе Компэл пополнилась модульными соединителями типа RJ. Ассортимент представлен неэкранированными соединителями RJ11, RJ12 и RJ45 для построения базовых информационных сетей, а также экранированными RJ45 с трансформатором для реализации систем передачи данных между узлами ЛВС.

Подробнее

человек на правильном пути. он нашел библиотеку, но ему интересно знать тонкости.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

Вебинар «Microchip и современный подход к искусственному интеллекту. Разворачиваем нейронную сеть на 32-битном микроконтроллере» (13.10.2021)

Приглашаем всех желающих 13 октября 2021 г. посетить вебинар, посвященный искусственному интеллекту, машинному обучению и решениям для их реализации от Microchip. Современные среды для глубинного обучения нейронных сетей позволяют без детального изучения предмета развернуть искусственную нейронную сеть (ANN) не только на производительных микропроцессорах и ПЛИС, но и на 32-битных микроконтроллерах. А благодаря широкому портфолио Microchip, включающему в себя диапазон компонентов от микроконтроллеров и датчиков до ПЛИС, средств скоростной передачи и хранения информации, возможно решить весь спектр задач, возникающий при обучении, верификации и развёртывании модели ANN.
Подробнее

Здравствуйте @ARV  и @Starichok . Из приведенного Вами примера выше стал изучать указатели.

Еще раз спасибо Вам за участие и помощь.

Хотя по поводу использования локальных переменных в функциях в глобальной видимости пока ничего не нашел. 

В 25.06.2019 в 13:02, kostya_unix сказал:

Или есть другой способ отобразить, в данном случае, возвращаемые данные на LCD_дисплее?

Это по поводу моего вопроса и моих поисков ответа по нему - же.

Share this post


Link to post
Share on other sites

STMicroelectronics: электростатический разряд больше не проблема

Защита от статического электричества необходима каждому современному устройству. Компания STMicroelectronics представляет решения, соответствующие стандарту IEC61000-4-2, а также специальное приложение PROTECTION FINDER, которое поможет легкого и эффективно подобрать необходимые компоненты. Рассмотрим практические примеры защиты от ESD, отраслевые стандарты и ряд ключевых параметров важных при проектировании электростатической защиты устройств.
Подробнее

Только что, kostya_unix сказал:

Хотя по поводу использования локальных переменных в функциях в глобальной видимости пока ничего не нашел

У вас как-то, похоже, перепутано что-то.

Глобальная переменная в модуле видна везде "ниже по тексту". Если эта глобальная переменная описана, как static, она не видна в других модулях нигде, если не описана как static, то линкер найдет её, хотя, вероятно, будет warning (лучше стараться избегать такого путем описания в h-файле этой переменной с префиксом extern, тогда все будет идеально правильно).

Внутри функции вы можете использовать любые видимые переменные, включая локальные. Наружу из функции результат выдается традиционно - возвратом значения функции (при помощи return). Этот самый результат может быть помещен в месте обработки в переменную - локальную или глобальную, в зависимости от необходимости. Поскольку любая обработка ведется внутри другой функции, то жесткого требования для хранения результата в глобальной переменной нет - на ваш выбор. Но, как я уже писал, глобальные переменные - не очень хорошая штука, и, если можно, то лучше их избегать (без фанатизма, конечно).

Я понятно объяснил?


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites
27 минут назад, ARV сказал:

У вас как-то, похоже, перепутано что-то.

Глобальная переменная в модуле видна везде "ниже по тексту". Если эта глобальная переменная описана, как static, она не видна в других модулях нигде, если не описана как static, то линкер найдет её, хотя, вероятно, будет warning (лучше стараться избегать такого путем описания в h-файле этой переменной с префиксом extern, тогда все будет идеально правильно).

Внутри функции вы можете использовать любые видимые переменные, включая локальные. Наружу из функции результат выдается традиционно - возвратом значения функции (при помощи return). Этот самый результат может быть помещен в месте обработки в переменную - локальную или глобальную, в зависимости от необходимости. Поскольку любая обработка ведется внутри другой функции, то жесткого требования для хранения результата в глобальной переменной нет - на ваш выбор. Но, как я уже писал, глобальные переменные - не очень хорошая штука, и, если можно, то лучше их избегать (без фанатизма, конечно).

Я понятно объяснил?

Да @ARV  все понятно. Тем более, что после Вашего предыдущего ответа с примером по преобразованию числового значения в строковое еще раз перечитал по функциям (входящие аргументы, возвращение значения и то что в теле функции можно присвоить возвращающее значение глобальной переменно и при этом не использовать return).

Начал изучать указатели (только пока с большим скрипом в понимании).

И еще. Чем больше читаю как ваши и @Starichok ответы, как у меня в теме, так и в других, тем больше понимаю, что я не знаю в программировании ничего от слова совсем. Но это меня не расстраивает - есть к чему стремится.

Спасибо вам.

 

Share this post


Link to post
Share on other sites

@ARV здравствуйте. В вашем примере выше (вывод строки на дисплей) Вы использовали указатель. Подскажите пожалуйста, в  каких случаях предпочтительнее использовать указатели? 

В случае вывода строки на дисплей - очень удобно ( нет нужды использовать массив).

 

Share this post


Link to post
Share on other sites

Концептуально в Си практически отсутствует разница между массивом и указателем. Во всяком случае для одномерного массива разницы нет вообще, отличаются только формы записи - звездочки для разыменования или квадратные скобки.

Когда вы что-то выводите на дисплей, это "что-то" обязательно лежит в массиве, поэтому вы заблуждаетес, считая, что нужды в нем нет.

Указатель - это адрес начала области памяти, в которой находится что-то полезное. Массив - это область памяти, в которой последовательно размещено несколько одинаковых "полезных" элементов.

Идентификатор (имя) массива - это указатель на его (массива) начало в памяти, что эквивалентно началу нулевого элемента массива.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

есть еще одна принципиальная разница.

когда ты в функцию передаешь какую-то переменную (и массив в том числе), то создается копия этой переменной.

копию ты внутри функции можешь изменять как угодно, но сама переменная при этом остается без изменений.

а если ты в функцию передаешь указатель на ту же переменную, то все изменения переменной внутри функции делаются непосредственно над переменной через ее указатель.

поэтому передача параметра в функцию - дело самого программиста решать, будет ли в функции изменяться параметр (передавать тогда указатель), или же параметр следует сохранять без изменения (передавать копию параметра, а не его указатель).


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites
В 09.06.2019 в 17:09, Starichok сказал:

дело в том, что при отработке паузы с помощью _delay_ms(750) МК больше НИЧЕГО в это время делать не может. это пустая трата процессорного времени.

точнее, МК во время отработки паузы может обрабатывать прерывания.

можно делать такую проверку. а можно и не делать.

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

поэтому я без проверки считываю новую температуру и запускаю новую конвертацию.

что должен делать твой прибор, я не знаю. могу только сказать, что окончательное решение ты должен выбрать сам.

вариантов тут несколько.

1. тупо делать задержку с помощью delay.

2. тупо сидеть в цикле и по кругу проверять на завершение конвертации. этот вариант потребует те же самые 700-750 мс бесполезной потери времени.

3. делать, как я - 1 раз в секунду без проверки считывать новую температуру и запускать новую конвертацию.

может, чья-то фантазия придумает еще другие способы...

 

@Starichok здравствуйте. Сегодня реализовал команды измерения и считывания температуры с датчика через прерывание от Т/С_1. Написал две функции: первая для измерения, вторая для считывания температуры. В обработке таймера, с интервалом примерно в 1 секунду, выполнял операцию XOR над единицей (I ^= 1;). А уже в главном цикле программы, в проверке условия, проверял значение I. Если i==1 тогда функция измерения температуры, иначе считывание. Спасибо Вам за подсказку!

Share this post


Link to post
Share on other sites

ты меня не понял (не совсем понял).

у тебя получилось "через раз". первую секунду запускаешь конвертацию, вторую секунду читаешь температуру.

а у меня это делается КАЖДУЮ секунду. я прочитал температуру, и тут же запускаю конвертацию.

к следующей секунде конвертация уже завершена, и я опять читаю и запускаю...

таким образом, тебе не нужен этот признак работы "через раз". ты тоже можешь делать также - читать и запускать измерение КАЖДУЮ секунду.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

Иными словами нужно так.

10 часов назад, kostya_unix сказал:

В обработке таймера, с интервалом примерно в 1 секунду, выполнял...

установку значения (I=1).

10 часов назад, kostya_unix сказал:

А уже в главном цикле программы, в проверке условия, проверял значение I. Если i==1 тогда...

функция чтения, потом функция запуска измерения и в конце сброс (I=0).

Share this post


Link to post
Share on other sites
7 часов назад, Starichok сказал:

ты меня не понял (не совсем понял).

у тебя получилось "через раз". первую секунду запускаешь конвертацию, вторую секунду читаешь температуру.

а у меня это делается КАЖДУЮ секунду. я прочитал температуру, и тут же запускаю конвертацию.

к следующей секунде конвертация уже завершена, и я опять читаю и запускаю...

таким образом, тебе не нужен этот признак работы "через раз". ты тоже можешь делать также - читать и запускать измерение КАЖДУЮ секунду.

Действительно так ! Прочитали, запустили конвертацию (именно в такой последовательности) и ушли "заниматься" другими, делами. А до следующего обращения к датчику, температура уже будет преобразована и ждать нашей команды считывания.

Дело в том, что первоначально меня смутила задержка между  командами конвертации и считывания температуры. Поэтому алгоритму я и реализовал получение температуры. В Вашем случае, @Starichok , получается более изящно - признаю. 

Подправил свой код по Вашему примеру. Спасибо!

И еще вопрос: критично ли запускать функцию конвертации/считывания непосредственно в обработчике прерывания или лучше использовать действие над переменной ( в обработчике прерывания) и уже исходя из результата обработки переменной выполнять какое либо действие в рабочем цикле программы?

Share this post


Link to post
Share on other sites

протокол обмена с датчиком очень медленный.

только операция инициализации занимает около 1 мс (2 раза по 480 мкс). передача каждого байта занимает около 500 мкс, а передать нужно несколько байтов и прочитать нужно несколько байтов.

вот, смотри сам, последовательность операций у меня такая:

инициализация (1 мс), запрос чтения (2 байта, 1 мс), чтение (2 байта, 1 мс), инициализация (1 мс), запуск конвертации (2 байта, 1 мс).

итого набегает примерно 5 мс. это очень не мало.

строго говоря, "сидеть" в прерывании так много времени не принято.

но я так понял, что твое устройство не критично к потерям времени во время прерывания по таймеру.

я не знаю логику работы твоей программы. я не знаю, с какой периодичностью "крутится" твой главный цикл в ожидании прерывания по таймеру.

повторяю еще раз. у меня самый главный цикл выполняется 1 раз в 1 секунду, поэтому мне не нужна переменная для термометра.

и время таймера у меня в некоторых устройствах равно 1 мс. это нужно для того, чтобы запускать измерения в АЦП и проверять энкодер.

потом программными таймерами время наращивается до 1 секунды, организуя главный цикл программы.

но у меня есть и просто термометр с экраном 1602, где таймер отрабатывает именно 1 секунду, поскольку там нет ни АЦП, ни энкодера - нет ничего, чтобы требовало быструю реакцию на события.

там у меня таймер просто в начало стека помещает адрес начала главного цикла, и больше ничего не делает.

я понимаю, что для простого термометра экран 1602 очень излишен, но у меня осталась плата от другого старого устройства, которая уже была мне не нужна.

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


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

Мне достались , по случаю, несколько приборов безопасности ОНК-160 от автомобильных кранов, так в них стоят ЖКИ MT-20S4M. Четыре строки по 20 символов. Контроллер в нем идентичен с дисплеем 1602. За неимением другого экрана использую его.

1 час назад, Starichok сказал:

но я так понял, что твое устройство не критично к потерям времени во время прерывания по таймеру.

я не знаю логику работы твоей программы. я не знаю, с какой периодичностью "крутится" твой главный цикл в ожидании прерывания по таймеру.

Устройство у меня просто термометр. Но.... Началось вся эта история с термометром , как говорится, с выходом из-за печки. Живу в своем доме, местное отопление (котел, батареи и тому подобное). В один прекрасные день накрылся медным тазом центробежный насос, который гонял воду по батареям. Поставил другой. Так тот другой, на третьей скорости гудит, не сказать что сильно, но ночью , проснувшись слышишь и это мешает. Вставать переключать на 1 скорость нет никакого желания. Так вот собственно и зародилась мысль с помощью терморегулятора переключать, в зависимости от температуры, эти самые скоростя. Скажем от 25 до 40 градусов первая скорость, 40-60 вторая, ну и выше 60 уже третья. Но если температура ниже 20 что бы отключал насос совсем.

Опять же выставлять уставки температурные хочу через кнопки (3 штуки). 25 градусов дошла температура - нажал первую кнопку - значения записались в EEPROM на первую скорость. Дошла температура до второго рубежа - нажал вторую кнопку и т.д. Но с моим навыком и знаниями в пропграммировании понимаю, что без костылей не обойдусь. Зато опыт, какой никакой приобрету.

1 час назад, Starichok сказал:

запускать измерения в АЦП и проверять энкодер

А это в коком устройстве используется? Я с помощью АЦП хочу в дальнейшем сделать управление позиционирования задвижки в котельном оборудовании. Но это пока в далеких мечтах. 

1 час назад, Starichok сказал:

там у меня таймер просто в начало стека помещает адрес начала главного цикла, и больше ничего не делает.

А вот этот момент для меня вообще..... Вообщем понимаю, что я дуб как дерево. Но не боги горшки обжигают - сдюжим и мы. :rolleyes:

Share this post


Link to post
Share on other sites
7 часов назад, kostya_unix сказал:

А это в коком устройстве используется?

на Радио коте есть у меня 2 темы с использованием МК. одна из них есть и здесь, в разделе "Питание". это ЛБП из БП АТХ с цифровым модулем.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

Скачайте себе книгу  по С, очень доходчиво все и с контрольными вопросами Дейтел П.Дж., Дейтел Х.М. Как программировать на С. и Евстифеев микроконтроллеры avr очень все расписано доходчиво, помогут разобраться что к чему.

Share this post


Link to post
Share on other sites
8 hours ago, elki said:

Скачайте себе книгу  по С, очень доходчиво все и с контрольными вопросами Дейтел П.Дж., Дейтел Х.М. Как программировать на С. и Евстифеев микроконтроллеры avr очень все расписано доходчиво, помогут разобраться что к чему.

@elki спасибо. Евстифеева скачал (5-е издание). 

Наверное в книгах есть ответы на многие вопросы. Но ,Вы знаете, живое общение ( а особенно со знающими и , главное, помогающим начинающим (@Starichok ,@ARV  особая благодарность) ) дорогого стоит.

Опять же и Вам @elki  спасибо большое.

Share this post


Link to post
Share on other sites

Живое общение конечно лучше, но книги стоит иметь под рукой, не всегда сразу можно получить ответ на свой вопрос на форуме, иногда приходится долго ждать.

Share this post


Link to post
Share on other sites

Здравствуйте форумчане.При изготовлении одометра столкнулся с проблемой.Устройство на может определить датчик температуры DS18B20.На дисплее прочерки.Подключен датчик по схеме с паразитным питанием.Как не старался не получается.Подключал и по 3-х проводной схеме.Датчик работает в термометре.Схема на Atmega8

Share this post


Link to post
Share on other sites

Зачем рассовываете вопрос по форуму.

На общий вопрос, общий ответ.

Проверяйте монтаж, исправность ноги контроллера.

 

Share this post


Link to post
Share on other sites

И снова здравствуйте. С момента публикации моего последнего комментария прошло 1,5 года. Многое за это время изменилось и в моей жизни (переболел то-ли короной, то-ли гормональный сбой в организме был (еле еле "вычухался")) и в жизни нашей страны.

Хотелось бы уточнить по поводу инициализации DS18B20. Понимаю, что тема избитая, но все же. Может кому ни будь да полезной будет.

Вся эта история началась с невозможности програмно определить присутствие датчика в схеме. По всей видимости (пришлось столкнуться с этим еще раз), проблема была в программе AVRDUDE_PROG. Заметил, что когда установлена галочка в FUSE автоматического программирования, тогда и вылазила проблема с присутствием датчика. А если программировать по отдельности (с начало fuse, а затем programm), то все проходит хорошо.

Всем крепкого здоровья и благополучия.

Share this post


Link to post
Share on other sites

очень вредная функция в твоем программаторе. забудь про нее и никогда не пользуйся.


Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • латр или регулируемый 0...+300в нужен, а накойразвязывающий трансформатор? от чего развязываца?
    • С осликом соглашушь, но ЛАТР не на столько обязателен. Я без него обхожусь Да и у большинства здесь собирающих его нет, как и ослика
    • Рафик правильно говорит. До Навального был например Немцов, он даже фракцию в Думе возглавлял, такая демократия в России была. У них с Хакамадой и реальная программа развития страны была. Налог 13 процентов это они придумали, ЕР позже просто списали эту идею. У сегодняшних партий даже предвыборных программ нет, за исключением КПРФ. Но народ не хотел правых и не голосовал за них. Многие откровенно смеялись над идеями Немцова об господдержке автопрома, сейчас и эта затея использована партией власти и народ её одобряет.  
    • @golcold  Сложно чего посоветовать, не представляя всей конструкции устройства.
    • Чуть меньше 30%.  При этом, что его тогда никто не знал и его рейтинг поднялся с единиц до максимума за месяц дебатов на всего одном канале ТВ, а собянин как заводной участвовал почти во всех телешоу и по всем каналам, нарушая тем самым предвыборную рекламу. С тех пор, с 2013года,  рейтинг Навального сильно возрос, а у путина скатился до 35% по опросу подконтрольной кремлю Леваде. То-есть, на самом деле ещё ниже и  шансов у путина нет даже призрачных. Еще этот низкий рейтинг подтверждает тот факт, что в тех избирательных участках, где был осуществлен контроль, который не смогли сломать, путин собрал по 15- 25%. Такой же результат можно услышать и от знакомых училок, задействованных на голосовании в избирательных участках.  Но после тех выборов 18 года, путин обосрался перед людьми не один раз. Че-то кажется, он не дотянет до 24 года. Война у них там идет. Министра устранили, теперь охрану полностью меняют.
    • Поможет угробить прожектор. Ставьте новые светодиоды.
    • диоды только оставь. Вообще если человек занимается импульсной техникой, ему обязательно нужно ЛАТР и ослик Иа и развязывающий трансформатор. Первый пуск делаешь через ЛАТР и развязывающий трансформатор с пониженным напряжением на вход. Медленно умеличиваю напряжение смотришь осликом на Сток Исток. Если всплески в пределах разумного то оставляешь как есть
×
×
  • Create New...