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

K A A

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о K A A

  • Звание
    Участник
    Участник
  1. Скорее всего ряд E24, возможные варианты 1R0, 2R0, 3R0
  2. Вроде как Phoenix первая
  3. Это, я так понимаю, при создании компонента? Это не наш путь - все библиотеки перелопачивать надо. Проще создать копию pcb, взорвать там все компоненты и скопировать графику. Но некрасивое решение получается.
  4. Я создаю библиотеки с помощью встроенного визарда, с использованием слоя Top Overlay для шелкографии, Mechanical 15 - для отрисоки контуров компонентов и Mechanical 13 - для 3D-объектов. Для создания сборочного чертежа хотелось бы использовать данные со слоев Mechanical 15 и Top Overlay (взять оттуда Designators). Но они не копируются на другой слой. Переносятся, но не копируются. У меня используется Overlay с Designators для шелкографии. А вот продублировать Designators на другой слой не получается. Как и информацию со слоя Mechanical 15. Снял галку Lock Primitives в свойствах компонентов, примитивы выделяются, но не хотят вставляться на другой слой (с помощью Alt + Insert). Как победить? (Altium Winter 09)
  5. Может, паранойя, но у меня измерения очень точные. Чтобы не создал помеху во время преобразования.
  6. Я тоже недавно пытался определять момент окончания пересылки данных через SPORT и ничего лучшего не придумал, как тупо ждать по таймеру. Черт дернут прицепить сигма-дельта АЦП с SPI-интерфейсом к SPORTу. Потратил кучу времени, пока все заработало.
  7. Спасибо, читал эту статью. Думаю, когда в процессоре есть умножение, то быстрее будет классическим способом.
  8. Пишу программу вычисления действующего значения сигнала с помощью КИХ-фильтрации. Алгоритм следующий: 16-бит выборки возвожу в квадрат, получаю 32 бит, затем умножаю на весовой коэффициент (32 бит) и прибавляю к аккумулятору. При такой разрядности нужно использовать все 40 бит аккумулятора MAC, и то этого мало. Но никак не пойму, как это сделать на С. Функции из fract_math.h реализуют умножение 32x32 -> 32 и сложение 32+32 -> 32, как обрабатывать дополнительные 8 бит? Или писать на ассемблере? ЗЫ: почему такая разрядность - просто погрешность результата должна быть на уровне 0.001%. Почти получается, когда алгоритм был реализован с использованием вещественной арифметики. Для улучшения стабильности нужно увеличить размер окна в несколько раз (сейчас 4096, хорошо бы раз в 16 больше, путем интерполяции на лету), соответственно увеличить частоту - тут уже проц не поспевает. Еще возможные проблемы с float при большом окне - ограничение разрядности, когда сумма накопится большая, а слагаемые очень маленькие, при этом они будут игнорироваться. Так как это сделать на С?
  9. Я программирую по SPI в режиме slave. Для этого использую переходник USB-SPI на базе FT2232C, вот здесь есть готовая плата на этом чипе: Propox Программу для программирования написал сам на VB. Все хорошо работает. Если нужно, могу поделиться программулиной.
  10. Да уж, наверное в этом дело. Плата моя собственная.
  11. А в чем проблема-то? Вот, например, инициализация для работы в режиме slave: void Init_SPI(void) { #define SPI_SCLK_FREQ 1e6 // Частота SCLK при работе интерфейса в режиме master *pSPI_BAUD = (unsigned short)(SCLK/(2*SPI_SCLK_FREQ)); *pSPI_FLG = UPD_REG; *pSPI_CTL = 0 | RDBR_CORE // передачи начинаются при чтении SPI_RDBR, прерывание // генерируется при заполнении SPI_RDBR // | SZ // когда SPI_TDBR пуст, то передача нуля // | GM // когда SPI_RDBR заполнен, предыдущие данные перетираются | PSSE // режим выбора ведомого разрешен | EMISO // выход MISO разрешен // | SIZE // длина слова 16 бит // | LSBF // LSB first | CPHA // SCK меняет состояние в начале первого бита данных // | CPOL // активный уровень SCK низкий // | MSTR // режим ведущего // | WOM // выход с открытым стоком | SPE // SPI-порт разрешен ; *pSPI_TDBR = SPI_WAITCMD_CODE; // запись в регистр передачи чего-то там #undef SPI_SCLK_FREQ } Обрати внимание на конструкцию со многими "|" - это для наглядности (установка битов). Там где строка закомментирована, соответствующий бит сброшен. Определения в cdefBF53x.h Вот инициализация прерываний (сдесь, кроме прерывания от SPI, инициализируются и другие): void Init_Interrupts(void) { // assign ISRs to interrupt vectors // используем назначение прерываний по умолчанию register_handler(ik_ivg9, SPORT0_ISR); // прерывание данных SPORT0_ISR -> IVG9 register_handler(ik_ivg10, Spi_ISR); // Spi_ISR -> IVG10 register_handler(ik_ivg11, Timer0_ISR); // Timer0 ISR -> IVG 11 register_handler(ik_ivg12, ADC_ISR); // прерывание от АЦП (PF5) ADC_ISR -> IVG12 // enable interrupts *pSIC_IMASK = 0 | DMA1_IRQ // прерывание приема SPORT0 | DMA5_IRQ // прерывание данных от SPI | TIMER0_IRQ // прерывания от таймера 0 | PFA_IRQ // прерывание программируемого флага A ; } А вот само прерывание от SPI: EX_INTERRUPT_HANDLER(Spi_ISR) { unsigned char buf = (unsigned char)*pSPI_RDBR; // чтение буфера приема и сброс запроса // на прерывание // ......... }
  12. Кто работает со SPORT в Blackfin: знайте, что данные из FIFO приема нужно читать ДО остановки SPORT. Иначе читается только первая ячейка FIFO. 3 дня угробил, пока допер, блиннннн...
×
×
  • Создать...