Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Добрый вечер! Я хочю поиграться с температурным сенсоросм что встроен в stm8l discovery плату. В рефмануале написано что на заводе измеряно выходное напряжение с этого датчика с розрешением АЦП 12 бит и сохранено по адресу TS_Factory_CONV_V90 (один байт, а старшая часть =6). В даташите на контроллер нашел вот этот адрес TS_Factory_CONV_V90=0х4910. В самом отладчике посмотрел да и считывал тоже, но данные по этому адресу =0хFF. В рефмануале также написано что таким же способом измеряно и внутренне опрорное напряжение и тоже сохранено по адресу VREFINT_Factory_CONV=0х4911. У меня это значение тоже равняется 0хFF. У всех так? или я может чт-то с памятью перепутал. Мне что-то не верится чтоб эти велечины были одинаковые. значения с памяти считывал вот так: #define VREFINT (* (char *) 0x4911) u16 temp_=VREFINT; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба наверно volatile char нужно. даже volatile int. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба наверно volatile char нужно. даже volatile int. Делал и так. Все равно 0хFFFF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Вчитался, все же volaile char, сохранен только младший байт. т.е. читать правильней так: u16 temp_=0x600 | VREFINT; Для проверки стоит листинг посмореть, во что оно там компилится. В эррате по этому поводу ничего нет, так что должно работать. Жаль проверить не на чем, одни stm8s-ки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Вчитался, все же volaile char, сохранен только младший байт. т.е. читать правильней так На сколько я понял по этому адресу и есть только один байт. а старшая часть равняется 3. Тоесть мне нужно только один байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 (изменено) · Жалоба Померял температуру датчиком. АЦП использовал 12 бит. Получил значение 0х2А1. Если перещитать в напряжене то это гдето 0,6 В. В рефмануале приводится формула по которой щитать : Т[C]=(VSENSE/AvgSlope)-273.15. и AvgSlope должно быть в V/°K но в даташите на контроллер дается число 1,62 в мВ/С. И тогда получается 600/1,62=370. всетаки наверное 1,62 это в мВ/К отнимаю 370-273=97 С в принципе тоже многовато. Реально ли такое значение или я ошибся в формуле? всетаки написано что датчик меряет тампературу устройства. Интересно этот датчик как переферия контроллера или на плате установлен? Но всеже 100 градусов мне не верится.. (( Изменено 8 июля, 2012 пользователем Kalyan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dejmos 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Сейчас посмотрел на своей 8L - да, там в памяти одни FF'ы. Вообще в даташите сказано что там результат работы ADC, не надо ли его запустить сначала? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Вообще в даташите сказано что там результат работы ADC, не надо ли его запустить сначала? Вы имеете ввиду сконфигурировать на измерение температурного канала, запустить преобразование и посмотреть в пямять? Все равно там FF остаются. Вы пробовали пользоваться этим датчиком? Сколько он вам показывает при комнатной-летней температуре? А то у меня получилось около 100 градусов! :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dejmos 0 8 июля, 2012 Опубликовано 8 июля, 2012 (изменено) · Жалоба Не пробовал, только сейчас заинтересовался. Переписал функцию измерения VRef из примера IAR для STM8L (Просто заменил каналы VRef на TempSensor), ADC_GetConversionValue дает 677. Для нынешней комнатной температуры - вполне может быть. (если формула не та или не так поняли. Проще будет с двумя значениями температуры измерить и посмотреть, но мне сейчас греть и охлаждать лень как-то). А даташит сейчас посмотрел, на 0х4910 - это же вроде Factory conversion registers, т.е. не результат, а просто калибровочные данные? Изменено 8 июля, 2012 пользователем Dejmos Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба ADC_GetConversionValue дает 677. Для нынешней комнатной температуры - вполне может быть. (677*3,6)/4096=0,6 (600/1,62)-273.15=97 С ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dejmos 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Мдя, туплю уже. Ну что пока можно сказать - видимо на заводе эти камни никто не измерял, соответственно придется мерять самим по паре известных температур. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Я эксперементировал с временем выборки. В даташите сказано что она должнеа быть 10 мкс. Я это считал так. Тактовая частота контроллера 16 МГц. 1/16=0.0625 10/0.0625=160. Тоесть это если делитель для АЦП не трогать то надо установить время выборки 160 тактов. Но здесь и получаются вот такие запредельные температуры. Я поставил 16 циклов и температура вышла около 40 градусов, что в принципе более на правду похоже. Как точно пощитать сколько надо циклов задать в настройках чтоб получить время выборки 10 мкс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZiB 0 9 июля, 2012 Опубликовано 9 июля, 2012 · Жалоба Насколько я понял имеется один байт со значением TS_Factory_CONV_V90, предпологается, что старшая часть равна 0x03. Данное значение получено при напряжении питания 3-+10мВ (опорном) и температуре 90-+5 градусов Цельсия. У STM8L151K6 данное значение расположено по адресу 0x004911, в моем мк это значение равно 0x43. Следовательн имеем 0x0343=835, что при указанном опорном около 0,611 В. Если я правильно понял, то далее нам нужно получить второю точку, для этого необходимо получить значение при температуре 25 градусов Цельсия. У меня получилось 0x26C=620, т.е. 0,498В (опорное у меня 3,29В). Используя эти две точки, можно получить наклон и смещение характеристики, что должно повысить точность преобразования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dejmos 0 10 июля, 2012 Опубликовано 10 июля, 2012 · Жалоба Тогда получается что 677 - вполне адекватное значение. Оно в итоге у меня и получалось при любом времени выборки. Но, так как на 8LDiscovery по адресу 0x4911 находятся FF'ы (интересно почему), для расчета температуры придется измерять 2 точки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZiB 0 10 июля, 2012 Опубликовано 10 июля, 2012 · Жалоба Возможно вы неправильно "читате" ? Используйте утилиту для отладки STMStudio (http://www.st.com/internet/evalboard/product/251373.jsp). Только не используйте её для мониторинга ОЗУ и Флеш-памяти ОДНОВРЕМЕННО! Дает сбой, я не уверен, что разработчики знают об ошибке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться