Создание собственной системы стабилизации

djdron
oleg70:

Вот расчет:
dT=D2 - (uint32_t)C5<<8; //( dT здесь получается 1700, проверял)

вот здесь еще косяк, не хватает скобочек:
dT=D2 - ((uint32_t)C5<<8);

Drinker:

Камрады, а зачем вы геммороитесь с такими операцыями типа <<8 и >>23? кто мешает нормально делить и перемножать числа как и указано в даташите? Сами себе проблемы ищете.

Или наносекунды экономите?

это касается и возведения в степень

заранее двойку в степень возведите и усе

можно и без << >>, просто это пример из интернета, вот его и разбирали почему не работает

oleg70
Drinker:

с такими операцыями типа <<8 и >>23

В моем случае деление на число=2^23 дает тот же результат…

djdron:

Если “быстро” поправить то можно написать:
MS_temper=((long long)dT*28312)>>23;

К сожалению, Андрей, не прошло и так…
Тут я понял однозначно: компиллер отказывается (?) понимать беззнаковые переменные при операциях деления или сдвига вправо, … он их считает знаковыми, независимо от непосредственного указания типа…
Хотя на сам тип реагирует - “warning”, если ему подсунуть uint16_t на проверку на “<0”…

djdron

не знаю что может быть с кейлом, вроде не должно быть такого, сам пишу в иаре, попробовал в иаре все работает:
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 пишете?

Drinker
oleg70:

MS_temper=((int64_t)dT*28312)>>23; MS_temper выходит -131, хотя должно быть 5…

MS_temper ранее был объявлен как int32_t …почему он вдруг должен стать int64_t ?
И наверное MS_temper = 2000+dT*C6/2^23; Не?

oleg70
djdron:

не знаю что может быть с кейлом

Тут, скорее всего, ключ какой то нужен для компиллера, или еще какая “магия”…
Был удивлен, но : пишу
uint32_t K=57438; при компиляции он мне:
<main.c(78): warning: #68-D: integer conversion resulted in a change of sign>
т.е. он мне “великодушно” решил преобразовать беззнаковую в константу в знаковую (увидел старший бит)…
Не скажу что я программист, STM32 недавно только освоил, но ранее как то не сталкивался с этим (заморочки)…

Drinker:

почему он вдруг должен стать int64_t

произведение двух переменных в скобках больше 32-х разрядов, а они мне все нужны 😃

djdron

напишите вот так, посчитает ли кейл:
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);

oleg70
SergDoc:

дабы простыню не выкладывать

Не работает…
Вопрос снят, всем спасибо (фиг с ним с этим Keil-ом, у меня лимит в 32-Кб все равно уже заканчивается, буду какой нибуть CooCox мучить…)

Drinker
oleg70:

буду какой нибуть CooCox

Велком ту волшебный мир кокоса!

SergDoc
oleg70:

Не работает…

работает - на 103м и 407 точно 😃 и под кеил и под gcc…

oleg70
SergDoc:

работает - на 103м и 407 точно

Спорить не буду, но если интересно, можете посмотреть какие данные выдает датчик температуры MS5611 (в реале при нагреве и охлаждении), не знаю что за глюк, но у меня при <17,4 градуса сразу 22,… (явно в расчете переполнение на 256 ед.),
а так то да, все работает… циферки бегут… и высоту даже можно посчитать… 😃

rual
oleg70:

Вопрос снят, всем спасибо (фиг с ним с этим Keil-ом, у меня лимит в 32-Кб все равно уже заканчивается, буду какой нибуть CooCox мучить…)

Эт не правильно! Кейл отличный компиллер, а вот gcc никаких стандартов не соблюдает, можно в чистом Ц файле объявить переменную внутри кода и тд и тп
По поводу вашей переменной со знаком, компиллер вас предупреждает, что беззнаковая переменная участвует в действиях со знаковыми числами и будет преобразована, у ГЦЦ тут было бы всё шоколадно, но при вычислениях могли половить нереальный глюк. Чтоб предупреждения не выдавалось надо в коде выполнить явное преобразование типа (int32_t)peremennaya.

oleg70:

но у меня при <17,4 градуса сразу 22,… (явно в расчете переполнение на 256 ед.),

это как раз тот глюк о котором выше написано, результат сдвига uint8_t на 8 и более разрядов теряет всю значимую часть, за типами надо следить.

mahowik
oleg70:

буду какой нибуть CooCox мучить…

rual:

Кейл отличный компиллер

Саша, может оно и так. У них компиллер вообще свой?
Но в плане удобности IDE как бы сказать, не в ногу со временем…
Поставил вот сегодня CoIDE-1.7.5 + свежий 4.8 arm-none-eabi тулчейн. Создал новый проект под STM32F407VG, выбрал периферийные модули, закинул сорсы нужные. Готово! Единственное с чем про$%ся это с настройкой клоков, т.к. на дискавери 8мгц, а прописано в системных файлах 25мгц вроде… Кейл тут силен конечно, не знаю каким макаром, но вне зависимости от настроек проекта, чип всегда стартовал на положенных 168мгц…

А вот далее вкусности CoIDE, чего явно Кейлу не хватает на первый взляд:

  • скорость навигации. Кейл мягко говоря тупит на переходах + сами переходы только через контекстное меню, морока… а CoIDE через Ctrl+click прыгает куда надо без пауз…
  • code completion - сила! Вмиг на старте сканит проект и дает подсказки по всем свойствам классов, переменным и дефайнам по ctrl+space…
  • сканит и подсвечивает блоки неактивных дефайн секций
  • организация и менеджмент окон

Был бы он под линукс, ценыБ ему не было 😃

oleg70
mahowik:

не знаю каким макаром

Он (CooCox) генерит свой system_stm32xx,… если сразу поправить, то все работает… (вчера за час “переехал” на него с Keila), да, и в stm32f4xx.h надо не забыть HSE_VALUE исправить…
Порадовала оптимизация GCC, если “переборщить”, то виснет все - к энтой бабушке… 😃

SergDoc
mahowik:

Кейл тут силен конечно, не знаю каким макаром, но вне зависимости от настроек проекта, чип всегда стартовал на положенных 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                     |
  *-----------------------------------------------------------------------------
  *=============================================================================
rual
mahowik:

Саша, может оно и так.

Мне тут важно было: поставил - заработало. Прошивка и отладка - всё работает сразу, без настройки.
насчёт ИДЫ всё верно, никакого особо сервиса… Но вот компиллер мне нравится, хороший код делает. Ну а самое главное для меня кириллические символы в коде, у меня вся внутренняя часть АП и ИНС написана кириллицей, так мне удобней и наглядней, а ГЦЦ кириллицу не понимает…
Линукс пока не актуален, хотя когда от МС останется только Вынь8 и её потомки, придется текать на линукс.

SergDoc

Попробовал Лоитер, тут же у себя во дворе, Ардушники выручайте: в лоитере не держит высоту! В альтхолде держит в лойтере нивкакую - пытается сесть всё время, правда периодически пиликает GPS-Lock может просто тут у меня спутники теряет? подальше уходить куда-то одному не хочется да ещё и без наземки 😦 - хоть ты иди батарейку к ноуту ищи поскорей…

странно 6 спутников всего 😦

mahowik
oleg70:

Он (CooCox) генерит свой system_stm32xx,… если сразу поправить, то все работает… (вчера за час “переехал” на него с Keila), да, и в stm32f4xx.h надо не забыть HSE_VALUE исправить…

SergDoc:

Кеил не при делах, system_stm32f4xx.c рулит

вчера ужо разобался, но пришлось так сказать “погуглить”… если б проц просто не запускался, то все было бы проще, а то блин юарт работает и половина датчиков запускается, через раз при том… 😃

oleg70:

Порадовала оптимизация GCC, если “переборщить”, то виснет все - к энтой бабушке…

ну Кейл кодярник поменьше в полтора раза на выходе выдает при том же уровне оптимизации…

rual:

Мне тут важно было: поставил - заработало. Прошивка и отладка - всё работает сразу, без настройки.

во, CoIDE и это умеет из кароПки, тулчейн только скачать и распаковать.

rual:

так мне удобней и наглядней, а ГЦЦ кириллицу не понимает…

почти уверен, если кодировку в utf-8 перевести/переконвертить, то проблем не будет…

upd: открыл твой проект, который когда то настраивал под coocox, все читается, но да, файлы в utf-8 ранее были переведены…

rual:

Линукс пока не актуален, хотя когда от МС останется только Вынь8 и её потомки, придется текать на линукс.

У меня раз в пол года - в год, приступы перейти на линуХ полностью и вот кажется почти созрел.
Да и потом, сейчас почти все встроенные системы на линуксах. Смарт телики, кофеварки и холодильники скоро подтянутся, хотя и без шуток ужо есть образцы 😃
как раз в тему habrahabr.ru/post/207732/ 😃

Alexey_1811
mahowik:

почти уверен, если кодировку в utf-8 перевести/переконвертить, то проблем не будет…

В utf-8 кириллица нормально отображается.

oleg70

Добил таки MS5611, …
Судя по показаниям, +/- 1метр он способен ловить ?? А то пишут чуть ли не 10 см… (у меня там уже шумы идут)…

SergDoc
oleg70:

Судя по показаниям, +/- 1метр он способен ловить ?? А то пишут чуть ли не 10 см… (у меня там уже шумы идут)…

закрывать паралоном от внешней среды и света - обязательно, так же желательно это всё в коробке!!! в квартире может быть такой разброс ибо давления в помещении могут резко менятся…