Jump to content

Анализатор спектра LED


RIMUS1989i
 Share

Recommended Posts

Здравствуйте. Затеялся собрать анализатор спектра на светодиодах, 20x20 светодиодов, МК ATMEGA328P. 

Долго ломал голову, как переключать столбцы без использования МК, дабы его не загружать.И вот что у меня получилось. Набросал тестовую прошивку для теста в протеусе. 

При инилизации подается импульс на вторую ножку U4a, и на предпоследнем столбце.

Думал сетку сделать на 5 сдвиговых регистрах (как раз 40 сигнальных линий), но боюсь мощности МК не хватит для обработки FFT и вывода на матрицу, будет подвисать.

Кто что думает по поводу схемы?633408538_.jpg.92f626cda75ae21aeb96442685e41e7c.jpg

бегущая строка.pdsprj Natali_2012_program.hex

Link to comment
Share on other sites

Плюс к тому, можно не заботиться об обслуживании динамической индикации и спокойно заниматься своими делами, изредка (относительно) обновляя "экран".

"Я не знаю какой там коэффициент, я просто паять умею. "

Link to comment
Share on other sites

Вебинар «Новые тенденции сетевых технологий: Ethernet по одной витой паре» (09.12.2021)

Приглашаем 9 декабря всех желающих посетить вебинар, посвященный технологии Ethernet и её новому стандарту 10BASE-T1S/L. Стандарт 802.3cg описывает передачу данных на скорости до 10 Мбит в секунду по одной витой паре. На вебинаре будут рассмотрены и другие новшества, которые недавно вошли в семейство технологий Ethernet: SyncE, PTP, TSN. Не останется в стороне и высокоскоростной 25G+ Ethernet от Microchip.

Подробнее

DC/DC-преобразователи Mornsun со склада Компэл

В сложный период для рынка электронных компонентов, когда производители увеличивают сроки поставки продукции, со склада Компэл можно приобрести широкий ассортимент DC/DC-преобразователей производства компании Mornsun. На складе представлены наиболее популярные семейства изолированных и неизолированных DC/DC-преобразователей новых поколений R3 и R4, а также предыдущего, но по-прежнему востребованного поколения R2.

Подробнее

Новые компоненты STMicroelectronics для учета электроэнергии

Внедрение автоматизированных систем контроля и учета всех видов энергоресурсов, невозможно без инструментов, позволяющих помимо измерения параметров, преобразовывать их для обработки цифровыми интеллектуальными системами. Микросхемы STPM32, STPM33 и STPM34 STMicroelectronics являются наиболее точными и высокопроизводительными представителями своего семейства и способны максимально точно измерять параметры электросети в системах электроснабжения переменного тока, а также осуществлять их первичную обработку. Рассмотрим подробнее их преимущества и средства разработки.

Подробнее

6 часов назад, RIMUS1989i сказал:

боюсь мощности МК не хватит для обработки FFT и вывода на матрицу

Для "спектроанализатора" хватит вполне.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Link to comment
Share on other sites

Карбид кремния позволяет повысить КПД и удельную мощность ИБП с двойным преобразованием

Построение источников бесперебойного питания с двойным преобразованием, широко используемых в современных хранилищах данных, на базе карбид-кремниевых MOSFETs производства Wolfspeed позволяет уменьшить мощность потерь в них до 40%, а также значительно снизить занимаемый ими объем и стоимость комплектующих.

Подробнее

10 часов назад, optima сказал:

Мне кажется проще применить адресные светодиоды типа WS2812, WS2813 и выкинуть всю кучу корпусов. Бонусом будут цвета

Я думал об этом, но у меня место ограничено, светодиоды будут в корпусе 0805. Размеры платы 220х73. 

 

9 часов назад, _abk_ сказал:

Или для ускорения использовать дешифраторы. А еще лучше заменить всю "рассыпуху" на ПЛИС.

ПЛИС я не знаю ещё. :( Да и это мало ещё рассыпухи. 

 

8 часов назад, ARV сказал:

хватит вполне

Ну а поповоду моей схемы что думаете? На сколько я разгружу МК? 

Link to comment
Share on other sites

16 минут назад, RIMUS1989i сказал:

Размеры платы 220х73

Размер WS2812  5x5мм  то количество что у вас на схеме спокойно разместится на вашей платке!

27 минут назад, RIMUS1989i сказал:

светодиоды будут в корпусе 0805

Его размер 1,25х2мм это будет мелко и не красиво,  дело конечно ваше!

 

31 минуту назад, RIMUS1989i сказал:

На сколько я разгружу МК? 

 я бы не разгружал МК а на оборот взял 60 - 100 ногий корпус и не парился с логикой

Сергей.

Link to comment
Share on other sites

Вот не так давно приходилось делать бегущую строку на WS2812  ее размер 160х1000  светодиодов 8х60, удобно то что все по одному проводу и ни каких соплей. Жалко только что видео не передает в полной мере цвета и движение, на самом деле все плавно и красиво!

https://www.youtube.com/watch?v=3uDQ-0GVU8o

Плотно посаженые светики думаю на анализаторе будут смотреться очень даже не плохо.

 

Edited by optima

Сергей.

Link to comment
Share on other sites

Хочу сделать наподобие этого https://www.youtube.com/watch?v=EjbKtEFmIM8

Будет бутерброд, сперва накладка из непрозрачного оргстекла с профрезированными отверстиями 5x2мм, затем плата с самой матрицей, а за ней уже модулем плата контроллера. Перед накладкой будет какой нибудь светофильтр, например как в LCD дисплее.

777869459_.JPG.fda5ea93cf282036b96335e3d2bf20b1.JPG

2132583679_Ledmatrix.JPG.60f250bab77de3726a3148d23c57a938.JPG

MC.JPG.be5cf86a57740ec9a26f503a15c3144c.JPG

1 час назад, optima сказал:

Размер WS2812  5x5мм

Плата уже будет минимум 100мм по высоте.

1 час назад, optima сказал:

а на оборот взял 60 - 100 ногий корпус

у них ценник уже выше. Например atmega128 стоит на 250р. дороже atmega328 со всей логикой. И тактовая частота 128й 16, вместо 20. хотя без логики конечно этого за глаза хватит.

38 минут назад, optima сказал:

будут смотреться очень даже не плохо.

Но опять же все упирается в размер, плата будет стоять в усилителе высотой 100мм. Были бы эти светики в более маленьком корпусе.:(

Link to comment
Share on other sites

Посмотри лучше в сторону stm32  ценники на них по гуманнее,  да и начинка покруче 

12 минут назад, RIMUS1989i сказал:

Хочу сделать наподобие этого

Вот и у них  МК  64 ноги

14 минут назад, RIMUS1989i сказал:

Плата уже будет минимум 100мм по высоте.

Можно немного и сократить количество, хоть ws2812 и размером 5х5 в нем ведь 3 светодиода! по мимо плюшек в виде цвета и яркости нет необходимости в установке дополнительных ключей в виде транзисторов или ULN

Сергей.

Link to comment
Share on other sites

3 часа назад, RIMUS1989i сказал:

Ну а поповоду моей схемы что думаете? На сколько я разгружу МК? 

Понятия не имею, насколько. Думаю, несущественно.

Я делал анализатор 10 полос по 15 светиков красно-зеленых, без всяких там регистров на 32-й меге.

 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...
  • 9 months later...

Всем привет. Сегодня программно "допилил" драйвер RGB дисплея 20Х24 светодиода. Количество цветов 65535 на пиксель,частота обновления экрана с использованием FFT 78 Герц, если просто вывести картинку то 230 Герц. Для формирования цветов использовал 4 16ти канальных драйверов (16-Channel High Accuracy Constant Current LED Driver With 16bits Multiplex-PDM Control for Dynamic Scanning Systems), данные отправляю по аппаратному SPI. Столбцы переключаю по схеме из 1го поста. На макетке не поместился один сдвиговый регистр, поэтому на видео 16 столбцов, программно выводится 24.

 

UPD. МК ATmega328P на частоте 20МГц.

Link to comment
Share on other sites

  • 1 year later...

Всем привет. 78 герц не так уж хорошо, в одной из тем я писал что для LED дисплея она (частота обновления) должна быть не менее 600 герц. Этот вывод я нашел в интернете в одной из статей. Т.К. при малой частоте обновления экрана, хоть не видно мерцания, но это очень сильно влияет на зрение. По ощущениям, как будто смотришь на сварку (испытал на себе) :D.  Эту частоту не надо путать с частотой обновления кадров.

В итоге добился частоты обновления 2500 Гц, при тактовой в 16Мгц. Тактовую частоту можно повысить до 30Мгц. 

Уже заказана финальная печатная плата 4 слоя.

 

 

Link to comment
Share on other sites

Даже не вступая в дискуссию о вредности / невредности мерцания и нижней допустимой  частоте. Ваш индикатор - это не дисплей компьютера или смартфона и человек в здравом уме не будет пялиться в него часами, поэтому проблема притянута за уши, имхо.

"Я не знаю какой там коэффициент, я просто паять умею. "

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • За стрелочку не забыл? 
    • Ну да, получается, что по каплям. Завал на работе, плюс, хожу чумной от вакцины. Я всё напишу, только не сию секунду. На самом деле, там всё элементарно. Просто, существует несколько моментов, на которые мало кто обращает внимание. И заблуждений куча, как же без них. А насчёт номинального /максимального вых. уровня корректоров я, всё же, скажу пару слов сейчас. Во-первых, никакие определения /методики на тему "вот тот уровень, при котором THD достигнут столько-то%, мы и будем называть номинальным" в данном случае неуместны. Корректор - не усилтель с регулятором громкости, который можно крутить до достижения какого-то там оговоренного уровня THD. Есть головка, есть корректор с жёстко заданным Кус, а какими там получатся искажения при проигрывании пластинки, такими они и будут, и это целиком определяется схемотехникой. Точно так же и с максимальным уровнем - какая схемотехника, такой и запас по перегрузке. Во-вторых, какая разница, каким окажется этот выходной уровень. Ведь, в одинаковой мере усиливается как сигнал, так и шум, что означает постоянное С/Ш при одинаковых факторах, определяющих это С/Ш - тип входной лампы и её режим, схемотехника первого (иногда и второго) каскада и т.п. А дальше усильте хоть на 20, хоть на 40 дБ - пока усилитель работает в линейном режиме, С/Ш будет постояннным. Собственно, я повторяю то, что уже написал @Lexter  4-мя постами выше. А вых. уровень необходимо измерить только для того, чтобы "скормить" это значение Спектре - для того, чтобы она знала, относительно какого уровня мерить шум.   Простите, но это вообще какая-то каша. 1. Максимальный уровень незачем ограничивать. От него не зависит С/Ш. Ну, или объясните, зачем его ограничивать. 2. Ку? При чём здесь Ку? Повторю ещё раз, С/Ш от Кус не зависит. 3. Про 1% уже писал. 4. Да хоть 100 В, что от этого изменится, в смысле темы топика?    
    • Да - этот - который две войны начал) суть то в другом - когда приезжают туда и с улыбочкой говорят - она утонула, как то по другому начинаешь принимать происходящее), ес честно признаться - я сам на то время - на эту оплошность пу не обратил внимание, после он редко с себя масочку снимал). 
    • Конечно! Если согласятся люди сравнить опять. Иначе - нет смысла. 20000 - вполне достаточно. Дальше уже нюансы. Но часто  они решают. Да! Люблю банки в БП! Да, с Дедом так же было, когда он Грюндик твикнутый услышал. Там только пара на канал дарлингтонов на выходе после УН, да на его 4 Ом. Но там теперь в  БП 66000мкФ в плечо на 2 канала (фильтр сетевой, снабберы, шоттки, буферы после селектора и РГ с отдельным питанием, толстые дорожки и т.п. по умолчанию. Эффект - ВАУ! Серёга откинулся в кресле и сказал - класс! Вот это всё шикарно! Потом я уехал, а он остался. Под впечатлением.
    • Этот что ли? Который дверь не мог открыть?  Косишь когда надо?
    • Согласен. Переходы срезов (или как там обзываются) сосны радуют глаз. А в середине ручка РГ - класс! Только цвет ручки немного в диссонансе с панелью.

  • Миниатюрная электромагнитная защелка скрытой установки с RFID считывателем

  • Similar Content

    • By fander36
      Здравствуйте. Возник ниже стоящий вопрос.
      Cуществующие технологии отладочных плат для AVR.
      Хотелось бы узнать больше об этом, но в интернете не нашел ничего дельного.
    • By _Nikotin_
      Доброго времени суток, господа. Никик я не могу прошить атмегу. Всегда выводится такая ошибка:
      avrdude: Yikes!  Invalid device signature.
               Double check connections and try again, or use -F to override
               this check.
      Раньше у меня получалось прошивать ее,  но на 16 МГц. Решил, что способен прошить и на 8 МГц. Скачал пару библиотек и.... ничего, выдало ошибку. Первым делом я подумал, что все плохо с проводкой. У меня, кстати, TQFP32 адаптер, но я подумал, что контакт через макетную плату и UNO слишком слаб, поэтому припаял к выводам адаптера провода и вставил их в UNO. Как итог - ничего не поменялось. Менял я и UNO на NANO, переделывал схему (вставлял резистор от RES до VCC и наоборот, вставлял конденсатор  между RES и GND у UNO), подключал резонатор на 16 МГц. А ошибка вся таже. Чё делать?
    • By kasatik
      Всем привет.
      Ранее уже выставлял по ошибке фьюзы на тактирование с внешнего резонатора (Ext. Crystal Osc.), но тогда обошелся малой кровью, т.к. удалось затактировать "с пальца" и программатор хотя бы увидел камень. Но в этот раз поставил тактирование с внешнего сигнала (Ext. Clock), и фокус не удался. Программа крутится, светодиоды моргают, а комп не видит. С пальца не вышло, также как и с кварцем на 4Мгц. Подавал просто 1кГц c генератора на XTAL1. Вывести пациента из комы не удалось  Вопрос: почему прошлый раз прокатило, и в чем принципиальное отличие от этого режима? Что он ожидает от меня на вход?


    • By Дмитрий239
      Создал секцию:
      SECTIONS { .rodata : { . = ALIGN(16); _start_cmdList = .; *(.cmdList) KEEP(*(.cmdList)) _stop_cmdList = .; } } объявил структуру и указатель на начало:
      typedef struct { const char *cmdName; const void (*const commandVoid)(uint8_t, char *[], char[]); } CommandHandler; extern const CommandHandler _start_cmdList[]; для теста занёс одну функцию:
      const void kek(uint8_t argc, char *argv[], char answ[]) { strcpy_P(answ, PSTR("wow")); } static PROGMEM const char __attribute__((__used__)) kekAlias[] = "lol"; const CommandHandler __attribute__((section(".cmdList"))) __attribute__((__used__)) CMDHandler_kek = {.cmdName = kekAlias, .commandVoid = kek}; и проверяю:
      const CommandHandler *in = &_start_cmdList[0]; const CommandHandler *out = &CMDHandler_kek; if (in == out) uart.println(F("ok")); uart.println((unsigned int)(in), HEX); uart.println((unsigned int)(out), HEX); uart.println((unsigned int)out->cmdName); uart.println((unsigned int)out->commandVoid); uart.println((unsigned int)in->cmdName); uart.println((unsigned int)in->commandVoid); Выводит:
      1560
      1560
      124
      801
      12800
      0

      МК атмега168.
      Platform IO
      Avr gcc 11
      Линкер скрипт стандартный, с добавкой сверху

      Вопрос: как получить первый элемент массива в секции?
    • By Anton Chehonin
      Вот сам код программ
       
      Текст программы МК
      /*******************************************************
      Chip type : ATmega8
      Program type : Application
      AVR Core Clock frequency: 8,000000 MHz
      Memory model : Small
      External RAM size : 0
      Data Stack size : 256
      *******************************************************/

      #include <mega8.h>
      #include <delay.h>

      // Alphanumeric LCD functions
      #include <alcd.h>

      // Standard Input/Output functions
      #include <stdio.h>
      #include <stdlib.h>

      // Declareyourglobalvariableshere

      float s;
      unsigned long int k0=0,k1=0,k2=0,k3=0,k0123=0;
      unsigned long int k4=0,k5=0,k6=0,k7=0;//k4567=0;
      unsigned long int k8=0,k9=0,k10=0,k11=0;//k891011=0;
      unsigned long int k12=0,k13=0,k14=0,k15=0;//k12131415=0;
      unsigned long int k16=0,k17=0;
      char k=0;

      void main(void)
      {
      // Declare your local variables here

      char buffer[20];


      char a,b,c,d,e,f;
      // Присваивание переменным a,b,c численные значения 63 05 00 01 CF A1
      a=0b01100011;
      //63
      b=0b00000101;
      //05
      c=0b00000000;
      //00
      d=0b00000001;
      //01
      e=0b11001111;
      //CF
      f=0b10100001;
      //A1

      DDRD.2=1;
      PORTD.2=0;

      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: On
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 9600
      UCSRA=(0«RXC) | (0«TXC) | (0«UDRE) | (0«FE) | (0«DOR) | (0«UPE) | (0«U2X) | (0«MPCM);
      UCSRB=(0«RXCIE) | (0«TXCIE) | (0«UDRIE) | (1«RXEN) | (1«TXEN) | (0«UCSZ2) | (0«RXB8) | (0«TXB8);
      UCSRC=(1«URSEL) | (0«UMSEL) | (0«UPM1) | (0«UPM0) | (0«USBS) | (1«UCSZ1) | (1«UCSZ0) | (0«UCPOL);
      UBRRH=0x00;
      UBRRL=0x33;


      // Alphanumeric LCD initialization
      // Connections are specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTС Bit 0
      // RD - PORTС Bit 1
      // EN - PORTС Bit 2
      // D4 - PORTС Bit 3
      // D5 - PORTС Bit 4
      // D6 - PORTС Bit 5
      // D7 - PORTD Bit 7
      // Characters/line: 20
      lcd_init(20);
      lcd_clear();
      delay_ms(1000);
      while (1)
      {
      printf("%c%c%c%c%c%c",a,b,c,d,e,f); // отправка в порт

      //принимаем байты
      k=getchar(); // 0 байт
      if (k==99) {PORTD.2=1;}
      k0=getchar(); // 1 байт Активная энергия+
      k1=getchar(); // 2 байт
      k2=getchar(); // 3 байт
      k3=getchar(); // 4 байт
      k4=getchar(); // 1 байт Активная энергия-
      k5=getchar();
      k6=getchar();
      k7=getchar();
      k8=getchar(); // 1 байт Реактивная энергия+
      k9=getchar();
      k10=getchar();
      k11=getchar();
      k12=getchar(); // 1 байт Реактивная энергия-
      k13=getchar();
      k14=getchar();
      k15=getchar();
      k16=getchar();
      k17=getchar(); // 19 байт


      k0=k0«24;
      k1=k1«16;
      k2=k2«8;
      k0123=k0|k1|k2|k3;


      s=k0123;
      sprintf(buffer,"A+=%.4fkWh",s/2500);
      lcd_gotoxy(0,0);
      lcd_puts(buffer);

      // k4=k4«24;
      // k5=k5«16;
      // k6=k6«8;
      // k4567=k4|k5|k6|k7;
      // s=k4567;
      // sprintf(buffer,"A-=%.4fkWh",s/2500);
      // lcd_gotoxy(0,1);
      // lcd_puts(buffer);
      //
      // k8=k8«24;
      // k9=k9«16;
      // k10=k10«8;
      // k891011=k8|k9|k10|k11;
      //
      //
      // s=k891011;
      // sprintf(buffer,"R+=%.4fkVarh",s/2500);
      // lcd_gotoxy(0,2);
      // lcd_puts(buffer);
      //
      //
      // k12=k12«24;
      // k13=k13«16;
      // k14=k14«8;
      // k12131415=k12|k13|k14|k15;
      // s=k12131415;
      // sprintf(buffer,"R-=%.4fkVarh",s/2500);
      // lcd_gotoxy(0,3);
      // lcd_puts(buffer);

      delay_ms(1000);
      lcd_clear();

      }
      }
×
×
  • Create New...