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

VladimirYU

Свой
  • Постов

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

  • Посещение

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


  1. Добавлю, что логарифмические характеристики позволяют перемножение передаточных функций заменить простым сложением ЛАХов, которое лет 40 назад можно было очень легко выполнять чисто геометрически с помощью шаблонов с разными наклонами.

    В том более глубокая суть логарифма: заменить умножение сложением.

     

    Весовые коффициенты на осциллографе, как по шкале вертикальной так и по горизонтальной также позволяют снимать показания равномерно лежащие в логарифмическом масштабе (1, 2, 5).

  2. . В первом случае есть опасность, что в серийном производстве вылезет неточность калибровки безкварцевых процессоров, а переделать схематически уже будет нельзя. Я же писал - встроенный "калиброванный" RC генератор 9.6Мгц.

    Делится на 8, после этого счетчик отсчитывает (256-125) отсчетов для прерывания, в котором передается очередной бит.

     

    Может мне увеличить промежуток между передачей байт?..

     

    Я не много по другому делал СТАРТ. Ставил 0, запускал синхротаймер и разрешал прерывания от таймера, запрещал все другие и чистил все флаги от источников всех "лишних прерываний"

  3. Сложно что то сказать, так как непонятно какие еще процессы выполняются, особенно есть ли еще прерывания. Если они есть то это может быть причиной потери синхронизации. Побовал подобное делать на меге16, потребовался второй UART по 1 линии причем, передачу удалось сделать надежной на 9600, но прерывания все кроме синхротаймера запрещал на момент посылок. А вот с приемом натрахался всласть, пришлось все длительности как и Вам в ручную подгонять. Но Вам вроде прием не нужен?

     

    Удалил ненужное цитирование, больше ТАК не делайте.

    Модератор

  4. Наверное, вопрос в том, почему логарифмическая сетка удобнее чем линейная.

    Ответ:

    - позволяет охватывать большие границы изменения параметров

    - легкость построения ЛАЧХ (из-за линейности, некоторое расхождение на "изломах" легко учитывается)

    - удобство для анализа устойчивости замкнутых систем.

     

    +1, Я думаю, что коллегу направили в нужное русло.

  5. Ага точно не 6дБ, а 20 дБ. Значит, все таки правильно?

    Строго говоря в Вашем примере ЛАХ имеет наклон 0 Дб/дел в низких частотах, и -20Дб/дек в высоких. Излом асимптотической ЛАХ на частоте w=1/RC. А в остальном "стопудово".

  6. Учитываем что wt>>1 получаем, что K(jw)=20lg(wt).

    И уже из этого становится понятно, что увеличив частоту в 10 раз получим увеличение в 6 дБ.

    Правильно?

    При увеличении того что стоит под логарифмом в 10 раз, значение логарифма увеличивается на 1, следовательно имеем +20 Дб. Правильно :) ?

  7. Так RC-звено не причем тут?

    RC звено является с точки зрения теории регулирования объектом первого порядка. В зависимости от схемы это может быть дифференцирующая цепь или интегрирующая. В первом члучае ЛАХ имеет наклон +20Дб/дек, во втором -20Дб/дек. Т.е. коэффициент передачи в одном случае растет с ростом частоты в 10 раз за декаду, во втором падает в 10 раз за декаду. Декада - это изменение частоты в 10 раз.

  8. А если вне циклов, найдите отличия:

    Классика:

    94 InputBuffer[0] = 0xab;

    \ 0000002A EA0B LDI R16, 171

    \ 0000002C 01FD MOVW R31:R30, R27:R26

    \ 0000002E 8305 STD Z+5, R16

    95 InputBuffer[1] = 0x55;

    \ 00000030 E505 LDI R16, 85

    \ 00000032 01FD MOVW R31:R30, R27:R26

    \ 00000034 8306 STD Z+6, R16

     

    Запятая:

    94 InputBuffer[0] = 0xab,

    95 InputBuffer[1] = 0x55;

    \ 0000002A EA0B LDI R16, 171

    \ 0000002C 01FD MOVW R31:R30, R27:R26

    \ 0000002E 8305 STD Z+5, R16

    \ 00000030 E505 LDI R16, 85

    \ 00000032 01FD MOVW R31:R30, R27:R26

    \ 00000034 8306 STD Z+6, R16

     

    Я имел в виду именно такой случай.

  9. С запятыми в IAR AVR вообще интересная штука. Начиная с 4 версии в режиме С++ спокойно компилятором глотается запятая вместо классической точки запятой. Вопрос - это стандарт или особенность IAR. Оригинала стандарта под рукой нет.

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

  11. А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт)

     

    Абсолютно справедливо, сначала написал в форум, а потом сам понял. Когда объект динамический - "кучи" хватало, а когда статический и локальный = стек и переполнялся. Всем спасибо за помощь.

  12. Если, например, вытесняющая операционка, то у каждой задачи свой стек естественно никоем образом не имеющий отношения к тому кторый был в statrup задан.

    Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется.

  13. CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался.

    (все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек.

     

    Инициализация, ИМХО, должна быть в CSTARTUP, или я заблуждаюсь? А далее компилятор должен позабодится о корректной работе со стеком, а LINKER предупредить о возможном наложении сегментов, если это отлавливается. Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно.

  14. Сразу при начале пошаговой отладки main() симулятор выдает сообщение

     

    The stack pointer for stack 'CStack' (currently DATA:0x00FFF1) is outside the stack range (DATA:0x000100 to DATA:0x000200)

     

    В опциях проекта вроде все определено CSTACK, RSTACK, НЕАР. В map файле все соответствует опциям проекта. Как указатель CSTACK залез в адреса, соответствующие внешней памяти, которой нет и опциях поекта запрещена? Контроллер Мега128, файл линкера XCL родной от IAR. Может кто подскажет как с этим быть.

  15. Func(&MASSIVE[0])

    Указатель - адрес первого элемента.

     

    Это понятно, но компилятор говорит о не совместимости "char*" и "__flash char*", именно об это речь.

    Func(MASSIVE) и Func(&MASSIVE[0]) эквивалентные вызовы.

     

    void Func ( __flash char* Ptr_massive)

    {

    }

     

    Func ( MASSIVE);

     

    Евгений, не поверишь, ругется, говорит что атрибут памяти __flash не может указываться среди параметров. Сам с этого варианта начинал.

  16. Что то туплю.

    имеется массив во флэш

     

    __flash char MASSIVE [] = { 0xaa, 0xbb,...}

     

    есть функция работающая с подобными массивами

     

    void Func ( char* Ptr_massive)

    {

    ..........

    }

     

    В программе:

     

    Func ( MASSIVE);

     

    Выдается ошибка. Вопрос: как правильно передать указатель на flash в функцию.

    IAR 4.12A, Заранее спасибо.

  17. Запускаю программатор из IDE. Все работает, правда только в том случае, когда параметры командной строки передаются через окошко Argument. Так же не любит перенаправлений вывода в файл (типа >> out.txt). А на bat плюнул. Правильно советовали в форуме отказаться от IDE совсем и работать с нормальным редактором, ИМХО.

  18. При входе в режим отладки появляется сообщение примерно такого содержания "IAR не может найти файл main.c. Хотите указать его самостоятельно?" Обычно ругается про файл в котором стоит первая точка остановки. Сообщение появляется только на чужих проектах, напрмер, скачанных из интернета. Раньше лечил созданием проекта "с нуля". Сейчас разбираюсь со множеством примеров, оч. бесит этот баг.

     

     

     

    З.Ы. может уже обсуждалось - не нашел.

     

    Была такая фишка, невсегда IAR корректно воспринимает проекты при смене каталогов исходников. Попробуйте исключить файлы из проекта, а затем заново включить и пересобрать проект.

  19. похоже дело действительно в wdt

     

    использую 1 уровень конфигурации wdt и инициализацию:

    void Init_wdt(void)

    {

    asm volatile("WDR"); //Сброс WDT

     

    WDTCR |= (1<<WDCE) | (1<<WDE); //Включение WDT

    WDTCR |= (1<<WDP1) | (1<<WDP0); //Период сброса WDT = 140 мс

     

    return;

    }

     

    После while(1) поставте WDR и все станет понятно.

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