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

adnega

Свой
  • Постов

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

  • Посещение

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

    3

Сообщения, опубликованные adnega


  1. TXE, - передающий буфер пустой (TX empty)

    RXNE, - приемный буфер не пустой (RX not empty)

     

    ИМХО эти флаги должны выставляться одновременно.

     

    Вы пихаете что-то в ТХ, и стираете RХ, как только TX уйдет, RX наполниться и оба флага должны появиться...

     

    Есть возможно малюсенькая задержка между появлением RX и уходом данных из ТХ в которую вы иногда попадали...

    Советую повнимательнее почитать документацию.

    В начальный момент, когда нет передаваемых данных выставлен TXE.

    Записываем в DR данные, TXE сбрасывается и через такт устанавливается, т.к. данные из буферного регистра копируются в передатчик и буферный регистр снова свободен. При этом RXNE установится только после приема первого байта причем в момент защелкивания последнего бита. Для побайтовой передачи считаю этот момент существенным. При непрерывной передаче RXNE появляется на один такт раньше, чем TXE. Картинки есть в UM.

  2. Судя по всему, имеет место грамотный подбор ролика для демонстрации :) Почти статичная картинка, минимум движения, так что проблемы воспроизведения не очень сильно заметны.

    На реальном ролике картинка рвется при сильном движении (15fps без вертикальной синхронизации). Но каждый кадр распаковывается по-честному.

  3. Ферритовая бусина(bead)- это малая индуктивность с большими потерями, поэтому энергия помехи в значительной степени превращается в тепло, не путайте человека.

    Если уж быть совсем точным, то я писал что L и C не влияют. Насчет бусин отмолчусь, ибо в цепях защиты НЧ сигналов их не видел. Удобный механизм создать L на ножке транзистора/диода - да, уменьшить излучения на сотнях мегагерц - да, но как преобразователь внешней помехи в тепло... не убедительно. Греться должны резисторы. Но даже при Вашей абсолютной правоте, что делать со смещением земли? Бусина от этого не спасает.

    Я бы в случае, если простая схема не будет работать посоветовал еще 2 варианта:

    1. Вероятно нагрузками будет рулить тот же контроллер. Можно синхронизировать управление нарузкой и момент выборки АЦП (когда переходный процесс устаканится).

    2. Запитать датчик повышенным напряжением. Сигнал с датчика подавать на МК через дополнительный резистивный делитель и схемы защиты (конденсоторы, стабилитроны и т.п.)

     

    Вообще, вопрос защиты от помех лучше обсуждать, когда известен характер и уровень помехи. Все остальное шаманство: решение может хорошо защищать от одних помех, а другие помехи могут сделать его нерабочим (вплоть до всего устройства). Некоторые помехи могут вообще препятствовать нормальной работе схемы, тут бусинами не обойдешься, и нужен матан, те же усреднения:)

  4. К сожалению, пока не понимаю, какие она может создать проблемы на "земле" контроллера, кроме изменения уровня входного сигнала...

    Разговор не про землю контроллера. Допустим возникла некая помеха так, что на левом контакте L появилось -X Вольт относительно GND. С резистивного делителя на вход АЦП попадает уровень, который ниже GND. Разве нет? Это раз.

    Контур "GND"-"нижний L"-"провода к датчику"-"датчик"-"провода от датчика"-"верхний L"-"С на GND" образуют LC-контур со своими резонансной частотой и добротностью. Сегодня в качестве датчика у Вас резистор и добротность никакая, завтра там может оказаться что-то низкоомное (на резонансной частоте) и все дело начнет "звенеть" (L и C сейчас делают хорошо, паразитные параметры маленькие, поэтому добротность можно получить высокую).

    Я бы убрал L с земли. L на питании заменил на низкоомный резистор. Конструктивно организовал трассы к датчику с минимальной площадью контуров.

    В следующей иттерации боролся с тем, что появится (если появится).

    Кста, L и C ничего не делают с энергией помехи. Да, форма меняется, скорость изменения напряжения уменьшается, но саму помеху нужно либо "сливать", либо обращать в тепло, либо "душить" в месте возникновения.

  5. Если помеха будет с постоянной , то бусинка на GND - нехорошо, т.к. сместится уровень входного сигнала.

    "Неоднозначная" земля что для постоянной, что для однократной помехи плохо не столько в метрологическом плане, сколько в плане выживания.

    Например, на вход может попасть уровень значительно ниже земли, а для некоторых это грозит защелкиванием в КЗ по питанию (особенно STM32).

    Обычно с помехами борются в месте их возникновения, а схему защищают от губительного воздействия и проектируют с учетом возможных путей тока.

    Есть классическая статья на эту тему (Алексей Кузнецов. "Помехоустойчивые устройства").

  6. Если используется FSMC, то для программиста обращение к памяти полностью прозрачное. Т.е. как к обычной встроенной SRAM.

    Если будете подключать NAND, то нужен софтовый драйвер, т.к. цикл обращения к данным сложный.

  7. Что-то я совсем запуталась в этих таймерах, частоте тактирования... В примерах вижу таймеры с номерами 15 и 16, лезу в MicroXplorer - там для 103 серии выше 14 номера нет...

     

    В общем точное ТЗ такое:

    Нужно получить на одной ноге 36Мгц, на другой тоже 36 Мгц, той же полярности, но с задержкой (я вычитала про deadtime, и поняла, что мне это нужно)

     

    Какой таймер, в каком режиме нужно запустить? Имеется ли таймер с такими возможностями в 100 ногой линейке F103.

     

    И еще - во всех примерах таймера почему-то тактируются от 24 МГц. Как же мне получить 36 МГц?

     

    Подскажите пожалуйста.

    Зачем ориентироваться на примеры? Таймеры вполне хорошо описаны в RM. С диаграммами.

    Прочитать и все станет ясно.

    Deadtime отсчитывается в единицах тактовой частоты, т.е. при 36МГц deadtime теряет смысл.

  8. А вот запросто может быть, что он просто получился кривым и глюкавым, что о нём поспешили забыть и заменить его на те же F031 или на F051 ..

    Проц, как проц.

    Просто, сейчас его называют по-другому.

    Новость уже обсуждали тут (http://www.compel.ru/2014/05/29/pereimenovanie-mikrokontrollerov-stm32f0-i-stm32f3/).

    Обычно кривость наблюдается у программиста, "особенности" чипа описаны в специальном документе.

    Сомнительно, что такой явный и повторяемый баг туда не попал.

  9. И что ученые мужи посоветуют в этой ситуации?

    а что вы имеете ввиду под "ногодрыг"?

    1. Заменить процессор на по-новее с FSMC (типа 407).

    2. Если скорость обмена высокая не нужна и обмен не частый, то эмулировать интерфейс памяти - "ногодрыг". Т.е. программно переключать GPIO в соответствии с диаграммой.

  10. Я возможно не прав (поправьте меня), но вроде принято взводить RCC_APB2ENR_SYSCFGEN перед настройкой альтернативных функций.

     

    PS: STM32F050 имеет статус NRND. Вы часом не новое разрабатываете?

  11. Теоретически мы можем перейти на STM32 и посотрудничать с вами.

    Да, будет Ethernet. Как раз поэтому LPC11C24 не подходит.

    Напишите или позвоните мне, давайте все обсудим. Могу выслать документацию на CANopen контроллер серво мотора.

    Спасибо за предложение, но сейчас загружен полностью и надолго.

    С CANopen и управлением двигателями я не занимался, и Вам лучше найти Исполнителя с опытом и наработками - а такие на форуме есть.

  12. Слышал, что в LPC11C24 есть и CANopen и даже CAN-Phy. Одно время делал на них ставку, но сейчас уже плотно сижу на STM32.

    Кроме CANopen и двигателя есть еще что-нить? Ethernet, USB и т.п.?

     

    Кста, с десяток этих самых LPC11C24 пылится под рукой.

  13. На основе примера от STM написал свою программу. Но есть одна тонкость - надо чтоб один из циклов не прерывался (выполнялся за определённое время). А реально случайным образом длительность "дёргается"- подозреваю , что происходит прерывание в программе-исходнике. Вопросы такие: можно ли определить, какое прерывание происходит ( может, есть регистр, в котором сохраняется информация, или в отладчике кейл-микровижен)?Как запретить ВСЕ прерывания на время цикла ?

    Узнать прерывание можно из регистра IPSR.

    Считать регистр можно "msr r0,IPSR".

    Младшие 9 бит указывают текущее состояние процессора:

    ISR_NUMBER:

    This is the number of the current exception:

    0: Thread mode

    1: Reserved

    2: NMI

    3: Hard fault

    4: Memory management fault

    5: Bus fault

    6: Usage fault

    7: Reserved

    ....

    10: Reserved

    11: SVCall

    12: Reserved for Debug

    13: Reserved

    14: PendSV

    15: SysTick

    16: IRQ0(1)

    ....

    ....

    83: IRQ67(1)

    see Exception types on page 34 for more information.

    Запретить можно либо ВСЕ прерывания (с конфигурируемым приоритетом) через PRIMASK, либо с уровнем не ниже чем в BASEPRI.

    Буквально вчера сделал, чтоб отладочные сообщения выводились в xterm разными цветами в зависимости от источника.

  14. Куцее описание...

    Я читал тут http://microsin.net/programming/PC/wav-format.html

    Какая задача-то? Воспроизвести любой .wav файл? С любым сжатием?

    Или вычитывание метаданных?

     

    Если Вам не нужен звуковой редактор, или аналогичная по функционалу программа, то имеет смысл как-то ограничить требования к файлам.

  15. Нужно таймером померять частоту( временные интервалы ) на " лапке " кто знает как это сделать подскажите

    В зависимости от диапазона измеряемой частоты решения могут быть различными.

    Опишите задачу по-подробнее (частота от и до, точность, быстродействие), так и решение быстрее найдется.

  16. А можно и так, если задействовать логику переноса:

    a0 - A \
    a1 - B + = A \ 
    a2 - C /      \
    a3 ------- B  + = A \ 
    a4 ------- C /       \
    a5 -------------- B  + = A \
    a6 -------------- C /       \
    a7 --------------------- B  + = A \
    a8 --------------------- C  /      \
    a9 ---------------------------  B  + = A \
    a10 --------------------------  C /        + = результат
    a11 ---------------------------------- B /

     

  17. Нужно с помщью сумматоров получить кол-во бит в 12-разрядном слове

    Ответ 12?

    Или нужно количество единичных/нулевых бит? И только на сумматорах?

    Тогда берем 6 одноразрядных-сумматоров и складываем два соседних бита - получаем 6 двухразрядных чисел.

    Затем попарно складываем эти числа при помощи 3-х двухразрядных-сумматоров - получем 3 трехразрядных числа.

    Складывем первое и второе число - получем четырехразрядный резыльтат, который складывем с оставшимся третим трехразрядным числом -

    на выходе четырехразрядняй результат. Из сумматоров большей разрядности можно сделать уменьшеную разрядность занулением старших бит на входе.

    a0 - \
           + = \
    a1 - /      \
                  + = \
    a2 - \      /      \
           + = /       \
    a3 - /              \
                          + = + = результат
    a4 - \              /      /
           + = \       /      /
    a5 - /      \      /      /
                  + = /       /
    a6 - \      /             /
           + = /             /
    a7 - /                   /
    a8 - \                  /
           + = \          /
    a9 - /       \       /
                   + = /
    a10 - \      /
             + = /
    a11 - /

×
×
  • Создать...