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

uriy

Свой
  • Постов

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

  • Посещение

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


  1. Нет вы меня все равно не поняли. Эти кнопки называются модификаторы. Они вроде передаются в первом байте. Посмотрите usb сниффером что передает рабочая клавиатура. Они описаны в HID стандарте в разделе 8.3 Report Format for Array Items Вот значения бит #define KEY_MOD_LCTRL 0x01 #define KEY_MOD_LSHIFT 0x02 #define KEY_MOD_LALT 0x04 #define KEY_MOD_LMETA 0x08 #define KEY_MOD_RCTRL 0x10 #define KEY_MOD_RSHIFT 0x20 #define KEY_MOD_RALT 0x40 #define KEY_MOD_RMETA 0x80
  2. Там же вроде отдельный байт для служебных символов был с битовыми полями. Ctrl, Alt, shift и win, отдельные биты для левых и правых клавиш. Всего 8 бит.
  3. Можно прямо из pcblib обновить. Правым кликом по названию компонента в pcb library UPD PCB with...
  4. Если не секрет для чего вы применяете микросекундные задержки? Не приопмню чтобы у меня возникала в них потребность
  5. на pcbway.com есть калькулятор. Сам у них регулярно платы заказываю. Монтаж еще никогда на стороне не заказывал, но хочется.
  6. 3D у меня тоже работает значительно быстрее.
  7. У меня тоже есть тормоза. Проц скромнее, но он не загружается более 30 %. Сейчас жутко тормозит при расставление компонентов. Активирован Cross select tool. На схеме выбирают несколько компонентов (не больше 5) , перехожу на плату (она переключается секунд 5). На плате делаю reposition selected components. Секунд через 5 он становится активен для передвижения. Ставлю его, и еще секунд через 5 фокус переходит на другой компонент.
  8. Спасибо за модели! Мне надо к STM32 подцепить. Насколько понял из документации по MIPI-DSI он тянет только 720p. Там всего две линии данных. Вариант с SN75LVDS84 интересен. Поищу LVDS дисплеи.
  9. Где можно купить IPS дисплей 7" с RGB или MIPI-DSI интерфейсом? Достаточно разрешения 840х480. Чтоб была документация на дисплей.
  10. Алюминиевая фольга и химический ЛУТ это разные технологии. Для фольги ацетон не нужен. Лист А4 обворачиваете пищевой фольгой и печатаете на фольге. Фольгу заглаживаете утюгом. Фольгу отдирать не надо. Прямо так кидаете в хлорное железо. Фольга отлично травится в хлорном железе. Для меня в ЛУТ было узкое место при отдирании фольги отходила и краска. С фольгой этой проблемы нет. Тут проблема с большими платами. По краям листа фольга мнется. Маленькие платы получались отлично.
  11. Еще мне нравилось печатать на алюминиевой фольге. Но в домашний принтер совать фольгу не рискую. Только на работе делал. ЛУТ у меня получался плохо. Фольга намного лучше. Не знаю почему вы считаете химический ЛУТ мазохизмом, по мне это заметно проще чем утюг. Из-за дешевизные изготовления плат в китае сейчас ничего из ЛУТ пробовать не хочется.
  12. А химический ЛУТ не пробовали? Ацетон+спирт
  13. я перестал делать ЛУТ. Заказываю на pcbway. Последние 4 заказа дошли за 14 дней. Причем EMS и HongKong post оба шли по 14 дней, но цена доставки отличается раза в 3.
  14. Имеется документация на китайскую плату. Плата сделана в Mentor pads с переходными 0.2/0.4 мм а пример готовых герберов уже имеет переходные 0.25/0.5мм При этом форма переходных уже далека от круга, для соблюдения зазоров. В чем такое можно сделать?
  15. Под наработками имелось ввиду другие проекты. Вокодер MELP2400 на блэкфине на 60 МГц и на STM32F446 на 180 МГц примерно одинаково нагружают процессор. Я согласен с вами, именно из-за отсутствия аппаратных циклов в ARM перенос кода теперь кажется бредовой идеей.
  16. #pragma optimize_for_speed //------------------------------------------------------------------------------------------ int32_t e1dft_l(int16_t sig_buf[], int16_t tone) { [FFA0C704] LINK 0x0 ; [FFA0C708] [ -- SP ] = ( R7:4 , P5:4 ) ; [FFA0C70A] R3.L = 0 ; [FFA0C716] P1 = R0 ; [FFA0C718] R2 = R1 + R3 ; [FFA0C71A] P2.L = 0x20cc ; [FFA0C71E] P2.H = 0xff80 ; uint16_t i, j; fract32 tmp_im, tmp_re, dft_sq, tmp_mult; fract16 r_im, r_re; tmp_im = 0; for (j = 0, i = 0; i < 128; i++, j+= tone) { tmp_im = L_mac(tmp_im, (fract16)sig_buf[i], (fract16)dft_sine[j % 128]); [FFA0C70E] R5 = 127 ( X ) ; [FFA0C712] R2 = R3 & R5 ; [FFA0C714] P0 = R2 ; [FFA0C722] R0 = R2 & R5 ; [FFA0C724] P4 = P2 + ( P0 << 1 ) ; [FFA0C726] P0 = R0 ; [FFA0C728] I0 = P1 ; [FFA0C72A] A0 = 0 || R0 = W [ P4 ] ( X ) || NOP ; [FFA0C732] R2.L = R1.L + R2.L ( NS ) || R3 = W [ P1 ++ ] ( X ) || NOP ; [FFA0C73A] P5 = 63 ; [FFA0C744] LSETUP ( __BEGIN__.P59L64L , 40 /*0xFFA0C76C*/ ) LC0 = P5 ; [FFA0C748] R3 = R2 & R5 ; [FFA0C74A] P5 = R3 ; [FFA0C74C] P0 = P2 + ( P0 << 1 ) ; [FFA0C74E] R2.L = R1.L + R2.L ( NS ) || R3 = W [ P0 ] ( X ) || NOP ; [FFA0C75E] R0 = R2 & R5 ; [FFA0C760] P0 = R0 ; [FFA0C762] P5 = P2 + ( P5 << 1 ) ; [FFA0C764] R2.L = R1.L + R2.L ( NS ) || R0 = W [ P5 ] ( X ) || NOP ; [FFA0C774] R3 = 32 ; [FFA0C77A] P0 = P2 + ( P0 << 1 ) ; [FFA0C77C] R6.L = R1.L + R3.L ( NS ) || R2 = W [ P0 ] ( X ) || R3.L = W [ I0 ++ ] ; } r_im = round(tmp_im); tmp_re = 0; for (j = 32,i = 0; i < 128; i++, j+= tone) { tmp_re = L_mac(tmp_re, (fract16)sig_buf[i], (fract16)dft_sine[j % 128]); [FFA0C776] R2 = R3 & R5 ; [FFA0C778] P1 = R2 ; [FFA0C784] R7 = R6 & R5 ; [FFA0C78A] P1 = P2 + ( P1 << 1 ) ; [FFA0C78C] P0 = R7 ; [FFA0C790] A0 = 0 || R2 = W [ P1 ] ( X ) || NOP ; [FFA0C798] P1 = 63 ; [FFA0C79A] R4.L = R1.L + R6.L ( NS ) || R6.L = W [ I0 ++ ] || NOP ; [FFA0C7AA] LSETUP ( __BEGIN__.P59L60L , 40 /*0xFFA0C7D2*/ ) LC0 = P1 ; [FFA0C7AE] R0 = R4 & R5 ; [FFA0C7B0] P1 = R0 ; [FFA0C7B2] P0 = P2 + ( P0 << 1 ) ; [FFA0C7B4] R2.L = R1.L + R4.L ( NS ) || R0 = W [ P0 ] ( X ) || NOP ; [FFA0C7C4] R0 = R2 & R5 ; [FFA0C7C6] P0 = R0 ; [FFA0C7C8] P1 = P2 + ( P1 << 1 ) ; [FFA0C7CA] R4.L = R1.L + R2.L ( NS ) || R0 = W [ P1 ] ( X ) || NOP ; [FFA0C7DA] P1 = P2 + ( P0 << 1 ) ; [FFA0C7DC] R1 = R1.H * R1.H || R0 = W [ P1 ] ( X ) || NOP ; } r_re = round(tmp_re); dft_sq = L_mult(r_im, r_im); dft_sq = L_mac(dft_sq, r_re, r_re); return (dft_sq); [FFA0C7F2] ( R7:4 , P5:4 ) = [ SP ++ ] ; [FFA0C7F8] UNLINK ; } Вот вся проблемная функция в режиме mixed А ниже рукописный ассемблерный аналог .section L1_code; .global _e1dft_l; .align 2; .extern _dft_sine; _e1dft_l: link 0; [--sp] = (r7:5, p5:5); [--sp] = lc0; [--sp] = lb0; [--sp] = lt0; // r0 - addres inpute buffer // r1 - number tone i0.l = lo(_dft_sine); i0.h = hi(_dft_sine); b0 = i0; p0 = r0; p5 = 256; // 256 = 128 * 2byte l0 = p5; p5 = 128; r1 <<= 1; m0 = r1; // m0 = r1 = STR_TON or STR_TON_PRM #if defined(__WORKAROUND_BF532_ANOMALY_050000245) NOP; NOP; #endif r1 = w[p0++] (z); // R1 has value of first element in buffer a0 = 0; nop; r5.l = w[i0]; // R5 addres of dft_sine table i0 +=m0; lsetup (start_sine_loop, finish_sine_loop) lc0 = p5; start_sine_loop: r6 = (a0 += r1.l * r5.l) || i0 +=m0 || r5.l = w[i0]; finish_sine_loop: r1 =w[p0++] (z); // read next item from buffer into R1 p0 = r0; // P0 is pointer to first buffer element p5 = 128; i0 = b0; // i0 is address of dft_sine table m1 = 64; i0 += m1; //(32*2); // ( 128 / 4 ) * 2 r5.l= w[i0]; // r5.l load first elemnt of dft_sine table in r5.l i0 +=m0; a1 = 0; r1 = w[p0++] (z); // load first buffer elemnt in r1 lsetup (start_cosine_loop, finish_cosine_loop) lc0 = p5; start_cosine_loop: r7 = (a1 += r1.l * r5.l) || i0 +=m0 || r5.l = w[i0]; finish_cosine_loop: r1 =w[p0++] (z); r1.l= r7(rnd); r5.l= r6 (rnd); a0 = r1.l * r1.l; r0 = (a0 += r5.l * r5.l); l0 = 0; lt0 = [sp++]; // modified lb0 = [sp++]; lc0 = [sp++]; (r7:5, p5:5) = [sp++]; p0 = [fp + 4]; unlink; jump (p0); ._e1dft_l.end: Мне уже кажется плохой идея перенести это на ARM
  17. L_mac это встроенная в vdsp функция умножения с насыщением. Истинная проблема оказалась не в этом. После разгона ядра до 180 МГц сишный код стал нормально работать в железке с реальным сигналом без насыщения. Ассемблерный работает на частоте 60 МГц.
  18. Есть рабочий проект для blackfin. Некоторые функции написаны на ассемблере. Хочу перенести код на ARM. Blackfin у нас работает на частоте 60 Мгц, по предварительным наработкам получается что ARM на частоте 180 МГц дает примерно такую же производительность. Для начала хочу в blackfin убрать ассемблерные функции, чтобы там все работало на си. В функции ниже в регистр R1 считывается элемент из входного массива. В регистр R5 считываются константы из таблицы синуса из 128 элементов. Цикл выполняется 128 раз. С моими тестовыми данными после десятка итараций R6 достигает насыщения 0x7FFF FFFF и затем перестает меняться. Даже если к A0 прибавляется отрицательный результат умножения R1*R5. Мне это кажется странным. Но это рабочий код. start_sine_loop: r6 = (a0 += r1.l * r5.l) || i0 +=m0 || r5.l = w[i0]; finish_sine_loop: r1 =w[p0++] (z); Код на си: Я рассчитываю получить в tmp_in тоже самое что в R6. Но результат совпадает только если отсчеты входного сигнала были с маленькой амплитудой. Почему-то сишный код не обеспечивает насыщение. Как на си записать эквивалент ассемблерного кода? for (j = 0, i = 0; i < 128; i++, j+= tone) { tmp_im = L_mac(tmp_im, sig_buf[i], dft_sine[j % 128]); }
  19. Откройте в блокноте да замените разделитель
  20. Похоже SCA100T отличная штука! И легко доставаема даже у меня в городе
  21. Блок будет крепиться на металлическую конструкцию подвешенную наверху. Нижняя часть которой отклоняется человеком. Что-то навроде механического маятника. Нужно детектировать нахождение нижней части внутри телесного угла ±0,5 градуса. Кстати куда лучше крепить блок? Мне кажется как можно ближе к оси вращения. Т.е. наверху к точке подвеса этой металлоконструкции. Предположительно в начале рабочего дня будет задаваться исходное вертикальное положение. Нажатие кнопки, подача питания или как-то еще. Нет. 100 мсек это максимальное время между фактом выхода за пределы угла 0,5 градуса и его обнаружением после фильтраций. На само отклонение будут уходить единицы секунд, предположим до 10. Максимальный угол отклонения градусов 20. Мне кажется в течение рабочего дня показания даже с неподвижного блока уйдут далеко за эти 0,5 градуса. Оптические датчики исключили из-за загрязненной среды. Plain кажется отличная штука. Правда в три раза медленней чем мне нужно. Но может быть на это согласятся. И я не нашел ее рабочих температур. Мне надо от минус 40. И с наличием похоже проблемы.
  22. Можете что-то рекомендовать почитать по этому поводу? Акселерометр раньше применял, но мне было нужно всего лишь обнаружить наклон в 30 градусов. 0,5 градуса мне уже кажется серьезным
×
×
  • Создать...