Создание собственной системы стабилизации
Вот расчет:
dT=D2 - (uint32_t)C5<<8; //( dT здесь получается 1700, проверял)
вот здесь еще косяк, не хватает скобочек:
dT=D2 - ((uint32_t)C5<<8);
Камрады, а зачем вы геммороитесь с такими операцыями типа <<8 и >>23? кто мешает нормально делить и перемножать числа как и указано в даташите? Сами себе проблемы ищете.
Или наносекунды экономите?
это касается и возведения в степень
заранее двойку в степень возведите и усе
можно и без << >>, просто это пример из интернета, вот его и разбирали почему не работает
с такими операцыями типа <<8 и >>23
В моем случае деление на число=2^23 дает тот же результат…
Если “быстро” поправить то можно написать:
MS_temper=((long long)dT*28312)>>23;
К сожалению, Андрей, не прошло и так…
Тут я понял однозначно: компиллер отказывается (?) понимать беззнаковые переменные при операциях деления или сдвига вправо, … он их считает знаковыми, независимо от непосредственного указания типа…
Хотя на сам тип реагирует - “warning”, если ему подсунуть uint16_t на проверку на “<0”…
не знаю что может быть с кейлом, вроде не должно быть такого, сам пишу в иаре, попробовал в иаре все работает:
unsigned short int C5 = 33464;
unsigned short int C6 = 28312;
unsigned int D2 = 16777215;
signed int dT = D2 - ((unsigned int)C5<<8);
signed int TEMP = 2000 + (((long long)dT*C6)>>23);
под ARM пишете?
MS_temper=((int64_t)dT*28312)>>23; MS_temper выходит -131, хотя должно быть 5…
MS_temper ранее был объявлен как int32_t …почему он вдруг должен стать int64_t ?
И наверное MS_temper = 2000+dT*C6/2^23; Не?
не знаю что может быть с кейлом
Тут, скорее всего, ключ какой то нужен для компиллера, или еще какая “магия”…
Был удивлен, но : пишу
uint32_t K=57438; при компиляции он мне:
<main.c(78): warning: #68-D: integer conversion resulted in a change of sign>
т.е. он мне “великодушно” решил преобразовать беззнаковую в константу в знаковую (увидел старший бит)…
Не скажу что я программист, STM32 недавно только освоил, но ранее как то не сталкивался с этим (заморочки)…
почему он вдруг должен стать int64_t
произведение двух переменных в скобках больше 32-х разрядов, а они мне все нужны 😃…
напишите вот так, посчитает ли кейл:
unsigned short int C5 = 33464;
unsigned short int C6 = 28312;
unsigned int D2 = 16777216;
signed int dT = D2 - ((unsigned int)C5<<8);
signed int TEMP = 2000 + (((long long)dT*C6)>>23);
дабы простыню не выкладывать, вот рабочий драйвер github.com/SergDoc/…/drv_ms5611.c
дабы простыню не выкладывать
Не работает…
Вопрос снят, всем спасибо (фиг с ним с этим Keil-ом, у меня лимит в 32-Кб все равно уже заканчивается, буду какой нибуть CooCox мучить…)
буду какой нибуть CooCox
Велком ту волшебный мир кокоса!
Не работает…
работает - на 103м и 407 точно 😃 и под кеил и под gcc…
работает - на 103м и 407 точно
Спорить не буду, но если интересно, можете посмотреть какие данные выдает датчик температуры MS5611 (в реале при нагреве и охлаждении), не знаю что за глюк, но у меня при <17,4 градуса сразу 22,… (явно в расчете переполнение на 256 ед.),
а так то да, все работает… циферки бегут… и высоту даже можно посчитать… 😃
Вопрос снят, всем спасибо (фиг с ним с этим Keil-ом, у меня лимит в 32-Кб все равно уже заканчивается, буду какой нибуть CooCox мучить…)
Эт не правильно! Кейл отличный компиллер, а вот gcc никаких стандартов не соблюдает, можно в чистом Ц файле объявить переменную внутри кода и тд и тп
По поводу вашей переменной со знаком, компиллер вас предупреждает, что беззнаковая переменная участвует в действиях со знаковыми числами и будет преобразована, у ГЦЦ тут было бы всё шоколадно, но при вычислениях могли половить нереальный глюк. Чтоб предупреждения не выдавалось надо в коде выполнить явное преобразование типа (int32_t)peremennaya.
но у меня при <17,4 градуса сразу 22,… (явно в расчете переполнение на 256 ед.),
это как раз тот глюк о котором выше написано, результат сдвига uint8_t на 8 и более разрядов теряет всю значимую часть, за типами надо следить.
буду какой нибуть CooCox мучить…
Кейл отличный компиллер
Саша, может оно и так. У них компиллер вообще свой?
Но в плане удобности IDE как бы сказать, не в ногу со временем…
Поставил вот сегодня CoIDE-1.7.5 + свежий 4.8 arm-none-eabi тулчейн. Создал новый проект под STM32F407VG, выбрал периферийные модули, закинул сорсы нужные. Готово! Единственное с чем про$%ся это с настройкой клоков, т.к. на дискавери 8мгц, а прописано в системных файлах 25мгц вроде… Кейл тут силен конечно, не знаю каким макаром, но вне зависимости от настроек проекта, чип всегда стартовал на положенных 168мгц…
А вот далее вкусности CoIDE, чего явно Кейлу не хватает на первый взляд:
- скорость навигации. Кейл мягко говоря тупит на переходах + сами переходы только через контекстное меню, морока… а CoIDE через Ctrl+click прыгает куда надо без пауз…
- code completion - сила! Вмиг на старте сканит проект и дает подсказки по всем свойствам классов, переменным и дефайнам по ctrl+space…
- сканит и подсвечивает блоки неактивных дефайн секций
- организация и менеджмент окон
Был бы он под линукс, ценыБ ему не было 😃
не знаю каким макаром
Он (CooCox) генерит свой system_stm32xx,… если сразу поправить, то все работает… (вчера за час “переехал” на него с Keila), да, и в stm32f4xx.h надо не забыть HSE_VALUE исправить…
Порадовала оптимизация GCC, если “переборщить”, то виснет все - к энтой бабушке… 😃
Кейл тут силен конечно, не знаю каким макаром, но вне зависимости от настроек проекта, чип всегда стартовал на положенных 168мгц…
Кеил не при делах, system_stm32f4xx.c рулит 😃
* 5. This file configures the system clock as follows:
*=============================================================================
*=============================================================================
* Supported STM32F4xx device revision | Rev A
*-----------------------------------------------------------------------------
* System Clock source | PLL (HSE)
*-----------------------------------------------------------------------------
* SYSCLK(Hz) | 168000000
*-----------------------------------------------------------------------------
* HCLK(Hz) | 168000000
*-----------------------------------------------------------------------------
* AHB Prescaler | 1
*-----------------------------------------------------------------------------
* APB1 Prescaler | 4
*-----------------------------------------------------------------------------
* APB2 Prescaler | 2
*-----------------------------------------------------------------------------
* HSE Frequency(Hz) | 8000000
*-----------------------------------------------------------------------------
* PLL_M | 8
*-----------------------------------------------------------------------------
* PLL_N | 336
*-----------------------------------------------------------------------------
* PLL_P | 2
*-----------------------------------------------------------------------------
* PLL_Q | 7
*-----------------------------------------------------------------------------
* PLLI2S_N | NA
*-----------------------------------------------------------------------------
* PLLI2S_R | NA
*-----------------------------------------------------------------------------
* I2S input clock | NA
*-----------------------------------------------------------------------------
* VDD(V) | 3.3
*-----------------------------------------------------------------------------
* Main regulator output voltage | Scale1 mode
*-----------------------------------------------------------------------------
* Flash Latency(WS) | 5
*-----------------------------------------------------------------------------
* Prefetch Buffer | OFF
*-----------------------------------------------------------------------------
* Instruction cache | ON
*-----------------------------------------------------------------------------
* Data cache | ON
*-----------------------------------------------------------------------------
* Require 48MHz for USB OTG FS, | Disabled
* SDIO and RNG clock |
*-----------------------------------------------------------------------------
*=============================================================================
Саша, может оно и так.
Мне тут важно было: поставил - заработало. Прошивка и отладка - всё работает сразу, без настройки.
насчёт ИДЫ всё верно, никакого особо сервиса… Но вот компиллер мне нравится, хороший код делает. Ну а самое главное для меня кириллические символы в коде, у меня вся внутренняя часть АП и ИНС написана кириллицей, так мне удобней и наглядней, а ГЦЦ кириллицу не понимает…
Линукс пока не актуален, хотя когда от МС останется только Вынь8 и её потомки, придется текать на линукс.
Попробовал Лоитер, тут же у себя во дворе, Ардушники выручайте: в лоитере не держит высоту! В альтхолде держит в лойтере нивкакую - пытается сесть всё время, правда периодически пиликает GPS-Lock может просто тут у меня спутники теряет? подальше уходить куда-то одному не хочется да ещё и без наземки 😦 - хоть ты иди батарейку к ноуту ищи поскорей…
странно 6 спутников всего 😦
Он (CooCox) генерит свой system_stm32xx,… если сразу поправить, то все работает… (вчера за час “переехал” на него с Keila), да, и в stm32f4xx.h надо не забыть HSE_VALUE исправить…
Кеил не при делах, system_stm32f4xx.c рулит
вчера ужо разобался, но пришлось так сказать “погуглить”… если б проц просто не запускался, то все было бы проще, а то блин юарт работает и половина датчиков запускается, через раз при том… 😃
Порадовала оптимизация GCC, если “переборщить”, то виснет все - к энтой бабушке…
ну Кейл кодярник поменьше в полтора раза на выходе выдает при том же уровне оптимизации…
Мне тут важно было: поставил - заработало. Прошивка и отладка - всё работает сразу, без настройки.
во, CoIDE и это умеет из кароПки, тулчейн только скачать и распаковать.
так мне удобней и наглядней, а ГЦЦ кириллицу не понимает…
почти уверен, если кодировку в utf-8 перевести/переконвертить, то проблем не будет…
upd: открыл твой проект, который когда то настраивал под coocox, все читается, но да, файлы в utf-8 ранее были переведены…
Линукс пока не актуален, хотя когда от МС останется только Вынь8 и её потомки, придется текать на линукс.
У меня раз в пол года - в год, приступы перейти на линуХ полностью и вот кажется почти созрел.
Да и потом, сейчас почти все встроенные системы на линуксах. Смарт телики, кофеварки и холодильники скоро подтянутся, хотя и без шуток ужо есть образцы 😃
как раз в тему habrahabr.ru/post/207732/ 😃
почти уверен, если кодировку в utf-8 перевести/переконвертить, то проблем не будет…
В utf-8 кириллица нормально отображается.
Добил таки MS5611, …
Судя по показаниям, +/- 1метр он способен ловить ?? А то пишут чуть ли не 10 см… (у меня там уже шумы идут)…
Судя по показаниям, +/- 1метр он способен ловить ?? А то пишут чуть ли не 10 см… (у меня там уже шумы идут)…
закрывать паралоном от внешней среды и света - обязательно, так же желательно это всё в коробке!!! в квартире может быть такой разброс ибо давления в помещении могут резко менятся…