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

    

GMavr

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный
  1. QUOTE (jcxz @ Aug 19 2017, 00:06) Вы уверены, что это именно команды ассемблера? То, что Вы привели больше похоже на макросы. Да. Уверен что это ассемблер. QUOTE (jcxz @ Aug 19 2017, 00:06) PS: А зачем так нужен именно этот таинственный DSP если полно открытых МК, с полными доками?? И, если речь только про синус, то и ARM с ним вполне справится. Этот DSP - не отдельная микросхема. Это часть кодека (tlv320aicXXXX - там много таких). Документация на микросхему в целом есть. А вот на встроенный DSP - нет. Есть только некоторые готовые алгоритмы для него, которые по факту оказались не нужны. Для обработки данных используется Cortex M7. Но он уже не справляется. И к сожалению, нужны более сложные алгоритмы, чем генерация синуса. Идея - перебросить часть задач на DSP в кодеке. И не переделывать плату.
  2. Есть микросхемка от Texas Instuments с DSP ядром внутри (точнее miniDSP). TI документацию на ядро давать не хочет. Есть желание задействовать DSP ядро в своих целях. Есть некоторое количество ассемблерных исходников. Но вот проблема - я впервые вижу подобный ассемблер. Вот к примеру генератор синуса: CODE;== Component Interface == ; .port ToneGenerator_1.Ch1_Out     ToneGenerator_1_Ch_Out                                                                ; Data Declarations for output .data_miniDSP_D   ToneGenerator_1_Ch_Out                                                                ; Data format 3.yy             ; ;Coefficients Definitions .coeff_miniDSP_D  ToneGenerator_1_Status         =256         @5    ; .coeff_miniDSP_D  ToneGenerator_1_alpha          =0,8526401519775390625M1        @5+1  ;   .coeff_miniDSP_D  ToneGenerator_1_beta           =-0,2612493038177490234375M1         @5+2  ; .coeff_miniDSP_D  ToneGenerator_1_Amplitude      =0,5M2    @5+3  ;not used but added to use same DLL as quad .coeff_miniDSP_D  ToneGenerator_1_Minus_stopped  =-25344 ;Data Definitions .data_miniDSP_D   ToneGenerator_1_Out(n) .data_miniDSP_D   ToneGenerator_1_Out(n-1) .data_miniDSP_D   ToneGenerator_1_Out(n-2) .data_miniDSP_D   ToneGenerator_1_Status(n) .data_miniDSP_D   ToneGenerator_1_Status(n-1) ; ; .codeblock ToneGenerator_1_Block target=miniDSP_D, cycles=15, stream=Primary, component=ToneGenerator_1 acc_init        ToneGenerator_1_Status         data_one   compare         ToneGenerator_1_Minus_stopped  data_one compare         MinusOne_M1      ToneGenerator_1_Status(n-1) acc_init        ToneGenerator_1_beta           data_one write           0                                 ToneGenerator_1_Status(n) jump            jmp_eq                            ToneGenerator_1_Stopped ;current status is start acc_init        Zero                              data_one jump            jmp_eq                            ToneGenerator_1_RunwoInit ;Do init here write           0                                 ToneGenerator_1_Out(n-2) acc_init        MinusOne_M1                       ToneGenerator_1_Out(n-2) write           0                                 ToneGenerator_1_Out(n-1) ;acc_2           ToneGenerator_1_alpha          ToneGenerator_1_Out(n-1) // not required because Out(n-1) is zero jump            jmp                               ToneGenerator_1_Run ToneGenerator_1_RunwoInit: ;nop balance acc_init        MinusOne_M1                       ToneGenerator_1_Out(n-2) acc_2           ToneGenerator_1_alpha          ToneGenerator_1_Out(n-1) nop nop ToneGenerator_1_Run: jump            jmp                               ToneGenerator_1_Done; ToneGenerator_1_Stopped: acc_init        Zero                              data_one nop ;nop balance nop nop nop nop nop ToneGenerator_1_Done: write           0                               ToneGenerator_1_Out(n) write           0                               ToneGenerator_1_Ch_Out .endcodeblock Формулы, по которым он работает: Out (n) = 2*ToneGenerator_1_alpha * Out (n-1) - Out (n-2) Инициализация: Out (-1) = 0 Out (-2) = ToneGenerator_1_beta Кто-нибудь сталкивался с подобным ассемблером? Может быть есть какая-то документация на DSP процессор, у которого похожий ассемблер? Если кому интересно acc_init a b помещает в аккумулятор a*b, т.е. Акк = a*b acc a b -> Акк = Акк + a*b acc_2 a b -> Акк = Акк + 2*a*b Есть еще команды Init_abs, Writef, Writecoeff, mult, Acc_abs, AC_R_AC, AC_F_AC, AC_RW_AC, ACC_INIT_DATAPAD, ACC_SUB И так далее. Полный список можно вытащить из компилятора. Но вот что они делают? И зачем так много NOP-ов в исходниках?
  3. Я разобрался сам. Лучше всего помогла установка диода D6 типа MBR0540 и резистора Rg номиналом 330 Ом (см. схему из первого поста). После этой доработки наводки в УКВ диапазоне практически исчезли. Как я понял, проблема была в следующем. В момент включении транзистора Q1 через диод D5 протекает ток в прямом направлении. Быстро выключиться диод не может (нужно время для обратного восстановления). Получается цепь с низким сопротивлением: Q1, D5, транзистор внутри микросхемы, резисторы Rs1 и Rs2. На эту цепь подано значительное напряжение (сетевое). Возникает короткий импульс тока (видимо, более 1 ампера). Этот импульс заставляет "звенеть" какую-то цепь (частота "звона" ~150 МГц). Соответственно, резистор Rg замедляет включение транзистора Q1, что приводит к сокращению амплитуды этого выброса. Если не поставить диод D5, транзистор Q1 будет медленно выключаться, что создает риск пробоя транзистора внутри микросхемы (он попытается разорвать цепь с напряжением в несколько сотен Вольт, а предельная величина напряжения сток-исток для него всего 20 Вольт) . На КВ светильник все равно дает заметные помехи. Поставил Ld1 3.3 мГн и Cx1 0.047 мкФ. Стало чуть получше. Но на КВ видимо шумят все. Экспериментировал дорогой лампочкой Gauss - шум конечно меньше, но не намного. В общем, своей цели я добился. Убрал помехи на УКВ.
  4. QUOTE (krux @ Jul 15 2015, 09:00) часть, которая в даташите находится в районе где Ld1 Lc1, - судя по внешнему виду платы - отсутствует. Каюсь. Забыл сказать. Действительно, левее диодного моста по схеме из даташита в реальном светильнике есть только предохранитель в виде резистора. QUOTE (shf_05 @ Jul 15 2015, 11:17) намотайте оба провода, питающие ваш светильник на кольцо возможно большего размера витков 5-10 (синфазный дроссель), может удасться пресечь кондуктивные помехи, распространяемые по проводам питания. В общем, эксперименты я начал с синфазного дросселя, который практически ничего не изменил. 4 витка сетевого провода на кольце R16x9.6x6.3 феррит N87. Кольцо маленькое, но больше всунуть в светильник трудно. (Приемник, конечно, плохой прибор. Шумит. А также или как-то иначе, не поймешь) QUOTE (HardEgor @ Jul 15 2015, 11:27) Есть еще Application Notes на китайском для BP2808, там советуют перед светодиодами поставить LC-фильтр. Спасибо. Этого документа не видел. Не додумался, что светильник может и с этой стороны что-то излучать. Буду экспериментировать. Меня вот что беспокоит. Как я понял из осциллограмм, при включении ключевого транзистора возникает колебательный переходной процесс с довольно коротким периодом. Может лучше подавить его? А то места в светильнике мало и поставить большие фильтры во все места не получится (хотя что-то поставить придется). Зачем вообще в даташите нарисован резистор Rg? А диод D6? Из каких соображений их выбрать?
  5. QUOTE (Plain @ Jul 14 2015, 00:32) вероятнее всего, дроссель неэкранированный. В каком смысле неэкранированный? Фото источника питания светодиодов в светильнике прилагаю. Этот дроссель экранированный? В приемнике, работающем от сети, помех наводится больше. Но и с приемником, работающем от батарей помех не намного меньше. Список отличий реальной схемы от datasheet-а: 1) вместо элементов CE1, CE2, D2, D3, D4 стоит просто фильтрующий электролит 10 мкФ/400В; 2) элементов Rg, D6 нет (затвор Q1 подключен напрямую к +12В); 3) между истоком и стоком Q1 установлен конденсатор (вероятно 10нФ/1КВ); 4) C5 и Rt1 отсутствуют (хотя место под них на плате предусмотрено); 5) параллельно светодиодам установлен диод в обратном (по сравнению со светодиодами) включении.
  6. Купил LED светильник ESTARES DLS-8 (8 ватт). Работает нормально, но при включенном светильнике стоящий недалеко УКВ приемник начинает сильно шипеть. Хочется это как-то побороть. В приложении - 3 осциллограммы. первая: 1-й канал - сигнал с 10 витков провода, намотанных на ферритовом кольце, через которое продет один из проводов питания светильника (типа токовый трансформатор); 2-й канал - виток, состоящий из провода "земли" щупа осциллографа, замкнутого на сам щуп (рамка диаметром ~5см) расположенный рядом со светильником. вторая - 1-й канал крупно. третья - 2-й канал крупно. Схема светильника основана на китайской микросхеме bp2808 - http://www.satistronics.com/myfiles/file/led/BP2808.pdf Схема из datasheet-а -последняя картинка. Схема драйвера светильника более или менее совпадает. Вместо хитрой конструкции CE1, CE2, D2, D3, D4 стоит просто фильтрующий электролит 10 мкФ/400В. Цепи Rg, D6 нет. Параллельно светодиодам установлен диод в обратном (по сравнению со светодиодами) включении. В общем, подозрение, что ключ Q1 открывается как-то не так из-за его управления по истоку. Но что конкретно происходит - не понимаю. Видимо цепь Rg, D6 должна как-то помочь. На в имеющемся драйвере ее нет, а в datasheet-е не указаны ни рекомендуемые номиналы, ни формулы для ее расчета. Можете что-то посоветовать?
  7. Обработка прерываний в Linux

    Все оказалось просто. Период таймерного прерывания был кратен периоду интересующего меня прерывания. Причем эти периоды задавались разными кварцами. Соответственно, с некоторой периодичностью, они ничинали накладываться. Значит, обработчик таймера держит прерывания запрещенными в течении 180мкс (для моей конфигурации).
  8. Обработка прерываний в Linux

    Это все мне известно. Но правилом хорошего тона является запрет прерываний на короткий промежуток времени. А 180 мкс, мне кажется, уже много. Кроме того удивляет хорошая периодичность и редкость этого явления - раз в 200 секунд (+/- несколько секунд). Чего это Linux делает с таким периодом?
  9. Обработка прерываний в Linux

    Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14. Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая. Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить? Очень хочется, чтобы обработчик прерывания делал свое дело через равные промежутки времени.
  10. По слухам, зрительные и слуховые ощущения человека имеют логарифмическую зависимость. Соответственно, на каждом шаге нужно менять среднюю мощность, выделяемую на светодиоде в какое-то число раз.
  11. cms: Я пока только сомневаюсь, но несовсем ясно, как же функционирует пин двойного назначения. Обман программатора не имеет смысла т.к. при этом требуется нормальный чип. И что с ним делать после прошивки? В помойку?
  12. Нарисовал схему, в которой по ошибке выход TDO используется еще и как пользовательский выход (TMS, TCK и TDI используются только для JTAGа). И что, теперь я не имею возможности менять прошивку через JTAG? Или всетаки без TDO можно ее обновить?
  13. ARM Debugging Tools

    Ну ты и свалил все в кучу! Multi-ICE - железка от самой ARM, позволяющая подключить JTAG к компьютеру. Изготовить скорее всего не удасться. Стоит дорого. Поддерживаеся главным образом софтом от ARM (ADS/SDT). J-Link - назначение точно такое же. Стоит заметно дешевле, но о возможности его копировании ничего не слышал. Софт от ARM его не поддерживает (если ничего не изменилось). Зато он работает с софтом некоторых третьих фирм (Вроде CrossWorks). Angel - протокол удаленной отладки через COM или Ethernet. Придуман компанией ARM. Вроде бы поддерживается в GDB. Опиание на сайте ARM-а RDI - Remote Debug Interface - это стандарт на DLL-и, подключаемые к отладочному софту от ARM (ADS/SDT). Типа если ты хочешь сделать свою железку для отладки, можешь написать DLL и твоя железка будет поддержваться в ADS и SDT. Более подробную информацию найти не удалось. Вывод - если нужно дешево, единственное решение - Wiggler. Собирается легко, можно использовать в боьшинстве отладчиков. Но медленный.
  14. Коммуникационные ARM-ы SAMSUNGа

    Никто не знает, с какого это праздника SAMSUNG объявил о снятии с производства всех коммуникационных ARM-ов? Ладно бы только старые S3C4510 и S3C4530! А то выпустил около года назад S3C2500 и уже объявил, что дата последнего заказа - июнь 2005! Т.е. производство сворачивается одновременно со старыми камнями! Думал может HDLC интерфейс стала непопулярен. Так и с ATM-ной UTOPIA камни тоже под нож пошли! Чего делать? Нужен дешевый проц. (лучше ARM) со встроенным 10/100 Ethernet-ом и HDLC контроллером (лучше 2-мя или 3-мя). Может что посоветуете?