kopalovvp 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба в интернете много реализаций и примеров работы с ds1820... фирмы dalas.... для атмелов.. для stm не видел веду проект на процессоре stm32f051 отладка stm32f0discovery... кто может помочь с программной реализацией... проект должен был сделать (по мнеию начальства) неделю назад... сам пока не пробовал браться за реализацию ... может у кого то есть наработки... заранее благодарен за помошь!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба Можно посмотреть здесь: http://mycontroller.ru/stm32-ds18b20-vvedenie/ и здесь http://we.easyelectronics.ru/tag/1-Wire/ У меня в проектах имеется по нескольку термостатов. Для измерения температуры в них я использую DS18B20. Из-за того, что там надо применять мелкие задержки, то приходится запрещать прерывания, если они используются в программе активно, или если используется операционка. Ещё при использовании MSP430 я пошел другим путём: - разбил весь алгоритм работы на элементарные функции и задержки между ними, - использую прерывание по Compare для вызова этих функций. По вызову прерывания выполняется такая функция, затем в регистр Compare записывается необходимая задержка. Сейчас подготовлю свою реализацию и несколько позже выложу сюда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kopalovvp 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба Можно посмотреть здесь: http://mycontroller.ru/stm32-ds18b20-vvedenie/ и здесь http://we.easyelectronics.ru/tag/1-Wire/ У меня в проектах имеется по нескольку термостатов. Для измерения температуры в них я использую DS18B20. Из-за того, что там надо применять мелкие задержки, то приходится запрещать прерывания, если они используются в программе активно, или если используется операционка. Ещё при использовании MSP430 я пошел другим путём: - разбил весь алгоритм работы на элементарные функции и задержки между ними, - использую прерывание по Compare для вызова этих функций. По вызову прерывания выполняется такая функция, затем в регистр Compare записывается необходимая задержка. Сейчас подготовлю свою реализацию и несколько позже выложу сюда. кстати да... освр пользую ... scmRtos... тоже для себя переделывал благо спецы помогли... кстати примеры откомпилю и протестирую и выложу результаты... спасибо за помощь... а то с периферией у меня не очень то ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kosyak© 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба Вот потому я и не выложил свой вариант - он не подходит для RTOS. Тут правильным решением будет либо реализация на уарте либо на таймере... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба Мой подходит и для 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kopalovvp 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба Вот потому я и не выложил свой вариант - он не подходит для 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, а в прерываниях, для скорости, заменяю прямым обращением. БЛАГОДАРЮ.... КАК РАЗ УСПЕЮ ПОДГОТОВИТЬ ПРОГРАММУ ПЕРЕД ПРИХОДОМ ОТЛАДКИ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба ... а в будущем видать программную эмуляцию уарт делать придется )) Что-то у вас всё программно - и i2c и 1-wire и даже UART.... Может полезней будет научиться читать доки на процессоры? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
polyname 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 (изменено) · Жалоба для атмелов.. для stm не виделпотому что так пишут только криворукие начинающие программеры. правильная реализация - вынос работы с портами и задержки наружу, в пользовательскую библиотеку. вся логика 1-wire прекрасно реализуется на стандартном Ansi C, поэтому легко портируется на любую архитектуру, с РТОС или без - неважно. я так и сделал, с успехом использую одну либу на AVR/STM8/STM32/8051. есть также неблокирующая модификация под Protothreads - можно работать параллельно с несколькими шинами 1-wire. Изменено 4 сентября, 2012 пользователем polyname Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kosyak© 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба правильная реализация - вынос работы с портами и задержки наружу, в пользовательскую библиотеку. Можно посмотреть пример "правильной" реализации? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kopalovvp 0 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба потому что так пишут только криворукие начинающие программеры. правильная реализация - вынос работы с портами и задержки наружу, в пользовательскую библиотеку. вся логика 1-wire прекрасно реализуется на стандартном Ansi C, поэтому легко портируется на любую архитектуру, с РТОС или без - неважно. я так и сделал, с успехом использую одну либу на AVR/STM8/STM32/8051. есть также неблокирующая модификация под Protothreads - можно работать параллельно с несколькими шинами 1-wire. действительно... либу в студию ))) покажите мастеркласс... ))) я и не отрицаю что что я начинающий кривоукий программер.... в шапке так и написано для этого и создавался раздел... Что-то у вас всё программно - и i2c и 1-wire и даже UART.... Может полезней будет научиться читать доки на процессоры? ;) я с дуру прыгнул на новый процессор ... stm32f0xx выпустили только в марте... в интернете про подводные камни этого камня мало чего есть ... приходится гланды лечить через задний проход... согласен что при наличии на борту i2c делать программный опрос неразумно но мне очень понравилась реализация ... обработка идет по каждой ветке ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба в интернете про подводные камни этого камня мало чего есть ...ВОзможно потому, что там нет поводных камней? приходится гланды лечить через задний проход...Это как? Методом "скачал либу-скомпилил-не работет-ищем другую"? Забудьте про либы, за это время уже можно было прочитать документацию и написать реализацию самостоятельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kopalovvp 0 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба ВОзможно потому, что там нет поводных камней? Это как? Методом "скачал либу-скомпилил-не работет-ищем другую"? Забудьте про либы, за это время уже можно было прочитать документацию и написать реализацию самостоятельно. видите ли ... ранее я писал под винду... а там как понимаете или есть библиотека или нет... а самому дрова писать извините - большие сложности видимо проклятая привычка... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба я с дуру прыгнул на новый процессор ... stm32f0xx выпустили только в марте... Ну и что? Это не говорит о том, что производитель не тестирует свои процы. Вероятность того, что вы обнаружите баг проца в мэйн-стрим компонентах (типа i2c или UART которые использует большинство разработчиков) при стандартном использовании этих компонентов, стремится к нулю. Ищите баги в первую очередь у себя... И во-вторую тож. Мы вот тож делаем разработку на совершенно новом LPC1778 и пока багов в железе не обнаружили ни в i2c ни в SPI ни в UART, DMA, GPIO, CRC, таймерах.... согласен что при наличии на борту i2c делать программный опрос неразумно но мне очень понравилась реализация ... обработка идет по каждой ветке ... Ужас просто. Даже аппаратный i2c очень неудобная вещь (по-крайней мере в тех процах, что я имел дело) в плане паразитной загрузки процессора - прерывание на каждый байт, отсутствует DMA и даже FIFO. В моих проектах наибольшую частоту всегда имеет прерывание i2c - в остальных интерфейсах частоту прерываний можно снизить за счёт DMA или FIFO. А большая частота прерываний выливается в непроизводительную загрузку CPU на входы/выходы в ISR (особенно при наличии ОСРВ). А вы его хотите еще программно делать.... Ну конечно если у вас процессору больше нечем заниматься, то пофиг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kopalovvp 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба задачка то простая (вроде бы)... получить в одном протоколе ... пердать в другом... уметь залить конфигурацию через внешний интерфейс и так же сменить ПО через внешний 1wire интерфейс... все упирается в комуникационные интерфейсы... с которыми я не очень то дружу... а без них я так понимаю задач не быват... Ужас просто. Даже аппаратный i2c очень неудобная вещь (по-крайней мере в тех процах, что я имел дело) в плане паразитной загрузки процессора - прерывание на каждый байт, отсутствует DMA и даже FIFO. В моих проектах наибольшую частоту всегда имеет прерывание i2c - в остальных интерфейсах частоту прерываний можно снизить за счёт DMA или FIFO. А большая частота прерываний выливается в непроизводительную загрузку CPU на входы/выходы в ISR (особенно при наличии ОСРВ). А вы его хотите еще программно делать.... Ну конечно если у вас процессору больше нечем заниматься, то пофиг. dma там есть... но я пока боюсь об этом даже задумываться.. а то что названия регистров и функций не самокоментирующиеся это факт... тем более они этот процессор улучшили в плане i2c .. примеры которые компилил для i2c - неработали но там отладка конечно была другая... но камень то тот же... мне не понятно почему примеры не работали... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
protector 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Засекаем время. Через неделю появится топик как же можно без DMA :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться