#1 2017-01-25 22:57:02

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

VGA library for Arduino

Есть замечательная библиотека для ардуино, позволяющая выводить изображение на VGAмонитор в разрешении 120*60 пикселей. Вот здесь тема от автора библиотеки:
http://forum.arduino.cc/index.php?topic=320238.0
А вот здесь сама библиотека:
https://github.com/smaffer/vgax
Примеры из библиотеки я попробовал (без бубна не обошлось), работают отлично. Но вывести надписи на экран никак не получается, компилятор ругается:
Arduino: 1.6.5 (Windows 7), Плата"Arduino Nano, ATmega328"
sketch_jan24b.ino: In function 'void setup()':
sketch_jan24b:110: error: 'class VGAX' has no member named 'print'
'class VGAX' has no member named 'print'
Как только убираю строку с 'print' из скетча, сразу компилируется нормально, ну так и смысл пропадает.
Кто-нибудь опытный, попробуйте скетч "BitFont" из папки "examples" в библиотеке, с монитором пробовать не обязательно, для начала он должен нормально компилироваться, а я опробую уже с монитором и отчитаюсь.
Очень прошу, три вечера мучаюсь.

Неактивний

#2 2017-01-31 12:19:17

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

Хоть что-то подскажите, неужели никому тема не интересна? Я уже почти решил вопрос обходными путями, но хотелось бы без костылей встроенными средствами библиотеки, через vga.print.

Неактивний

#3 2017-01-31 12:36:06

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 876

Re: VGA library for Arduino

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

Неактивний

#4 2017-01-31 16:16:43

void loop
Учасник
Зареєстрований: 2016-10-20
Повідомлень: 25

Re: VGA library for Arduino

seri0shka, метод print был переименован в printPROGMEM
Должно быть так

 
vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 3, 1, str0, x, 10, 1);
vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 3, 1, str1, x, 17, 2);

.

Остання редакція void loop (2017-01-31 16:17:27)

Неактивний

#5 2017-01-31 17:18:43

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: VGA library for Arduino

120*60  это слишком маленькое разрешение.  (

Неактивний

#6 2017-02-01 01:23:48

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

void loop пише:

print был переименован в printPROGMEM.

Спасибо, это я ещё в первый день попробовал- не прокатило У вас компилируется?

Неактивний

#7 2017-02-01 01:35:12

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

NoName пише:

120*60  это слишком маленькое разрешение.  (

VGA для Arduino - это как с помощью стремянки на 9-этажку, так что и 120*60 неплохо. Хотя мне кажется, что 120*120 вполне можно было бы в однобитном режиме сделать. Но автор библиотеки почему-то выбрал двухбитный режим со странным подключением. Я три цвета на разъёме VGA соединил, чтоб чёрно-белое изображение получить, можно даже на 2 монитора разные картинки вывести (пробовал), или на один монитор 4 градации яркости вместо 4 цветов (пока не пробовал).

Неактивний

#8 2017-02-01 08:35:33

void loop
Учасник
Зареєстрований: 2016-10-20
Повідомлень: 25

Re: VGA library for Arduino

seri0shka пише:

Спасибо, это я ещё в первый день попробовал- не прокатило У вас компилируется?

Да, скетч скомпилировался (Arduino 1.8.1)

Скетч использует 3080 байт (9%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1818 байт (88%) динамической памяти, оставляя 230 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти, программа может работать нестабильно.

Остання редакція void loop (2017-02-01 08:36:57)

Неактивний

#9 2017-02-01 11:29:56

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: VGA library for Arduino

проверил сообщение void loop  )

https://www.dropbox.com/s/ak6f6xqjs6giz7k/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202017-02-01%2010.26.31.png?dl=0

6xPndOmj0FjBB6hLqho1PD3tGjEi-ssm1dbERw2Of7E?dl=0&size=1280x960&size_mode=3

http://forum.arduino.cc/index.php?topic=320238.0
https://github.com/smaffer/vgax/blob/master/README.md

This is a VGA library for Arduino UNO.
To use this library you need only 4 resistors and one DSUB15 connector.
This library require an ATMega328 MCU (or higher) MCU. Does not work with ATTINY family or ATMega168.

UNO:
Build options changed, rebuilding all

Sketch uses 5,408 bytes (16%) of program storage space. Maximum is 32,256 bytes.
Global variables use 1,818 bytes (88%) of dynamic memory, leaving 230 bytes for local variables. Maximum is 2,048 bytes.
Low memory available, stability problems may occur.


все собралось без танцев

Неактивний

#10 2017-02-01 14:23:30

void loop
Учасник
Зареєстрований: 2016-10-20
Повідомлень: 25

Re: VGA library for Arduino

NoName пише:

все собралось без танцев

Так скетч Image.ino не использует метод print.

seri0shka пише:

Спасибо, это я ещё в первый день попробовал- не прокатило

rename print to printPROGMEM and add new method printSRAM, to print from SRAM  https://github.com/smaffer/vgax/commit/ … ae68e55988 Между print и PROGMEM пробел случайно не поставили?

Неактивний

#11 2017-02-01 15:29:35

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: VGA library for Arduino

автор забыл в примере исправить, бывает

что означает не прокатило? void loop прав,я проверил,   все собирается,  как в живую картинка то?

void VGAX::printPROGMEM(byte *fnt, byte glyphscount, byte fntheight, 
                        byte hspace, byte vspace, const char *str, 
                        char dx, char dy0, byte color) {
  char dx0=dx, dy;
  char *pstr=(char*)str;
  char c;
  while (c=pgm_read_byte(pstr++)) {
    PRINT_LOOP_CODE  
  }
}

Неактивний

#12 2017-02-01 16:00:59

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

NoName пише:

что означает не прокатило?

Меняю print на printPROGMEM. При проверке ошибка:

Arduino: 1.6.5 (Windows 7), Плата"Arduino Nano, ATmega328"
VGAX\print.cpp.o: In function `VGAX::printPROGMEM(unsigned char*, unsigned char, unsigned char, unsigned char, unsigned char, char const*, char, char, unsigned char)':
C:\Users\Администратор\Desktop\arduino-1.6.5-r5\libraries\VGAX/print.cpp:80: multiple definition of `VGAX::printPROGMEM(unsigned char*, unsigned char, unsigned char, unsigned char, unsigned char, char const*, char, char, unsigned char)'
print.cpp.o:C:\Users\836D~1\AppData\Local\Temp\build2182968972192280164.tmp/print.cpp:80: first defined here
VGAX\print.cpp.o: In function `VGAX::printPROGMEM(unsigned char*, unsigned char, unsigned char, unsigned char, unsigned char, char const*, char, char, unsigned char)':
C:\Users\Администратор\Desktop\arduino-1.6.5-r5\libraries\VGAX/print.cpp:80: multiple definition of `VGAX::printSRAM(unsigned char*, unsigned char, unsigned char, unsigned char, unsigned char, char const*, char, char, unsigned char)'
print.cpp.o:C:\Users\836D~1\AppData\Local\Temp\build2182968972192280164.tmp/print.cpp:80: first defined here
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.

Неактивний

#13 2017-02-01 16:18:21

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: VGA library for Arduino

multiple definition of `VGAX::printPROGMEM
смотрите print.cpp

"три вечера мучаюсь." эх,  какие все шустрые )

Неактивний

#14 2017-02-01 18:19:39

void loop
Учасник
Зареєстрований: 2016-10-20
Повідомлень: 25

Re: VGA library for Arduino

Проверил на версии Arduino 1.6.5 - все собралось. У меня в путях нет кириллических символов, может у вас имя учетки "Администратор" ломает процесс сборки?
VGApng_9054896_25001077.jpg

Неактивний

#15 2017-02-02 01:50:11

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

УРА! Заработало! В папке скетча "BitFont" были файлы "bitblit.cpp", "blit.cpp", "blit4.cpp", "blit8.cpp", вот их убрал  и всё компилируется.
А закинул я их туда ещё в первый день, до переименования print в printPROGMEM. Пример "MarioSprites" только с ними компилировался, вот я и здесь всунул на свою голову.
Всем большое спасибо, рад что тема заинтересовала.

Неактивний

#16 2017-02-03 12:28:06

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

Ещё вопрос знатокам, может глупый.
Можно ли изменить доступное разрешение в этой библиотеке с 120*60 на 120*120. Аппаратно в моём понимании ограничение по горизонтали привязано к тактовой частоте, а по вертикали хоть 480.
Вот так бы выглядела картинка на экране (слева 120*60, справа 120*120, фотошоп)
PICT0536bj_3894347_25021927.jpg
Сам попробовал изменить один параметр в "VGAX.cpp"- не получилось.

Неактивний

#17 2017-02-03 12:30:22

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

PICT0536bj_3894347_25021927.jpg

Неактивний

#18 2017-02-03 14:46:22

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

В строке
if (++aline==5) {
файла "VGAX.cpp" меняю 5 на 2, получаю пиксель высотой 3 строки вместо 6, то есть то, что и хотел. Но вот вывести более 60 пикселей по вертикали не получается (получилось, но нижняя половина экрана дублировала верхнюю с некоторым смещением и абракадаброй на стыке зон). У кого есть мысли в этом направлении? Заранее благодарен за любую помощь.

Неактивний

#19 2017-02-04 23:47:35

seri0shka
Учасник
Зареєстрований: 2016-02-21
Повідомлень: 33

Re: VGA library for Arduino

Открываем файл VGAX.h в библиотеке VGAX. Ищем строку
#define VGAX_HEIGHT 60
Заменяем 60 на желаемое, скажем 126. Дальше в строке
#define VGAX_BWIDTH 30
заменяем 30 на 15.
Далее открываем файл VGAX.cpp. В строке
#define SKIPLINES 90
можно заменить 90 на меньшее значение (не менее 35), я ставил 50, это подымет изображение на экране
выше на несколько строк. Можно и не менять. Далее в строке
if (rlinecnt<60) { 
Нужно изменить значение на то же, что в файле VGAX.h, в даном случае 126. Далее в строке
".rept 30   \n\t" //output 4 pixels for each
меняем 30 на 15 (как заменили в файле VGAX.h). И в строке
if (++aline==5) {
меняем 5 на 2, уменьшая высоту пикселей и символов в 2 раза (с 6 до 3 строк).
После всего вышеописанного перезапускаем IDE, открываем скетч BitFont из примеров, и дописываем чтобы он выводил на экран 21 строку с координатами x,y от 0,0 до 0,120. Компилируем, вгружаем, подключаем к монитору. Видим на экране 21 строку текста сверху донизу экрана.
Но длина строк всего лишь 15*4=60 пикселей, это около 13 букв (до середины экрана). Для того, чтоб добиться желаемого, нужно было не менять число 30 в описании выше, но тогда не хватит оперативной памяти, которая и так занята на 95%. Как известно, у автора библиотеки каждый пиксель экрана (60х120) состоит из двух бит, то есть в одном байте оперативной памяти закодировано 4 пикселя 4 возможных цветов каждый. Если сделать, чтобы каждый байт содержал 8 однобитных пикселей (2 цвета- чёрный или белый), то памяти хватит для картинки разрешением 126 по вертикали и 120 по горизонтали (15 записей по 8 бит, смотреть выше).
Вот здесь в файле VGAX.cpp. код вывода байта на экран:
      ".rept 15                  \n\t" //output 4 pixels for each iteration*30 в оригинале
      "    ld r16, Z+            \n\t" //
      "    out %[port], r16   \n\t" //write pixel 1
      "    mul r16, r20         \n\t" //<<2
      "    out %[port], r0    \n\t" //write pixel 2
      "    mul r0, r20          \n\t" //<<4
      "    out %[port], r0    \n\t" //write pixel 3
      "    mul r0, r20          \n\t" //<<6
      "    out %[port], r0    \n\t" //write pixel 4
      ".endr                      \n\t" //
Пробовал здесь поиграть, ничего толкового не вышло, хотя немного узнал об Ассемблере, что тоже неплохо.
Может кто поскажет что?

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму