Jump to content

Recommended Posts

@Alexeyslav , спасибо за Ваш подробный развернутый ответ.

 

Получается, мне нужно взять массив [240х128] битов (т.к. дисплей монохромный), и всё "рисовать" в него. А затем периодически отрисовывать этот массив на дисплей.

240 * 128 = 30 720 бит = 3 840 Байт = 3,8 кБ только на массив. + какое-то место для вспомогательных переменных + много места для собственно полезных действий контроллера.

Дофига... Разве что искусственно занизить разрешение в два раза. Тогда 120*64=1кБ. Тогда на Ардуино с Атмега328 можно попробовать. Вот только кроме дисплея туда уже почти ничего "полезного" не влезет. (

Делать отдельный контроллер для дисплея? Тогда надо научиться как-то "общаться" этому контроллеру дисплея и основному контроллеру с полезной программой.

 

По поводу заполнения строки:

On 19.07.2019 at 23:38, Alexeyslav said:

...регистр строки в который ты побитно через SD1 и SD2 с общим клоком CP заносишь данные на одну строку...

...вот это не очень понятно. Можно поподробнее? Например, работаем мы с верхней половиной. Тогда у нас есть SD1 и CP. Какие сигналы я должен на них подавать, чтобы передать часть строки "00001111"? После каждого нолика или единички на SD1 надо подавать импульс на CP? Или я неправильно уловил суть?

И еще, меандр на входе ME(M) должен быть как-то синхронизирован с вводом строк или синхронизирован с чем-то еще?

Остальное, вроде бы, Вы очень подробно объяснили, всё понятно, спасибо.

Share this post


Link to post
Share on other sites
Posted (edited)
39 minutes ago, Lerik-Co said:

Тогда на Ардуино с Атмега328 можно попробовать. Вот только кроме дисплея туда уже почти ничего "полезного" не влезет

Есть же прекрасная флеш память тык. Стоит копейки. Скорости SPI для этого объема будет за глаза. Все картинки загоняете во флеш , напрмер с помощью CH341A. и вся память мк только для "полезного". С графическими дисплеями без флэш ни кудаB)

Edited by Demonrostov

Share this post


Link to post
Share on other sites
23.07.2019 в 10:30, Lerik-Co сказал:

После каждого нолика или единички на SD1 надо подавать импульс на CP?

Работает как любой регистр сдвига - устанавливаешь 1/0 на входе и подаёшь импульс на CP чтобы его протолкнуть в регистр.

23.07.2019 в 10:30, Lerik-Co сказал:

меандр на входе ME(M) должен быть как-то синхронизирован с вводом строк или синхронизирован с чем-то еще?

Вообще это не обязательно, но могут быть спецэффекты когда часто обноволяешь дисплей. Необходимость этого сигнала обусловлена самим принципом работы жидких кристаллов - если на них просто подать постоянное напряжение то их прозрачнсоть вскоре вернётся к первоначальной, поэтому тчобы держать картинку на дисплее нужно постоянно менять полярность на ячейках. В наручных часах это делается с частотой примерно 10Гц, в компьютерных дисплеях может доходить и до 400Гц. Чем выше частота тем больше энергии тратися на удержание картинки, и тем она контрастнее.

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

Join the conversation

You are posting as a guest. 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...

  • Similar Content

    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • Guest Денис
      By Guest Денис
      В общем, есть такое чудо китайской техники (фото)
      Что оно может:
      1. Заряжаться через microUSB порт
      2. Кнопка вкл/выкл, она же переключает режимы
      3. 3 режима свечения светодиода (он светит разными цветами)
      Что я хочу сделать:
      1. Пункты 1 и 2 выше
      2. Разнообразить количество режимов, переливание статичный цвет и тд...
      Вопрос: как это сделать? что купить?

      P.S. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


    • By Reptile
      Доброго времени суток. Пытаюсь восстановить работоспособность колонок Top Device TDE 261/2.1. Колонки не раз ремонтировалась по части УНЧ, при очередном ремонте по ошибке (одинаковые разъемы) с трансформатора было подано переменное питающее напряжение на входы (разъем AUX/MP3) аудиопроцессора PT2313L  (3,10,14 ноги - AGND, R_IN2 L_IN2). В результате чего выгорел сам аудиопроцессор PT2313L. PT2313L был заменен. Но колонка по прежнему не запускается. Как я понял, не запускается сам PT2313L, на его аудиовыходах (ноги 24, 25) сигнала нет. Передняя панель работает: индикация, кнопки, енкодер. Имеется подозрение, что вместе с процессором выгорели линии DATA и/или CLK на MCU, так как MCU и PT2313L соединены по этим линиям напрямую друг с другом. В МК и всей этой цифровой штуке не очень шарю, не знаю, как грамотно проверить работоспособность этой цифровой части, поэтому прошу помощи - Возможно ли какими-либо способами восстановить колонку или уже всё... 
      Из приборов, к сожалению, только мультиметр, осциллограф отсутствует.
      Ниже немного измерений.
      Напряжения на линиях: STD-BY-ждущий режим (в скобках рабочий режим):
      DATA - 2.31В (1.9В).
      CLK - 0.125В (0.135В).
      Сопротивление между выводами:
      CLK_MCU-DATA_MCU - 47 Ом. 
      CLK_MCU/DATA_MCU-GND - около 0.22 Ом и там и там. Звонится в обе стороны.
      Питание MCU 5В, (4.6В STD-BY-ждущий режим, 4.0В рабочий режим и со временем также почему-то может падать до 3.6В)
      MCU - не известен, нет маркировки. 18 Выводов, DIP.
      Ноги MCU, которые удалось опознать:
      1 - DATA
      18 - CLK
      3 - GND (?)
      5 - GND (?)
      ? - они соединены вместе
      14 - VCC
      17 - not used (n/a)
      15, 16 - OSC
      ET6202 - управление индикатором, Control LED drive circuit
      Фото плат (под сполером) и даташиты прилагаются.
      Схемы данных колонок не имеется. Все что удалось найти это схема чуть более старшей модели TDE280/2.1, с данными колонками она мало что общего имеет, лишь общий принцип, узлы довольно сильно отличаются, но прикреплю на всякий, для общей информации.
      PT2313L
      ET6202
      TDE280
       
    • By bustamax
      Привет хочу сделать лазерный проектор по типу элт монитора. Из vga разъёма выходят 2 Синала срочной и кадровой развёртки. Со строчной разобрался. Вопрос по кадровой. Она будет реализована с помощью гальванометра который после каждой строки отклоняет зеркало на какой то угол ( пускай строк 480 тогда если взять напряжение управления гальво от 0 до 10 вольт и шаг задать 0,01 в - будет 1000 строк) даже если строк будет 720 в 1000 они уместятся.
      Так вот принцип придумал такой - с выхода Hsync поступает сигнал строки - микросхема прибавляет пускай напряжение +0,01 вольт, затем поступает 2й сигнал от Hsync микросхема прибавляет ещё 0,01 вольт ( напряжение 0,02) наш гальво отклонился уже до 3й строки и так далее пока не поступит сигнал VSYNC о смене кадра - Гальво возвращается в 0.
      Хотя правильней вот так:
      Либо сделать что бы гальво двигался при отсутствии сигнала Hsync - скажем поступает сигнал строчной развёртки отрабатывает строчная развертка затем сигнал становится логическим 0 и тут срабатывает гальво и т.д пока не придёт сигнал от vsync (логическая 1).
       
      по факту схема даж считать не должна - есть сигнал прибавляем есть другой сигнал сбрасываем
       Я в электронике логический 0 но спаять по приведённой схеме смогу)
      если кто поможет спасибо
       
       
  • Сообщения

    • Мда... Ему про Фому, он про Ерёму. Ему говорят возьми программатор для чтения, он берет дурину.
    • Ладно,пока усилитель работает нормально на прогоне. Ток покоя только настрою по лучшему звучанию и стабильности. Попробую укладкой проводов уменьшить,у меня Мауро 4 канала 2 платы от одной обмотки без фона работают таким образом в одном корпусе.
    • Неа ,класс работы не при чём,аналогичная фишка в полумостовых ибп там с помощью диодов дополнительное смещение при норм мощности на Эмиттерных резисторах есть значительное падение напряжения, это всё вместе позволяет быстрей закрыть транзистор(неважно полевик или биполярник) ,искажения скорей всего вырастут -но зато можно избежать сквозняка при частотах 100Кгц меандр или 1 Мгц синус Спросите у самодельщиков ибп закрыть быстрее транзюк важнее чем открыть Собственно я ланзар на облегчённых транзюках и использую как усилитель сигналов до 1 Мгц кни до 1% не имеют значения Да любители аудио любят рассуждать о времени обратного восстановления диодов для 50Гц тр-ра ,а о времени выключения биполярника скромненько умалчивают,типо главное открыть 
    • Он добавляет скачкообразности в запирании полевика, без него будет более медленное и пологое запирание. Как то ты безсистемно расссказываешь про проблемы. Не ясно, что это за картинки, где сняты и как. Пробивается 100 Гц на выход при 5 вольтах на выходе или при 35? Я бы начал с транса, к обмотке подключал разную нагрузку, и измерял снижение переменки на обмотке, затем то же самое после моста и 14000 мкФ, без ЛБП. Лампочки как нагрузку подключать нельзя. Основные точки нужно посмотреть вольтметром и ослом, может у тебя нет на ОУ минус питания, или еще какие аномалии. Есть много вопросов, какой полевик, какой конденсатор на выходе и т.д. Я недавно мучал трансформатор от UPS, помню, что при диодах выпрямителя MBR10100, емкости ~13000 мкФ (3 штуки 4700 мкФ), пульсации при 2 А были 0,5 вольта, если склероз мне не врет, это все без ЛБП. Нагружал электронной нагрузкой.
    • ну мало ли вдруг я ошибаюсь, спросить у знатоков будет не лишним. Стало быть при 32 омах нагрузки 250 мкф срежет по уровню -3дБ все ниже 20 Гц, а при 1000 мкф - ниже 5 Гц. Хм... в принципе 250-470 мкф кажутся разумными цифрами. 
    • Есть. И Вы её уже озвучили. Чего ж Вам боле? Этот самый  под миллифарад, вместе с нагрузкой 32 Ом, даст частоту среза 5,3 Гц. Если нагрузка выше - частота, естественно, уменьшится. C1, R4 дадут 0,34 Гц,  C5, R9 - 0,72 Гц. Не могу понять, зачем так глубоко залазить в инфразвук. Но, как говорят - художник. Он так видит.
×
×
  • Create New...