[Решено] включить прерывания изнутри прерывания таймера

Кастотиу
Вт 16 января 2018 г. 1:45
Всем привет,

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

Кажется, что Hardwaretimer отключает прерывания, когда он запускается, потому что внутри таймера 2 я запускаю таймер 3, но он не стреляет, пока не сразу же не закончен призыв к таймеру 2.

Пример приведен ниже, упрощенной, но я должен заключаться в том, что мне нужно запустить таймер A, когда он запускается, мне нужно запустить таймер B, однако таймер B может потребоваться, прежде чем призыв к завершению.

Короче говоря, мне нужно контролировать яркость моей rgbmatrix, и для этого мне нужно контролировать время матрицы OE (вывода), однако я не могу запустить этот таймер, пока не будет сделана защелка с последнего кадра, таймер - триггеры Защелка, чтобы сделать его видимым на Matrixx, а затем продолжает строить следующий кадр, тем временем таймер B должен начинаться после защелки и должен быть вызван (запускается), чтобы отключить OE в определенное время, чтобы отключить вывод матрицы.

Надеюсь, я прояснил себя, но вопрос очень прост, мне нужно включить перерывы, что, кажется, жестко отключает, когда увольняет прерывание.

Я попытался поместить прерывания () в качестве первой линии внутри void isrupdate, но ничего не изменится, iSrupdate1 называется как можно скорее; 1466029 0 1 1 49035 255 1 254 37128 0 1 7 18894 0 34 255 29 0 34 255 1 0 1 255 1 0 1 255 1 0 5 255 1 0 1 255 19 0 1 255 64 0 27 255 1 192 58 0 1 3 24 255 19 0 1 63 1 255 1 0 12 255 1 240 1 0 1 255 1 0 1 255 38 0 1 63 1 0 1 255 57 0 1 31 57 255 1 0 1 255 4 0 17 255 1 224 1 0 1 255 1 0 7 255 7 0 17 255 23 0 1 255 65 0 1 31 70 255 1 248 12 255 1 224 53 0 1 15 1 255 1 0 1 255 1 0 5 255 1 240 1 0 1 255 1 0 1 255 70 0 1 31 74 255 1 224 22 255 1 254 60 0 15 255 1 248 1 255 1 0 10 255 1 192 1 0 1 255 1 0 1 255 10 0 1 3 1 0 1 255 71 0 33 255 1 252 57 0 24 255 63 0 1 31 1 0 1 255 2 0 16 255 1 252 1 0 1 255 1 0 6 255 1 254 33 0 1 63 1 0 1 255 50 0 1 7 1 255 24 0 1 63 3 255 1 0 15 255 1 128 1 0 1 255 1 0 1 255 1 0 57 255 1 0 1 255 20 0 1 1 1 0 1 255 81 0 1 3 1 255 1 0 15 255 1 248 1 0 1 255 1 0 5 255 1 0 24 255 1 240 63 0 1 63 69 255 1 240 15 255 1 252 51 0 15 255 1 224 1 255 1 0 1 255 1 0 10 255 1 128 1 0 1 255 1 0 1 255 73 0 1 1 1 255 63 0 25 255 1 224 57 0 1 15 1 255 1 0 1 255 1 0 1 255 1 254 1 0 1 255 1 0 1 255 59 0 16 255 1 192 69 0 1 127 29 255 1 224 62 0 1 63 1 255 1 0 11 255 1 240 1 0 1 255 1 0 1 255 1 0 1 255 18 0 1 15 1 0 1 255 39 0 1 63 50 255 1 0 1 255 15 0 1 63 1 255 1 0 1 255 1 0 2 255 4 0 1 63 1 255 1 0 1 255 66 0 1 63 70 255 1 252 23 255 56 0 1 31 62 255 1 240 1 255 1 0 1 255 1 0 11 255 3 0 1 127 1 255 46 0 10 255 46 0 5 255 1 128 1 0 1 255 15 0 1 31 28 0 1 3 1 15 1 255 1 0 2 255 1 240 1 0 1 255 1 0 51 255 1 252 6 255 81 0 1 1 1 255 58 0 20 255 53 0 1 1 1 255

Дэнниф
Вт 16 января 2018 г. 1:54
Мне нужен еще один таймер, чтобы стрелять трудно сказать, что вы имели в виду под "огнем".

Чипы CMX разрешают приоритет / субпьорельность по поводу его прерываний, поэтому посмотрите на таблицу данных, чтобы увидеть, как это можно настроить-ISRS повторно вводит.

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

С учетом вышесказанного, как правило, вам не нужно что -то такое причудливое, чтобы ваша «проблема» потенциально имеет решение, сильно отличающееся от вашего текущего подхода.

Кастотиу
Вт 16 января 2018 г. 2:01
Под огнем я имею в виду, когда время таймера истекает и вызывает метод прерывания.
Не полностью ли, что я хочу сделать, как вы упоминаете, на самом деле является цепочкой прерываний, так как я хочу, чтобы Timer B был назван, даже когда таймер A не закончил.

Хотелось бы, чтобы было более простое решение, но предсказуемо мне нужно отключить OE в определенное время (просто установите вывод до высокой), таймер A выполняет кучу кода с высоким перфузором для создания следующего кадра, поэтому он не может остановиться Чтобы проверить, будет ли сделано время отключения OE, в основном проверка должна быть сделана на каждой строке и потреблять больше процессора, чем код, чтобы построить следующий кадр. Также таймер B для OE должен быть запущен только после того, как данные матрицы были зафиксированы, поэтому таймер B должен начать с таймера, прерывание.

victor_pv
Вт 16 января 2018 г. 3:23
Как сказал Дэнниф, разные прерывания имеют разные приоритеты. Проверьте таблицу данных, чтобы увидеть, какой из таймеров имеет более высокий приоритет, и что один должен быть в состоянии «стрелять» внутри другого.

Кастотиу
Вт 16 января 2018 г. 6:46 утра
Спасибо!!!
Установка приоритетов сделал работу.
static void input_capture_mode(timer_dev *dev, uint8 channel);

Дэнниф
Вт 16 января 2018 г. 11:15
Я еще не убежден, что вам нужно что -то, что причудливое.

Первый вопрос должен заключаться в том, можно ли включить штифт OE в середине передачи рамы. Если да, вы можете просто водить его с помощью PWM Pint. Рабочий цикл 0-100%.

Если штифт OE может быть включен только в конце передачи рамы, ваш поток ISR должен быть таким:
static void input_capture_mode(timer_dev *dev, uint8 channel);

Кастотиу
Ср 17 января 2018 г., 5:09
Код, который вы вкладываете там, почти идентичен тому, что я использую с двумя таймерами, однако я заправляю матрицу на BCM, а не на ШИМ для тонов, поэтому, прежде чем возобновить Timerb, на Timera ISR мне нужно установить Специальное время на TimerB, так как время для того, чтобы быть OE, зависит от веса колонны бита, который был процесс в то время, поскольку у меня 16 тонов на цвет, время OE включено во множестве 2 4 раза.

Когда яркости составляет 15 задержек, не является проблемой, поскольку время включения OE составляет 16 мкс, 32 мкм, 64 мкл, 128 мкм для 4 битов, однако определенно задержка является проблемой, когда яркость составляет 0, поскольку для 4 битов мне нужно дать бит. 0 для 1 мкс, бит 1 для 2 мкс, бит 2 для 4 мкс и бит 3 для 8 мкс, обработчик TimerB для бита 0 отстает около 700 нс, так что в конечном итоге пульс 1.7 мкс вместо 1 мкс. Затем, когда яркость составляет 0 цветов тона 1, 3, 5, 7, 9, 11, 13, 15 не будет отображаться идеально, но нельзя заметить.

Я подумал о том, чтобы водить OE с PWM, однако я боялся (теория), что дисплей будет отображать артефакты, если, когда OE включен/отключен во время защелки, и искал что -то более предсказуемое.

Однако для тестирования я постараюсь управлять OE с ШИМ только после завершения защелки и до начала предыдущего кадра, если это работает, мне не нужен Timerb

Кастотиу
Ср 17 января 2018 г. 5:57 утра
Я загрузил видео, чтобы показать текущий прогресс контроля яркости, здесь я установил яркость на ноль, а 700NS ISR LAG делает нечетные числа немного «ярче», когда яркость равна нулю, вообще не заметна, однако я попытаюсь сделать Используйте PWM, чтобы контролировать OE

RGB Animated Matrix
ViewTopic.PHP?F = 19&t = 3104

.

Дэнниф
Ср 17 января 2018 г. 11:59
Для помещений в помещении, рабочее цикл 0.1% или ниже неразличимы от темноты, даже если вовлечены светодиоды с высокой яркости. Этот процент выше для наружных применений.

Поэтому, если вы обновляете свой дисплей на 100 Гц (намного выше, чем необходимо), минимум на цикле, который вам нужно нажимать, - 0.1% * 10 мс = 10US. На 72 МГц MCU, который переводится на 720 клещей. не должно быть проблемой.

Если это так, есть и другие способы решения минимальной проблемы DC.

Кастотиу
Ср 17 января 2018 г., 17:17
Я переоценил несколько булавок, поэтому OE заканчивается на штифте ШИМ, я сделал базовый тест, а ШИМ запускается по умолчанию при 1 кГц, что даже достаточно близко, что мне нужно, матрица создает огромный мерцающий артефакт, едва ли это можно отличить анимация, мне нужно запустить ШИМ, по крайней мере, в 1000 раз быстрее.

В случае матрицы RGB и BCM мне нужно запустить, по крайней мере, при температуре обновления 200 Гц или артефакты начинают представить, это лучше описано здесь
http: // www.летучие мыши.сопутствующий.uk/readme/art_bcm_1.htm

Временный срез для бита 0 составляет всего 15 мкс, если я запускаю непрерывный ШИМ на OE без ухода за синхронизацией с защелкой, тогда мне понадобится не менее 10 импульсов ШИМ для каждого бита, чтобы избежать артефактов, которые будут переводить на период 1 мкс или 1 МГц ШИМ.

Как изменить частоту ШИМ по умолчанию 1 кГц? На Arduino, по -видимому, есть с SetPwmFrequency (), однако, по -видимому, эта функция недоступна на STM32.

Другим способом было бы синхронизировать включение ШИМ в начале каждого бита, когда битовая защелка, тогда мне понадобится меньше импульсов ШИМ, так как служебные циклы будут справедливыми для всех битов, однако по умолчанию 1 кГц даже не близок для этого тоже не близок для этого.

На изображении вы можете увидеть
D: целый кадр (250 Гц)
OE: Запуск PWM на 1 кГц (который за один период требует 4 пикселей для рендеринга)
Защелка: когда данные каждого бита отправляются в матрицу, есть увеличение для бита 0, которое занимает 15 мкс, если я хочу, чтобы PWM работал, мне нужно поместить не менее 10 импульсов OE, по крайней мере, 10 PWM синхронизировать с защелки.

Кстати, я запускаю синюю таблетку, разбросанную на 128 МГц.

Стивестронг
Ср 17 января 2018 г. 18:44
Ну, я не могу понять, почему вам все равно понадобится BCM, это просто ШИМ с повторно переменным рабочим циклом.
ИМО, это эквивалентно «нормальному» ШИМ с постоянным рабочим циклом, в котором вы должны сохранить общее значение с низким/высоким импульсом в течение периода BCM.
Что также важно, я думаю, это самый высокий допустимый цикл, чтобы избежать мерцания, что было бы ~ = общий период поезда BCD.

Когда вы говорите о 200 кц, что именно это относится? До периода одного импульса или общего периода поезда BCM?

Шаймер F103 очень мощный, способен настроить по -разному. Вы также можете сделать некоторую синхронизацию с другими импульсами, когда это необходимо.
У вас есть сюжет, показывающий, как именно должны выглядеть ваши сигналы? Если возможно с периодами на нем?

Дэнниф
Ср 17 января 2018 г. 18:48
Мне нужно запустить ШИМ в 1000 раз быстрее. Конечно, можно запустить модуль ШИМ при 1 МГц.

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

Пример. PPM часто используется в качестве программной реализации PWM, когда оборудование недоступно. Не интуитивно понятно для реализации PPM через аппаратный модуль ШИМ.

victor_pv
Ср 17 января 2018 г., 19:00
Есть также возможность подавать таймер из другого таймера.
Я не помню всех деталей, таблица Datahash показывает, что он может сделать, но, возможно, это может устранить необходимость полностью иметь 2 ISR и оставить только 1.
Я думаю, что один из режимов состоит в том, чтобы позволить второму таймеру подсчитать, как только впервые достигнет определенного количества, который, как я понимаю, более или менее является тем, что вы пытаетесь сделать с двумя таймерами и ISR.

Кастотиу
Ср 17 января 2018 г., 19:11
Я не уверен, когда говорил о 200 кГц?, Единственное, что я упомянул, это то, что я хочу сохранить частоту обновления выше 200 Гц.

Все еще не получил никакого намека, как изменить частоту ШИМ. Вы знаете, как?

Текущий подход с двумя таймерами работает нормально, а синие таблетки позаботятся только о рендеринге, поэтому текущий подход достаточно хорош, однако, когда яркости как минимум, ISR представляет задержку 700NS, которая не имеет большого значения.

Однако я продолжаю искать альтернативы, если я могу управлять ШИМ в 1 МГц, мне может не понадобиться таймер SECOBD, однако из того, что я читаю, Shm также использует таймер, поэтому я не экономлю много, кроме некоторого кода.

В любом случае... все на столе, чтобы измениться,

Как мне изменить фруктую ШИМ?

Спасибо!!

Пито
Ср 17 января 2018 г., 19:16
Все еще не получил никакого намека, как изменить частоту ШИМ. Вы знаете, как? ViewTopic.PHP?F = 19&T = 3037#P39304
ViewTopic.PHP?F = 19&t = 3037&начало = 10#p39347

Кастотиу
Чт 18 января 2018 г. 6:34
Обработка OE с ШИМ работает отлично, пока я держу ШИМ выше 400 кГц, он не производит никакого артефакта для нижних тонов, поскольку даже бит 0, что является самым коротким, будет иметь до 8 импульсов, и мне не нужно синхронизировать с Захватывая, реальность в моем тестировании я мог бы спуститься до 200 кГц, прежде чем я начал увидеть некоторые доказательства того, что тона меняются специально, когда я поместил тестовый экран градиента, поэтому я натолкнулся на ШИМ до 400 кГц и является твердым, определенно сейчас с Шир гораздо точный контроль над яркостью, чем событие ISR,.

Спасибо!!!!!

Кстати, теперь я знаю, где информация о розовых булавках используется на изображении :)
Однако, к примеру, я все еще нет ясного, PWM на PB0 контролируется T3C4 (канал Timer3 4), но что означает T1C3N рядом с ним???

Кастотиу
Чт 18 января 2018 г., 6:54
Я загрузил видео на YouTube, чтобы показать, насколько гладко сейчас шаги по контролю яркости с OE и PWM, телефон, который у меня есть, кажется действительно хорошим, так что в видео нельзя ценить, но есть огромный разница между яркостью (0) и (15).

После того, как я несколько раз воспроизводил видео во время второго 3 и 4, я вижу несколько артефактов, которые не могут видеть невооруженным глазом, но на видео выглядит как какая -то призрака пикселей, у меня не было этого раньше, мне интересно, является ли частота ШИМ Проблема, так как не синхронизируется с защелкой, я посмотрю, увеличится ли ШИМ на 1.28 МГц имеют такую ​​же проблему.


Кастотиу
Чт 18 января 2018 г. 8:08
При дальнейшем тестировании я подтвердил, чего я боялся, «Unsynchronized» Shm на OE приносит на дисплей нежелательные артефакты, я увеличил частоту ШИМ от 400 МГц до 1.2 МГц и едва заметно, однако артефакты все еще есть, как вы можете видеть на изображении ниже с ШИОм.

Я бы поспорил что -нибудь, что связано с тем, что ШИМ не синхронизируется с защелкой, поэтому OE снижается и включает дисплей, пока данные все еще подаются в регистр сдвига.

Хорошо... Возвращение к чертежной доске :(

Мои кишки говорят мне, что если я синхронизирую начало/остановку OE PWM с защелки 0) Будет более чем достаточно, так как сейчас цикл работ будет справедливым и таким же, как и для каждого бита, потребуется дополнительные строки кода, как это было с двумя событиями, прикованными в цепочке ISR, однако я думаю, что это будет работать.

Дэнниф
Чт 18 января 2018 г. 11:34
Есть также возможность подавать таймер из другого таймера. иметь мастера, чтобы вызвать раб; или запуск подчинения в режиме с одним импульсом....
Что означает T1C3N рядом с ним??? отрицательный.

Кастотиу
Пт 19 января 2018 г., 6:09
Синхронизация OE с помощью защелкивающихся работ, как мечта, и нет проблем с артефактом на любом уровне яркости, и я могу без проблем до 300 кГц для ШИО. На данный момент я не могу быть счастливее и не думаю, что я сделаю больше изменений на дисплее яркости.

Стив написал,
«Ну, я не могу понять, почему вам все равно понадобится BCM, это просто ШИМ с повторно переменным циклом выполнения рабочего дня."

Из того, что я исследовал с BCM, мне нужно меньше инструкций, чтобы отобразить кадр с 128x32 при 16 тонах, достигая гораздо более высокой частоты обновления не менее 250 Гц.

В настоящее время основной цикл для отображения рамы в основном; Цикл для инструкций, которые я поместил ниже с помощью лишней дополнительной обработки.
Основанная на моей работе из объяснения http: // www.летучие мыши.сопутствующий.uk/readme/art_bcm_1.htm Однако изначально реализация была реализацией драйвера Matrix RGB Adafruit RGB, которую я в конечном итоге в конечном итоге изменял..

Инструкции по созданию кадра:
(1 x Сброс PWM OE) + (1 X SET LATCH) + (1 x row Address = "2 строки на инструкцию") + (128 x Clock Set) (1 x r1g1b1&R2B2G2 Данные "6 Цветов Установки на инструкцию") + (128 x сброс часов) + (1 x set pwm oe)) x 4 бита x 16 Rows = 16704 Инструкции на кадр

Таким образом, с инструкциями 16704 я могу отобразить целую рамку RGB на матрице, возможно, но, честно говоря, знайте, как сделать это с SWM вместо BCM.

Стивестронг
Пт 19 января 2018 г. 10:05 утра
Я бы с радостью сказал вам, как установить ШИМ, но я понятия не имею о ваших требованиях, о взаимосвязи между частотой ШИМ, частотой обновления, разрешением дисплея и всем необходимым сигналам (и синхронизации среди них) в целом.

Дэнниф
Пт 19 января 2018 12:30
Если он имеет последовательные входы, защелку и вывод OE, вполне вероятно, что он основан на последовательных переключателях, таких как HC595, где вывод OE полностью расстроен из входной схемы.

Реализация PPM через оборудование PWM просто имеет нулевой смысл.

Кастотиу
Пт 19 января 2018 г., 18:07
Да, большинство из этих матриц основаны на регистрации смены. И иметь разные линии сканирования.
Наиболее обычно 1/16. Означает, что он имеет 4 строки A, B ,, C, D, чтобы контролировать строку 1-16- & 17-32, поэтому, если адрес составляет 0b0001, то данные будут отправлены в строку 1 и 17, однако есть две линии данных на цвет R1, R2, G1, G2, B1, B2, поэтому после каждого защелки каждый изменение в адресе плюс 6 Линии обработки данных для управления цветами в двух строках одновременно существуют и другие матрицы, которые составляют 1/32, означает, что адресные линии являются A, B, C, D, E и Just R, B, G, однако 1/32 великолепны Для управления матрицей из 64 строк, поскольку обычно есть дополнительная адресная линия A, B, C, D, E и R1, R2, G1, G2, B1,

Помимо адреса и шины данных, есть еще 3 строки, защелка, выходные сигналы

Начните устанавливать адрес/данные при отправке поезда с часовыми импульсами (128 для 128 столбцов), а затем защелка отправляет данные в светодиоды.
Включение вывода - это просто переключатель на «Turnon/Offroaf» Весь дисплей.

Чтобы сделать это очень простым, как бы вы реализовали управление ШИМ с 1 строкой, 8 столбцов, 16 тонов, монохроматические при обновлении 250 Гц с 3 проводами? После этого просто вопрос масштаба.

В основном у вас есть 3 провода для управления 8 светодиодами подряд
R - Линия данных
L - защелка
C - часы

Дэнниф
Пт 19 января 2018 г., 19:37
Похоже, у вас есть мультисерд 16: 4, который управляет какой линией включен, а затем 3 набора регистров смены, для R/G/B.

Если бы я написал для этого драйвера, я бы установил буфер: он содержит информацию о конструкции дисплея (включая индекс текущего кадра или яркости) и рамки. Если вы напишите здесь рабский приемник (SPI или UART), вы можете превратить дисплей без контроллера в общий / универсальный дисплей и потенциально коммерциализировать его. В этой настройке мастер может просто связаться с устройством отображения с изображениями команд +, а раб будет обрабатывать остальные.

Каждый кадр затем содержит текущий индекс для сканируемой линии.

Процедура дисплея периодически вызывается из ISR. Процедура отображения будет выполнять что -то вроде этого:

1) заполнить регистры смены с помощью данных линейных данных;
2) Включите текущую линию MUX; Это предполагает, что линии MUX нельзя выключить.
3) Стрельб данных регистра смены;
4) продвинуть индекс линии к следующей строке;

Логика немного отличается, если вы используете недопустимое прерывание DMA на шаге 1) выше.

Ваша линия OE управляется отдельно через модуль SWM - используя PIN -код OE в ШИМ.

Вы можете взглянуть на эту основную логику на работе здесь (https: // dannyelectronics.WordPress.ком/ ... под руководством мент/) и здесь (https: // dannyelectronics.WordPress.ком/ ... под руководством мент/) и здесь (https: // wordpress.com/post/dannyelectro ... с.com/4113).

Фактическая реализация будет отличаться, вовлеченное оборудование будет отличаться, но основная логика одинакова.

Кастотиу
Сб 20 января 2018 г. 2:21
«Если бы я написал для этого драйвера, я бы установил буфер: он содержит информацию о конструкции дисплея (включая индекс текущего кадра или яркости) и рамки. Если вы напишите здесь рабский приемник (SPI или UART), вы можете превратить дисплей без контроллера в общий / универсальный дисплей и потенциально коммерциализировать его. В этой настройке мастер может просто связаться с устройством отображения с изображениями команд +, а раб будет обрабатывать остальные."

Если вы посмотрите на мои предыдущие посты со Стивом о рабов DMA SPI, это именно то, что делает задание синих таблеток, это водитель рендеринга RGB Matrix :)

Функция только для меня синей таблетки - использовать шину SPI для ввода ввода рамков ARGB (1555) и отображения их на матрице, внутренне использует буфер DMA для SPI и двойной буфер для матрицы, чтобы избежать разрыва экрана , делая это так, у меня есть весь процессор ESP8266 для создания кадров с моей графической библиотекой, как часы, анимация, смешивание, эффекты, OSD (на дисплее экрана) с альфа -опорой и т. Д., А затем отправьте кадр как есть синяя таблетка, где Он позаботится о кодировании рамки ARGB (1555) в то, что понимает матрица, в данном случае RGB (444)

Фактически, я могу отключить ESP8266 от STM, и последний кадр будет продолжать рендеринги на матрице, а также шина SPI-это полнодуплекс, где я могу отправлять инструкции из ESP как get/set RTC, установите яркость дисплея с ESP8266 или управление другими вещами, такими как зуммер (STM также кодировал синтезатор тона, который пробивается над одной и той же шиной SPI), шина STM DMA также приводит к прерыванию по сравнению с CS, поэтому сама из буфера DMA при повреждении прием Данные, также имеют другие классные функции в качестве разделов кадров, поскольку отправка полной кадры из ESP займет некоторое время, и STM потребуется некоторое время, чтобы расшифровать полный кадр, эта синхронизация замедлит два процессора,Вместо этого ESP8266 отправляет 1/8 кадра в то время произвольно, поэтому SPI -переход от ESP на STM очень короткий и дает STM время декодировать 1/8 кадра, в то время как получает еще 1/8 в рамке в Буфер DMA параллельно.

Это поведение позволяет очень высокоскоростной анимации автоматически пропустить отправку некоторой части кадра, поскольку позади новая 1/8 кадры, что означает, что анимация никогда не будет замедлена из -за обработки ЦП, побочный эффект будет, что только некоторые кадры могут быть пропущены, это все

Ваши 4 балла кажется обобщением, как это сделать, однако, не разделяет никакого намека или механика, как PWM используется для того, чтобы дать разные тона для каждого пикселя, все еще читая то, что вы имеете в виду, также я рассмотрю все ссылки, однако, если я Можно хорошо понять следующее, тогда я тоже могу масштабировать его,

ШИМ с 3 проводами для управления 8 светодиодами подряд
R - Линия данных
L - защелка
C - часы

С BCM мне нужно всего лишь 4 очень коротких часовых импульсов плюс 4 защелки, чтобы отобразить пиксель с 16 тонами. В случае 128 столбцов всего 128x4 часов плюс 4 защелки. Сколько тактовых циклов и защелки вам нужно отобразить пиксель с 16 тонами с ШИМ?

Кастотиу
Сб 20 января 2018 г., 5:48
Кстати, я также работал с регистрами Shift, это не нова для меня, на самом деле моя первая версия Raw Red Matrix около 3 месяцев назад использовала дискретные компоненты 74HC595D и добился хорошего прогресса, я сделал работу матрицей на изображении ниже с Arduino Nano для 24x32 Just Red Channel A 60 Гц, 16 тонов красного, используя мой собственный алгоритм ШИМ, пока я не узнал, что я могу получить из Китая, полностью собранных панелей RGB 128x32 с контроллерами, примерно по той же цене, так что были панели RGB. Я не мог сделать что -то даже отдаленно близко близко к такой же цене, поэтому я перенаправил свои усилия по пониманию и заставил матрицу работать, используя свой собственный алгоритм ШИМ Заставьте это работать, где я нашел STM32 и начинаю публиковать здесь :)

Исследование привело меня к BCM, я знаю, что моя собственная реализация SWM - отстой, и мне интересно узнать, что вы имеете в виду в этом масштабе. Помните, что матрица составляет 128x32 и имеет 6 сменных регистров R1, R2, G1, G2, B1, B2, и они хотят иметь высокую частоту обновления, поэтому алгоритм PWM должен быть очень эффективным, большинство из которых мне интересно узнать Эффективная техника ШИМ.

Если бы я использовал свой собственный и старый алгоритм ШИМ, мне понадобились бы 128 часов * 16 защелков, это было бы почти в 4 раза больше, чем BCM, и, вероятно, я мог бы получить только 60 Гц вместо 250 Гц.

Первоначальная идея на изображениях ниже была в цепочке 74HC595D контроллеров вертикально и горизонтально, чтобы контролировать большую матрицу 128x32 и замену только MCU, настолько наивного, что я думал с 16 МГц, чтобы сделать все это.

ZMEMW16
Сб 20 января 2018 г. 14:47
Пожалуйста, расскажите нам (мне), как были сделаны эти печатные платы ?
Пара от ETCH REST Рука рука нарисована ?
и те, у кого очень, очень чистая изоляция ?
Стивен

Дэнниф
Сб 20 января 2018 г., 14:54
o Алгоритм ШИМ должен быть очень эффективным Это, наверное, разъединение. Посмотрите на таблицу данных HC595 и посмотрите, как работает PIN -код OE по отношению к остальной части схемы.

Дэнниф
Сб 20 января 2018 г. 14:56
20180119_211651.JPG (241.71 киб) Для большой матрицы это эффективная вывода, но не эффективная во времени реализация: поскольку данные о строке также являются последовательными.

Лучшим подходом является использование мукса (или их кратных).

Кастотиу
Сб 20 января 2018 г. 15:50
"Пожалуйста, скажите нам (мне), как были сделаны эти печатные платы ?"

Снова начал с электроники как хобби около 5 месяцев назад после 20 лет, что я ничего не делал с электроникой, поэтому я пытался найти быстрый метод для итерации и создания прототипов.

1) Доска в центре была сделана с переносом бумажного тонера и травлением хлоридом железа, я попробовал около 10 различных методов, я никогда не мог овладеть процессом, даже купил новые принтеры, бумаги, химические вещества и т. Д. Всегда по той или иной причине какой -то тонер не переносится и должен был вручную обращаться с ручкой, как вы можете видеть на изображении, которое я отправил раньше. В настоящее время доски, которые я делаю с переносом тонера, не все плохие, однако я не могу опуститься ниже 80 -мильных трассов, не используя, если не является очень базовым PCB.

2) ПКБ на стороне сделаны с помощью машины с ЧПУ, они были сделаны примерно через 30 дней после того, как они попробовали много методов с машиной, сначала они были беспорядком и начали улучшать технику, вероятно, я сделал около 100 ПХБ, пока значительно улучшилось Техника, эти доски старые, на данный момент через 5 месяцев я «освоил» процесс, и я делаю свои двойные платы с тросами в 15 млн, и они выглядят в 10 раз лучше, чем картина выше.

3) начали играть с предварительно сенсибилизированными ПХБ, прозрачными и ультрафиолетными светильниками, однако предварительно сенсибилизированные ПХБ слишком дороги, поэтому сбросил эту технику в пользу машины с ЧПУ, однако предсенбилированные ПКБ могут получить довольно много времени для Сложные печатные платы, так как машина с ЧПУ может работать в течение 1 часа или более для каждой стороны.

Это некоторые из ключей в технике, которую я использую.
a - используйте хороший бит с резьбой с .1 мм
B - Центр резьбы с помощью стробоскопного света
c - Сделайте слой wd40, пока машина работает
D - предварительно уровни рабочей поверхности
E - Закрепите печатную плату на машину очень плоско, используя двойную ленту.
F - Алгоритм Autolevel для измерения недостатков печатной платы и высоты бита Readjust в исходном файле

В этот момент моя машина с ЧПУ вырезала только 0.05 мм от меди, так что резьба едва касается стекловолокна.

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

Это машина, которую я получил:
https: // www.eBay.com/itm/usb-3axis-cnc- ... 25e8de4d39

Мне пришлось внести некоторые изменения в машину, чтобы добавить ввод автовела.