Jump to content

    

_pv

Свой
  • Content Count

    2848
  • Joined

  • Last visited

Community Reputation

0 Обычный

About _pv

  • Rank
    Гуру

Контакты

  • Сайт
    http://
  • ICQ
    199070155

Recent Profile Visitors

9701 profile views
  1. Подскажите по буферу LCD. Закипел.

    а вот эти вот ручные разворачивания всевозможных вариантов они зачем? особенно отдельная проверка на 0. write_buffer(x, y, color, const N){ //N=0,1,2,3 => 1,2,4,8 bpp idx = (x + y * WIDTH); mask = (1 << (1 << N)) - 1; shift = (idx & ((1 << (3-N))-1)); buff[idx >> (3-N)] = buff[idx >> (3-N)] & (mask << shift) | ((color & mask) << shift); } read_buffer(x, y, const N){ idx = (x + y * WIDTH); mask = (1 << (1 << N)) - 1; shift = (idx & ((1 << (3-N))-1)); return (buff[idx >> (3-N)] >> shift) & mask; }
  2. а 20В p-p вы в пятивольтовый АЦП прям так засунете, да? без деления. в даташите, как это не странно, написаны все допустимые напряжения на всех входах включая опору, относительно питания. и этот АЦП оказывается даже допускает отличие аналоговой земли от цифровой на 2.5В как раз для биполярного питания. так что цифровую часть никуда двигать не надо. но имхо вместо отрицательных напряжений сделайте делитель в 4-5 раз(4k/1k) и обоприте его на положительное напряжение ~3В (оно же AVCC, оно же REFP). как раз из +-10В получится +0.5..+4.5В. это если на абсолютный коэффициент наплевать, или есть возможность калиброваться.
  3. Подскажите по буферу LCD. Закипел.

    void write_buffer(x,y,color){ buffer[(x+y*WIDTH)/2] = buffer[(x+y*WIDTH)/2] & (0xF0 >> (4*(x&1))) | ((color & 0x0F) << (4*(x&1))); } int read_buffer(x,y){ return (buffer[(x+y*WIDTH)/2] >> (4*(x&1))) & 0x0F; } const uint16_t PALLETE[16] = {0xAABB, ...}; LCD_Write(x, y, PALLETE[read_buffer(x,y)]);
  4. Либо ищите АЦП с true bipolar входами, либо ставьте усилитель перед АЦП, который сдвинет и отмасштабирует сигнал до входного диапазона АЦП. Опускать землю АЦП до отрицательных напряжений идея не самая лучшая и без особой необходимости так лучше не делать. Цифровую часть тоже сдвигать придется.
  5. на ногах bmode ещё уровни посмотрите, откуда именно он грузится, а то он и с параллельной и с последовательной флэши грузиться может. Понятнее будет кто из них помер.
  6. препроцессор глупый всегда. даже без C++11 вместо дефайна можно объявить const double FREQ_COEFF=pow(2.0,32)/FCLK; тогда в худшем случае посчитает один раз, если не догадается вычислить на этапе компиляции. но как и в случае с constexpr в заголовочный файл для включения в другие части тогда придётся написать extren const double FREQ_COEFF; а вычислить где-то один раз отдельно.
  7. Препроцессор ничего вычислять не умеет, он только текст подставляет, и если компилятор умный, то догадается что FREQ_COEFF константа и посчитает её при компиляции, если не очень или уровень оптимизации невысокий, скомпилирует как попросили вызов pow. #define FREQ_COEFF (4294967296.0/FCLK)
  8. если нужен именно триггер, по которому надо что-то сразу сделать в пределах 100нс, ieee1588 пожалуй не поможет.
  9. для грубой оценки свободная конвекция обычно бралась вроде 1мВт/К/см^2, ну или 10Вт/К/м^2. гугл наверняка точнее знает.
  10. каким образом оверсэмплинг на 1МГц поможет в таком случае?
  11. если помехи лежат в полосе сигнала 30кГц, то можно хоть с 1ГГц оцифровывать, а потом обратно фильтровать до 30кГц, шумы из полосы 30кГц таким образом никуда не денутся. оверсэмплингом можно поднять разрядность АЦП, но только если это в его разрядность и собственные шумы всё упирается. для этого в сигма-дельта АЦП обычно ставят CIC фильтры, которым даже умножения не надо, 3 сложения и 3 вычитания на отсчёт для sinc3 фильтра-дециматора.
  12. никак, для каждого компилятора надо будет бороться с его собственными прагмами/атрибутами. но можно некрасиво руками (макросы htonl / шаблоны с++) перекладывать побайтно приводя к нужной endianess. ну так указано же big endian, вот константа 0x000000AA (LE) и легла в память как 0xAA000000.
  13. осталось понять как они друг с другом соотносятся, так как 200 000, ну даже пусть 20 000 Large signal voltage gain - это совсем не 40дБ. а на каритнке просто график усилителя с Ку(Avcl) = 100, а не open loop (если в даташит 912А заглянуть).
  14. если на квадратурный модулятор подать постоянные сигналы, они просто сдвинут фазу несущей как раз на тот угол, который Вы через арктангенс и хотите получить. ну а фазовый детектор опёртый на исходную несущую этот угол и покажет