Перейти к содержанию
    

в интернете много реализаций и примеров работы с ds1820... фирмы dalas.... для атмелов.. для stm не видел

 

веду проект на процессоре stm32f051 отладка stm32f0discovery...

 

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

 

сам пока не пробовал браться за реализацию ... может у кого то есть наработки...

 

заранее благодарен за помошь!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно посмотреть здесь:

http://mycontroller.ru/stm32-ds18b20-vvedenie/

и здесь

http://we.easyelectronics.ru/tag/1-Wire/

 

У меня в проектах имеется по нескольку термостатов. Для измерения температуры в них я использую DS18B20.

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

Ещё при использовании MSP430 я пошел другим путём:

- разбил весь алгоритм работы на элементарные функции и задержки между ними,

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно посмотреть здесь:

http://mycontroller.ru/stm32-ds18b20-vvedenie/

и здесь

http://we.easyelectronics.ru/tag/1-Wire/

 

У меня в проектах имеется по нескольку термостатов. Для измерения температуры в них я использую DS18B20.

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

Ещё при использовании MSP430 я пошел другим путём:

- разбил весь алгоритм работы на элементарные функции и задержки между ними,

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

 

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

 

кстати да... освр пользую ... scmRtos...

тоже для себя переделывал благо спецы помогли...

кстати примеры откомпилю и протестирую и выложу результаты...

 

спасибо за помощь... а то с периферией у меня не очень то )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот потому я и не выложил свой вариант - он не подходит для RTOS. Тут правильным решением будет либо реализация на уарте либо на таймере...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой подходит и для RTOS и без неё. Я использую кейловскую https://www.keil.com/demo/eval/rtx.htm. Они заточили исходники под CMSIS и раздают бесплатно:

"This software is provided under a BSD License and can be freely used and distributed."

 

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

 

В MSP430 я не использовал RTOS, а просто в прерывании по таймеру запускал преобразование.

 

Часть данных вместо int обозвано long (в часности измеренная температура). Эти данные могут передаваться из прибора наружу, поэтому, для описания таких данных я использую независящие от разрядности процессора типы.

Для ARM, Cortex - размерность int и long одинакова, поэтому ему пофигу.

При инициализации железа использую StdPeriph_Lib, а в прерываниях, для скорости, заменяю прямым обращением.

ds18b20_STM32F2.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот потому я и не выложил свой вариант - он не подходит для RTOS. Тут правильным решением будет либо реализация на уарте либо на таймере...

 

Уартов всего 2

 

1й на внешний интерфейс

2й зарезервирован... (придется видимо разконсервировать)

 

а в будущем видать программную эмуляцию уарт делать придется ))

 

либо при передаче байта запраещать глобально прерывания...

 

вообще в проекте использую ds2784 (измеритель емкости аккумуляторов + протектор)...

 

есть в принципе еще решение - поставить преобразователь 1Wire<->i2c (ds2483)

 

но очень хотелось бы избавиться от лишнего корпуса....

 

Мой подходит и для RTOS и без неё. Я использую кейловскую https://www.keil.com/demo/eval/rtx.htm. Они заточили исходники под CMSIS и раздают бесплатно:

 

 

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

 

В MSP430 я не использовал RTOS, а просто в прерывании по таймеру запускал преобразование.

 

Часть данных вместо int обозвано long (в часности измеренная температура). Эти данные могут передаваться из прибора наружу, поэтому, для описания таких данных я использую независящие от разрядности процессора типы.

Для ARM, Cortex - размерность int и long одинакова, поэтому ему пофигу.

При инициализации железа использую StdPeriph_Lib, а в прерываниях, для скорости, заменяю прямым обращением.

 

БЛАГОДАРЮ....

КАК РАЗ УСПЕЮ ПОДГОТОВИТЬ ПРОГРАММУ ПЕРЕД ПРИХОДОМ ОТЛАДКИ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

а в будущем видать программную эмуляцию уарт делать придется ))

Что-то у вас всё программно - и i2c и 1-wire и даже UART....

Может полезней будет научиться читать доки на процессоры? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для атмелов.. для stm не видел
потому что так пишут только криворукие начинающие программеры.

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

вся логика 1-wire прекрасно реализуется на стандартном Ansi C, поэтому легко портируется на любую архитектуру, с РТОС или без - неважно.

я так и сделал, с успехом использую одну либу на AVR/STM8/STM32/8051.

есть также неблокирующая модификация под Protothreads - можно работать параллельно с несколькими шинами 1-wire.

Изменено пользователем polyname

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Можно посмотреть пример "правильной" реализации?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

потому что так пишут только криворукие начинающие программеры.

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

вся логика 1-wire прекрасно реализуется на стандартном Ansi C, поэтому легко портируется на любую архитектуру, с РТОС или без - неважно.

я так и сделал, с успехом использую одну либу на AVR/STM8/STM32/8051.

есть также неблокирующая модификация под Protothreads - можно работать параллельно с несколькими шинами 1-wire.

 

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

 

я и не отрицаю что что я начинающий кривоукий программер.... в шапке так и написано

 

для этого и создавался раздел...

 

 

 

Что-то у вас всё программно - и i2c и 1-wire и даже UART....

Может полезней будет научиться читать доки на процессоры? ;)

 

я с дуру прыгнул на новый процессор ... stm32f0xx выпустили только в марте...

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

приходится гланды лечить через задний проход...

 

согласен что при наличии на борту i2c делать программный опрос неразумно

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в интернете про подводные камни этого камня мало чего есть ...
ВОзможно потому, что там нет поводных камней?

 

приходится гланды лечить через задний проход...
Это как? Методом "скачал либу-скомпилил-не работет-ищем другую"? Забудьте про либы, за это время уже можно было прочитать документацию и написать реализацию самостоятельно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ВОзможно потому, что там нет поводных камней?

 

Это как? Методом "скачал либу-скомпилил-не работет-ищем другую"? Забудьте про либы, за это время уже можно было прочитать документацию и написать реализацию самостоятельно.

 

видите ли ... ранее я писал под винду...

 

а там как понимаете или есть библиотека или нет... а самому дрова писать извините - большие сложности

 

видимо проклятая привычка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я с дуру прыгнул на новый процессор ... stm32f0xx выпустили только в марте...

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

Ищите баги в первую очередь у себя... И во-вторую тож.

Мы вот тож делаем разработку на совершенно новом LPC1778 и пока багов в железе не обнаружили ни в i2c ни в SPI ни в UART, DMA, GPIO, CRC, таймерах....

согласен что при наличии на борту i2c делать программный опрос неразумно

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

Ужас просто. Даже аппаратный i2c очень неудобная вещь (по-крайней мере в тех процах, что я имел дело) в плане паразитной загрузки процессора - прерывание на каждый байт, отсутствует DMA и даже FIFO. В моих проектах наибольшую частоту всегда имеет прерывание i2c - в остальных интерфейсах частоту прерываний можно снизить за счёт DMA или FIFO. А большая частота прерываний выливается в непроизводительную загрузку CPU на входы/выходы в ISR (особенно при наличии ОСРВ).

А вы его хотите еще программно делать....

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Ужас просто. Даже аппаратный i2c очень неудобная вещь (по-крайней мере в тех процах, что я имел дело) в плане паразитной загрузки процессора - прерывание на каждый байт, отсутствует DMA и даже FIFO. В моих проектах наибольшую частоту всегда имеет прерывание i2c - в остальных интерфейсах частоту прерываний можно снизить за счёт DMA или FIFO. А большая частота прерываний выливается в непроизводительную загрузку CPU на входы/выходы в ISR (особенно при наличии ОСРВ).

А вы его хотите еще программно делать....

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

 

dma там есть... но я пока боюсь об этом даже задумываться..

 

а то что названия регистров и функций не самокоментирующиеся это факт...

тем более они этот процессор улучшили в плане i2c .. примеры которые компилил для i2c - неработали

но там отладка конечно была другая... но камень то тот же... мне не понятно почему примеры не работали...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...