реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32f0xx + one wire, хочу реализовать программно... нужна помощь специалистов...
Посторонним В...
сообщение Sep 4 2012, 02:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



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

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

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

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

заранее благодарен за помошь!!!
Go to the top of the page
 
+Quote Post
VAI
сообщение Sep 4 2012, 04:56
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Можно посмотреть здесь:
http://mycontroller.ru/stm32-ds18b20-vvedenie/
и здесь
http://we.easyelectronics.ru/tag/1-Wire/

У меня в проектах имеется по нескольку термостатов. Для измерения температуры в них я использую DS18B20.
Из-за того, что там надо применять мелкие задержки, то приходится запрещать прерывания, если они используются в программе активно, или если используется операционка.
Ещё при использовании MSP430 я пошел другим путём:
- разбил весь алгоритм работы на элементарные функции и задержки между ними,
- использую прерывание по Compare для вызова этих функций. По вызову прерывания выполняется такая функция, затем в регистр Compare записывается необходимая задержка.

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


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 4 2012, 05:38
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(VAI @ Sep 4 2012, 05:56) *
Можно посмотреть здесь:
http://mycontroller.ru/stm32-ds18b20-vvedenie/
и здесь
http://we.easyelectronics.ru/tag/1-Wire/

У меня в проектах имеется по нескольку термостатов. Для измерения температуры в них я использую DS18B20.
Из-за того, что там надо применять мелкие задержки, то приходится запрещать прерывания, если они используются в программе активно, или если используется операционка.
Ещё при использовании MSP430 я пошел другим путём:
- разбил весь алгоритм работы на элементарные функции и задержки между ними,
- использую прерывание по Compare для вызова этих функций. По вызову прерывания выполняется такая функция, затем в регистр Compare записывается необходимая задержка.

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


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

спасибо за помощь... а то с периферией у меня не очень то )))
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Sep 4 2012, 05:41
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Вот потому я и не выложил свой вариант - он не подходит для RTOS. Тут правильным решением будет либо реализация на уарте либо на таймере...
Go to the top of the page
 
+Quote Post
VAI
сообщение Sep 4 2012, 07:28
Сообщение #5


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Мой подходит и для 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 ( 36.77 килобайт ) Кол-во скачиваний: 323
 


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 4 2012, 08:28
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(kosyak© @ Sep 4 2012, 06:41) *
Вот потому я и не выложил свой вариант - он не подходит для RTOS. Тут правильным решением будет либо реализация на уарте либо на таймере...


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

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

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

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

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

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

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

Цитата(VAI @ Sep 4 2012, 08:28) *
Мой подходит и для RTOS и без неё. Я использую кейловскую https://www.keil.com/demo/eval/rtx.htm. Они заточили исходники под CMSIS и раздают бесплатно:


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

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

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


БЛАГОДАРЮ....
КАК РАЗ УСПЕЮ ПОДГОТОВИТЬ ПРОГРАММУ ПЕРЕД ПРИХОДОМ ОТЛАДКИ...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 4 2012, 14:25
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Посторонним В... @ Sep 4 2012, 14:28) *
...
а в будущем видать программную эмуляцию уарт делать придется ))

Что-то у вас всё программно - и i2c и 1-wire и даже UART....
Может полезней будет научиться читать доки на процессоры? wink.gif
Go to the top of the page
 
+Quote Post
polyname
сообщение Sep 4 2012, 15:29
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 18-05-12
Пользователь №: 71 915



Цитата
для атмелов.. для stm не видел
потому что так пишут только криворукие начинающие программеры.
правильная реализация - вынос работы с портами и задержки наружу, в пользовательскую библиотеку.
вся логика 1-wire прекрасно реализуется на стандартном Ansi C, поэтому легко портируется на любую архитектуру, с РТОС или без - неважно.
я так и сделал, с успехом использую одну либу на AVR/STM8/STM32/8051.
есть также неблокирующая модификация под Protothreads - можно работать параллельно с несколькими шинами 1-wire.

Сообщение отредактировал polyname - Sep 4 2012, 15:31
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Sep 4 2012, 18:03
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Цитата(polyname @ Sep 4 2012, 19:29) *
правильная реализация - вынос работы с портами и задержки наружу, в пользовательскую библиотеку.

Можно посмотреть пример "правильной" реализации?
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 5 2012, 04:37
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(polyname @ Sep 4 2012, 16:29) *
потому что так пишут только криворукие начинающие программеры.
правильная реализация - вынос работы с портами и задержки наружу, в пользовательскую библиотеку.
вся логика 1-wire прекрасно реализуется на стандартном Ansi C, поэтому легко портируется на любую архитектуру, с РТОС или без - неважно.
я так и сделал, с успехом использую одну либу на AVR/STM8/STM32/8051.
есть также неблокирующая модификация под Protothreads - можно работать параллельно с несколькими шинами 1-wire.


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

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

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



Цитата(jcxz @ Sep 4 2012, 15:25) *
Что-то у вас всё программно - и i2c и 1-wire и даже UART....
Может полезней будет научиться читать доки на процессоры? wink.gif


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

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

но мне очень понравилась реализация ... обработка идет по каждой ветке ...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 5 2012, 05:47
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Посторонним В... @ Sep 5 2012, 07:37) *
в интернете про подводные камни этого камня мало чего есть ...
ВОзможно потому, что там нет поводных камней?

QUOTE (Посторонним В... @ Sep 5 2012, 07:37) *
приходится гланды лечить через задний проход...
Это как? Методом "скачал либу-скомпилил-не работет-ищем другую"? Забудьте про либы, за это время уже можно было прочитать документацию и написать реализацию самостоятельно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 5 2012, 09:27
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



Цитата(Сергей Борщ @ Sep 5 2012, 06:47) *
ВОзможно потому, что там нет поводных камней?

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


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

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

видимо проклятая привычка...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 5 2012, 14:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Посторонним В... @ Sep 5 2012, 10:37) *
я с дуру прыгнул на новый процессор ... stm32f0xx выпустили только в марте...

Ну и что? Это не говорит о том, что производитель не тестирует свои процы. Вероятность того, что вы обнаружите баг проца в мэйн-стрим компонентах (типа i2c или UART которые использует большинство разработчиков) при стандартном использовании этих компонентов, стремится к нулю.
Ищите баги в первую очередь у себя... И во-вторую тож.
Мы вот тож делаем разработку на совершенно новом LPC1778 и пока багов в железе не обнаружили ни в i2c ни в SPI ни в UART, DMA, GPIO, CRC, таймерах....
Цитата(Посторонним В... @ Sep 5 2012, 10:37) *
согласен что при наличии на борту i2c делать программный опрос неразумно
но мне очень понравилась реализация ... обработка идет по каждой ветке ...

Ужас просто. Даже аппаратный i2c очень неудобная вещь (по-крайней мере в тех процах, что я имел дело) в плане паразитной загрузки процессора - прерывание на каждый байт, отсутствует DMA и даже FIFO. В моих проектах наибольшую частоту всегда имеет прерывание i2c - в остальных интерфейсах частоту прерываний можно снизить за счёт DMA или FIFO. А большая частота прерываний выливается в непроизводительную загрузку CPU на входы/выходы в ISR (особенно при наличии ОСРВ).
А вы его хотите еще программно делать....
Ну конечно если у вас процессору больше нечем заниматься, то пофиг.
Go to the top of the page
 
+Quote Post
Посторонним В...
сообщение Sep 6 2012, 03:15
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 2-08-12
Пользователь №: 72 984



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

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


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

а то что названия регистров и функций не самокоментирующиеся это факт...
тем более они этот процессор улучшили в плане i2c .. примеры которые компилил для i2c - неработали
но там отладка конечно была другая... но камень то тот же... мне не понятно почему примеры не работали...
Go to the top of the page
 
+Quote Post
Alexey K
сообщение Sep 6 2012, 16:20
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220



Засекаем время. Через неделю появится топик как же можно без DMA sm.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 03:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.02264 секунд с 7
ELECTRONIX ©2004-2016