Перейти к содержанию
    

adnega

Свой
  • Постов

    3 594
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Весь контент adnega


  1. Я считаю, что проблема в части кварца. Конденсаторы, которые к нему подключены должны сидеть на чистой земле. Там, вроде всего одним переходным подключение к полигону земли выполнено. Рекомендую у этого переходного контакт оборвать, а земли кварцев кратчайшим проводником на земляную ногу МК подключить.
  2. Нужно измерять между GNDA и VDDA на пинах МК. Может, фильтр снижает напряжение до 2.5В ? Это еще один повод смотреть на значение питания/опоры. Время сэмплирования выбрано по максимуму? С частотой АЦП все правильно? Реакция на изменение температуры у датчика имеется? Адекватная?
  3. Может температура чипа отличается от 25С? Или питание отличается от 3.3В?
  4. Сталкивался. И отказался т.к. Кста, у более современных чипов есть калибровка, а то и две - там тютелька-в-тютельку.
  5. В профиле Cortex-M, вроде, только LE-порядок байт возможен. Там, где есть реальное железо, и внутреннее представление играет роль - нужно применять конкретику, т.к. на абстракциях уже решать не возможно. Переносимость исходника LE<>BE нужно описывать специальным образом. Можно бороть через расширение длины (типа DWORD some:1), а в тяжелых случаях - через union. С магическими числами нюансов больше. Разве нет? А попробуйте задать не тот номер в define? А попробуйте установить 12 бит, которого в байте просто нет? А если за границу массива после этого вылезли? Нужно помнить размеры всех массивов? А если добавили еще одно поле и размеры массивов стали больше? Все исходники править вручную? В том-то и суть, что имеет место переход от магического числа 12 к названию бита. Это HAND_CUTTER , а с каким он будет номером - все-равно без дополнительной документации смысла не имеет. Применение структур дает еще один существенный плюс, что код получается читаемый. Кста, он в итоге разворачивается в биты и маски, но без использования define. Структуры - очень мощный инструмент, и если его применять, то где, как ни в таких задачах? Упс: тут AVR В пользу чего? И почему? Очень интересно знать.
  6. На уровне SPDR = h.data[pointer]; легко корректируется (т.е. в одном месте конкретного драйвера). Либо на уровне описания структуры. Можно передать хоть через указатель и DMA: структура - это просто память.
  7. Можно всей этой битовой арифметикой не пользоваться, если научиться пользоваться структурами. Примерно так (бит данных 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]; }
  8. Да, но понятие "вероятность" вводится для огромного числа событий. Если у датчика вероятность ложной сработки выше в два раза, то и отвлекать он вас будет в два раза чаще. Если нормами вводится некоторое значение вероятности, но датчик имеет вероятность выше, то требуется устанавливать несколько датчиков. Например, при проектировании пожарной сигнализации несколько датчиков может быть включено в один безадресный шлейф. При сработке любого одного - формируется сигнал "ВНИМАНИЕ", при сработке двух и более - "ПОЖАР" (либо при повторной сработке одного в течение заданного интервала). Опишите более подробно вашу ситуацию.
  9. Точно не знаю, но предположу: - "вероятность ложной тревоги". Вы осуществляете 100 последовательных воздействий на датчик. Получаете 102 сработки. (102 - 100) / 100 = 0.02 - вероятность ложной тревоги; - "вероятность ложной тревоги за период (день, месяц, год)". Вы берете 100 датчиков, за указанный период из них ложно сработают 5. 5 / 100 = 0.05 - вероятность ложной тревоги за период.
  10. Ага. Причем OC_PWM1 и OC_PWM2 отличаются полярностью.
  11. OC_MODE какой? Если PWM1 или PWM2, то будет ШИМ на частоте переполнения; если TOGGLE, то будет меандр на половинной частоте переполнения. У вас OCxM = 011 - TOGGLE; Попробуйте OCxM = 110 или 111 - будет ШИМ.
  12. Где объявлена переменная? uint16_t rxB=0; Если в функции, то не хватает 'static'.
  13. Никто не смешивает. У меня еще и четвертая частота есть, сильно завязанная на третью, - частота развертки изображения.
  14. Кста, датчик оборотов я приводил как пример нетривиального случая. Какую-то часть оборота происходит ускорение, где-то - торможение. Предлагается много вариантов получить одно число: - просто среднее за оборот; - мгновенное с усреднением за некоторый угол; - усредненное за некоторый угол в конкретном положении угла.
  15. Динамический сигнал принято смотреть осциллографом. Мы обсуждаем телепание цифрового индикатора. Например, медленное изменение температуры на 1C за 1 час. Частота изменения крайне низкая. Конкретно этот исходник - для датчика атмосферного давления. Для быстрых измерений нужен осциллограф.
  16. Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности. Если переменная выходит из зоны, то изменение и корректировка центра происходят мгновенно. Нужно только грамотно задать зону нечувствительности.
  17. Третий раз привожу реальный исходник: i = (i / 10) * 75006 / 1000000; if((myabs(adc_press_value - i) > 2) || (adc_press_to > 10000)) { adc_press_value = i; adc_press_to = 0; }
  18. Например, было измерение 5.00+-0.1В, а стало 4.99+-0.1В. Если и в первом и во втором случае на индикаторе будет 5.00, то это с одинаковой вероятностью соответствует истинному значению. С чем не согласны?
  19. Грубо говоря, я готов пожертвовать изменениями в 3 знаке после запятой, но чтобы телепания не было. Процесс медленный, монотонный.
  20. Ага: при медленном увеличении сигнала телепания будут не 2 минуты, а всего одну. Не пойдет.
  21. Озвучьте, пожалуйста, требования к МК, чтоб эту "пушку" содержать. А как сформулировать критерий "годноты" при обучении?
  22. Сейчас попробовал с ESP-07S на разных скоростях - 100% успешно. Пять раз обновил прошивку на скорости 1.5 Мбит/с - ни одного сбоя. Может, в драйверах проблема. У меня Win7_64.
  23. На днях получил такой и такой. Очень удобно прошивать/преднастраивать модуль перед монтажом. На базе CP210x.
  24. Это если без гистерезиса. С гистерезисом будет так (синий график)
  25. Так и делаю ;) Постил на третьей странице. На входе i, на выходе adc_press_value. Таймаут adc_press_to где-то увеличивается в мс. Итого: если переменная не изменилась больше чем на 2 lsb, то меняться будет раз в 10 секунд. Если изменилась более чем на 2 lcb, то обновиться мгновенно. Пользуюсь серийно - юзеры довольны. i = (i / 10) * 75006 / 1000000; if((myabs(adc_press_value - i) > 2) || (adc_press_to > 10000)) { adc_press_value = i; adc_press_to = 0; }
×
×
  • Создать...