Jump to content

    

adnega

Свой
  • Content Count

    2962
  • Joined

  • Last visited

Community Reputation

0 Обычный

About adnega

  • Rank
    Гуру
  • Birthday 05/01/1982

Контакты

  • Сайт
    http://www.grtc.ru
  • ICQ
    231861733

Информация

  • Город
    Ярославль, Россия

Recent Profile Visitors

8440 profile views
  1. Один канал настроить для захвата и перезапуска счета (см. SMCR.TS и SMS). Второй канал настроить на выдачу pwm (см. CCMR). Сам таймер настроить в режиме одиночного импульса (см. CR1.OPM).
  2. Я считаю, что проблема в части кварца. Конденсаторы, которые к нему подключены должны сидеть на чистой земле. Там, вроде всего одним переходным подключение к полигону земли выполнено. Рекомендую у этого переходного контакт оборвать, а земли кварцев кратчайшим проводником на земляную ногу МК подключить.
  3. STM32F103CBT6 Термодатчик

    Нужно измерять между GNDA и VDDA на пинах МК. Может, фильтр снижает напряжение до 2.5В ? Это еще один повод смотреть на значение питания/опоры. Время сэмплирования выбрано по максимуму? С частотой АЦП все правильно? Реакция на изменение температуры у датчика имеется? Адекватная?
  4. STM32F103CBT6 Термодатчик

    Может температура чипа отличается от 25С? Или питание отличается от 3.3В?
  5. STM32F103CBT6 Термодатчик

    Сталкивался. И отказался т.к. Кста, у более современных чипов есть калибровка, а то и две - там тютелька-в-тютельку.
  6. В профиле Cortex-M, вроде, только LE-порядок байт возможен. Там, где есть реальное железо, и внутреннее представление играет роль - нужно применять конкретику, т.к. на абстракциях уже решать не возможно. Переносимость исходника LE<>BE нужно описывать специальным образом. Можно бороть через расширение длины (типа DWORD some:1), а в тяжелых случаях - через union. С магическими числами нюансов больше. Разве нет? А попробуйте задать не тот номер в define? А попробуйте установить 12 бит, которого в байте просто нет? А если за границу массива после этого вылезли? Нужно помнить размеры всех массивов? А если добавили еще одно поле и размеры массивов стали больше? Все исходники править вручную? В том-то и суть, что имеет место переход от магического числа 12 к названию бита. Это HAND_CUTTER , а с каким он будет номером - все-равно без дополнительной документации смысла не имеет. Применение структур дает еще один существенный плюс, что код получается читаемый. Кста, он в итоге разворачивается в биты и маски, но без использования define. Структуры - очень мощный инструмент, и если его применять, то где, как ни в таких задачах? Упс: тут AVR В пользу чего? И почему? Очень интересно знать.
  7. На уровне SPDR = h.data[pointer]; легко корректируется (т.е. в одном месте конкретного драйвера). Либо на уровне описания структуры. Можно передать хоть через указатель и DMA: структура - это просто память.
  8. Можно всей этой битовой арифметикой не пользоваться, если научиться пользоваться структурами. Примерно так (бит данных 16, зачем 3 байта?) Можно легко добавлять, удалять, смещать, менять порядок бит, не навлекая проблем магических чисел. typedef struct s_s { union { BYTE data[3]; struct { BYTE PD_PROTECT:1; //PD PROTECT BYTE HI_TEMP:1; //HI TEMP BYTE HI_CURRENT_PR:1; //HI Current PROTECT BYTE ALARM_ALL:1; //Защита общая BYTE PWR_DN:1; //Провал питания BYTE PWR_UP:1; //Превышеие сети BYTE SHORT_CURCUIT_LED:1; //сигнал КЗ с блока ШИММа BYTE PROTECT_TIME:1; //Задержка таймера ШИМа BYTE AUTO_CUTTER:1; //подключен резак для автоматической резки BYTE KT2_TEN:1; //Термореле тена BYTE KT4_LEVEL:1; //Датчик уровня жидкости BYTE KT3_Water:1; //Датчик потока BYTE HAND_CUTTER:1; //Подключен резак для ручной резки BYTE TRAILER_CUTTER:1; //Концевик BYTE BUTTON_CUTTER:1; //Кнопка плазмотрона BYTE SHORT_CURCUIT:1; //Короткое замыкание BYTE some; }; }; } s_s; s_s h; void foo(void) { h.AUTO_CUTTER = 1; h.BUTTON_CUTTER = 0; SPDR = h.data[pointer]; }
  9. Да, но понятие "вероятность" вводится для огромного числа событий. Если у датчика вероятность ложной сработки выше в два раза, то и отвлекать он вас будет в два раза чаще. Если нормами вводится некоторое значение вероятности, но датчик имеет вероятность выше, то требуется устанавливать несколько датчиков. Например, при проектировании пожарной сигнализации несколько датчиков может быть включено в один безадресный шлейф. При сработке любого одного - формируется сигнал "ВНИМАНИЕ", при сработке двух и более - "ПОЖАР" (либо при повторной сработке одного в течение заданного интервала). Опишите более подробно вашу ситуацию.
  10. Точно не знаю, но предположу: - "вероятность ложной тревоги". Вы осуществляете 100 последовательных воздействий на датчик. Получаете 102 сработки. (102 - 100) / 100 = 0.02 - вероятность ложной тревоги; - "вероятность ложной тревоги за период (день, месяц, год)". Вы берете 100 датчиков, за указанный период из них ложно сработают 5. 5 / 100 = 0.05 - вероятность ложной тревоги за период.
  11. Вопрос по таймерам.

    Ага. Причем OC_PWM1 и OC_PWM2 отличаются полярностью.
  12. Вопрос по таймерам.

    OC_MODE какой? Если PWM1 или PWM2, то будет ШИМ на частоте переполнения; если TOGGLE, то будет меандр на половинной частоте переполнения. У вас OCxM = 011 - TOGGLE; Попробуйте OCxM = 110 или 111 - будет ШИМ.
  13. Где объявлена переменная? uint16_t rxB=0; Если в функции, то не хватает 'static'.
  14. Никто не смешивает. У меня еще и четвертая частота есть, сильно завязанная на третью, - частота развертки изображения.
  15. Кста, датчик оборотов я приводил как пример нетривиального случая. Какую-то часть оборота происходит ускорение, где-то - торможение. Предлагается много вариантов получить одно число: - просто среднее за оборот; - мгновенное с усреднением за некоторый угол; - усредненное за некоторый угол в конкретном положении угла.