Заработал вариант с некоторыми изменениями. Координаты картинки должны быть 0,0 - иначе искажения. Время смены картинки около 46 миллисекунд. Жаль раскрасить нельзя :)
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Этот алгоритм был озвучен ещё в начале темы, а вы все топчитесь на месте.
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
На hiasm можно нарисовать несколькими картинками программу которая указанный файл в байтах на сом порт указанный выдаст. Но конвертер у меня картинку даёт в виде массива 0х00, ...
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
На стороне ПС надо передать бинарный массив с картинкой размером 2 * w * h байт...
Я не понимаю как это :)
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Вот когда ты все это проделаешь (отделить по запятым...перевести в число) у тебя и получится бинарный массив.
Дисплей мне ещё не пришёл. Проверить пока не на чем. Написал программу перекодировки изображения из стандартного PictureBox VB 6.0 В из 8-8-8 в 5-6-5. Пишу урывками. Могут быть ошибки. в логике. Вот код:
Public bWrite(40959) As Byte
Private Sub Command2_Click()
k = 0
For i = 0 To 159
For j = 0 To 127
res = GetPixel(Picture1.hdc, j, i)
Call GetRGB(res)
C565
Next j
Next i
End Sub
Public Sub GetRGB(Color As Long)
R = Color \ 65536
G = (Color And 65535) \ 256
B = Color And 255
End Sub
Public Function C565()
R = R And &HF8
G = G And &HFC
B = B And &HF8
Prom = G And &HC0
Prom = Prom / 32
Prom1 = R Or Prom
bWrite(k) = Prom1
Prom = (G And &H1F) * 8
Prom2 = Prom Or B / 8
bWrite(k + 1) = Prom2
k = k + 2
End Function
В архиве папка с программой: 128X160.exe и ActiveX: COMDLG32.OCX для работы программы. Выбираете скорость передачи и номер СОМ-порта. Загружаете файл с картинкой, она помещается в PictureBox размером 128Х160. Если не нравится, то загружаете другую. Файлы в формате .png пока не загружается. Это на потом. Нажимаете кнопку: "Send To Arduino". Картинка перекодируется из формата 8-8-8 в формат 5-6-5 и передаётся в выбранный СОМ-порт.
Выдаёт ошибка платы ардуино генуино... с новой библиотекой. Так что не судьба. вернулся к старой версии.
вернулся к старой версии.
какой номер старой версии библиотеки ? IDE ?
ua6em есть в железе NANO UNO и 7735 с согласованными уровнями что бы проверить быстрый вывод ?
Не знаю, вот её cpp файл. ИДЕ версии 1.8.2.
вернулся к старой версии.
какой номер старой версии библиотеки ? IDE ?
ua6em есть в железе NANO UNO и 7735 с согласованными уровнями что бы проверить быстрый вывод ?
быстро нету, разобрал для проверки RP2040 и ESP32
Soft SPI ...если я правильно понял, то используется clock определённый в ядре
lilik есть значительные отличия в библиотеках...
актуальная:
"старая":
Получается что setAddrWindow по разному трактует входные переменные !
Заработал вариант с некоторыми изменениями. Координаты картинки должны быть 0,0 - иначе искажения. Время смены картинки около 46 миллисекунд. Жаль раскрасить нельзя :)
Координаты картинки должны быть 0,0
Это у меня от PROTEUS осталось - там разрешение 132х162 ... смещал в центр ...
P.S.
А если закомментировать 703 и 713 строки (// " IN __tmp_reg__,%[spdr]-1 \n") - работает ???
Нет. Полосы мельтешат сверху вниз.
Нет. Полосы мельтешат сверху вниз.
Ясно - получается SPSR надо обязательно прочитать перед посылкой нового байта ...
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Завтра напишу код для вывода одной предварительно оаскрашенной строки из ОЗУ на максимальной скорости...
Т.е. надо будет пробегать по flash и результат раскрасски не сразу на экран, а в ОЗУ. Как строка готова - быстренько ее пуляем в экран и готовим новую....
Этот алгоритм был озвучен ещё в начале темы, а вы все топчитесь на месте.
По скорости он не оптимален ...
Ну, да, самым оптимальным оказался вывод в весь обозначенный сектор рисунка данных по цвету.
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Грузить с ПК посредством чего ???
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
Грузить с ПК посредством чего ???
На hiasm можно нарисовать несколькими картинками программу которая указанный файл в байтах на сом порт указанный выдаст. Но конвертер у меня картинку даёт в виде массива 0х00, ...
Меня посетила ещё задумка... Если нельзя хранить цветную картинку в МК и нет SD карты - можно грузить на экран из файла на ПК. Но тут у меня препятствие. Как выделенную на стороне Ардуино строку 0хFF превратить в число? Со строкой 255 всё ясно, а тут?
Вопрос на самом деле в другом: зачем Вам замедление в 3-6 раз при форматном преобразовании? Да еще и на самом медленном участке (последовательный порт). Передавайте сразу в бинарном виде.
Сразу не получится ... у меня.
На стороне МК все достаточно просто - в коде из #257 сам asm volatile и всё что у его внутри меняем на:
На стороне ПС надо передать бинарный массив с картинкой размером 2 * w * h байт...
На стороне ПС надо передать бинарный массив с картинкой размером 2 * w * h байт...
Я не понимаю как это :)
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Может из этого что то подойдет - http://microsin.net/programming/pc/binary-file-to-hex-dump-text.html
Есть массив типа 0х00,0х00,... Он идёт в ардуино в виде символов. Там надо сначала отделить по запятым строку-число, потом перевести её в число, потом вывести в экран как половину цвета пикселя. А как сделать бинарный массив и его передать я не алё (к сожалению).
Пикассо отдыхает.
Исходник
скетч
картинка
Теперь одно в голове - как добиться такого эффекта картины маслом при раскраске чб картинки?
Байты в парах надо менять местами ...
Эта мысль меня осенила только утром, после того как вчера я картинку вывел, правда весьма своеобразным способом.
выводил два раза подряд массивы одного рисунка, но с разным чередованием цветов в 16 битах. После работы попробую поправить скетч.
Если байты крайней картинки привести к виду:
00 00 00 00 00 00 20 00 E1 18 42 21 62 29 42 29
...
то можно весь массив вставить в HEX редактор HxD и сохранить как bin.
P.S.
Сам не пробовал, но вроде как в https://www.codeandweb.com/texturepacker/download можно это сделать без проблем ...
Подправил. Выводит.
Касперский люто на моём ПК hiasm блокирует, не даёт сделать экзешник, элю почта письмом его не шлёт - пишет вирус содержит :)
Бинарник ентот может в блокноте попробовать сделать? Откинуть 0х, запятые заменить пробелом, вместо расширения .с подписать .bin.
Всё равно это будет текст.
После правки из блокнота скопировать в HxD и там уже сохранить как бинарник ...
lilik,
1). какую разрядность цвета вы используете?
Как здесь?:
https://datagor.ru/microcontrollers/microcontrollers-code-library/2917-v...
2). Каков формат экрана? Т.е. как распределяются строки: 160Х128 или 128Х160?
lilik,
1). какую разрядность цвета вы используете?
Как здесь?:
https://datagor.ru/microcontrollers/microcontrollers-code-library/2917-v...
2). Каков формат экрана? Т.е. как распределяются строки: 160Х128 или 128Х160?
16 битный цвет как по ссылке - 565.
В строке 128 пикселей.
Всё равно это будет текст.
После правки из блокнота скопировать в HxD и там уже сохранить как бинарник ...
Нашёл уже готовое решение, действительно грузит быстрее.
https://cxem.net/mc/mc482.php
конвертер bmp изображений 24bit (то есть обычных несжатых картинок) в бинарный файл с цветовой кодировкой RGB565
скетч для вывода данным способом:
:)
Сравнительный заезд по секундомеру показал время загрузки на экран - 3,63 сек. против 18,66 сек.
Было уже про преобразования
https://arduino.ru/forum/programmirovanie/sortirovka-palitry-rgb565#comm...
Можно оказывается визуализировать массив и без экрана. Интересно,есть ли возможность в иде уменьшить масштаб выводимого рисунка в порт?
Можно оказывается визуализировать массив и без экрана.
Ну как бы такой способ известен уже не один десяток лет. И даже успел засветиться в киноклассике.
Так у него в монитор порта картинка «выведена»...
Так у него в монитор порта картинка «выведена»...
Разобрался, надо шрифт уменьшить было.
lilik, как я понял из вашего поста #279,
1). вы передаёте из ПК в ардуино строку длиной 2 * 128 * 160 = 40960 байт?
2). При перекодировке из 8-8-8 в 5-6-6 вы берёте только старшие биты и обнуляете младшие?
3). В массиве передаваемых данных точки идут последовательно, по два байта на точку, 160 строк по 128 точек?
Да, всё так. Биты не отбрасываю, пользуюсь готовым конвертером:
Вот его настройки. Порядок цветов (правый нижний угол) тут стоит неверно, надо не зелёный, синий, красный, а выставить - красный, зелёный, синий.
Да, всё так. Биты не отбрасываю выставить - красный, зелёный, синий.
Порядок следования бат:
1 байт: "R" + часть "G";
второй байт: младшая часть часть "G" + "B" ?
И так до конца?
Паузы между передачами пар байт делаете или идёт весь массив?
Идёт весь массив без пауз, полученный в конвертере. Отброшены лишь { }, оставлены числа и запятые.
Дисплей мне ещё не пришёл. Проверить пока не на чем. Написал программу перекодировки изображения из стандартного PictureBox VB 6.0 В из 8-8-8 в 5-6-5. Пишу урывками. Могут быть ошибки. в логике. Вот код:
Нет ли ошибок?
Залил архив с программой сюда:
https://transfiles.ru/m13vm
В архиве папка с программой: 128X160.exe и ActiveX: COMDLG32.OCX для работы программы. Выбираете скорость передачи и номер СОМ-порта. Загружаете файл с картинкой, она помещается в PictureBox размером 128Х160. Если не нравится, то загружаете другую. Файлы в формате .png пока не загружается. Это на потом. Нажимаете кнопку: "Send To Arduino". Картинка перекодируется из формата 8-8-8 в формат 5-6-5 и передаётся в выбранный СОМ-порт.
Перекодировка не проверена.
:)
Не, не пошло.
На каком этапе возникает ошибка?
На каком этапе возникает ошибка?
При попытке открыть экзешник (два раза левой мышкой :).
При попытке открыть экзешник (два раза левой мышкой :).
Я проверил на двух компах с Windows 10. Программа работает.