Ви не увійшли.
Сторінки 1
Есть замечательная библиотека для ардуино, позволяющая выводить изображение на 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" в библиотеке, с монитором пробовать не обязательно, для начала он должен нормально компилироваться, а я опробую уже с монитором и отчитаюсь.
Очень прошу, три вечера мучаюсь.
Неактивний
если честно, без обид, я ни на каких форумах не видел чтобы подобная тема поднималась.
видно из-за незаинтересованности работы дуни с телевизором.
народ больше занимается дисплейчиками, моторчиками, датчиками...
Неактивний
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)
Неактивний
120*60 это слишком маленькое разрешение. (
VGA для Arduino - это как с помощью стремянки на 9-этажку, так что и 120*60 неплохо. Хотя мне кажется, что 120*120 вполне можно было бы в однобитном режиме сделать. Но автор библиотеки почему-то выбрал двухбитный режим со странным подключением. Я три цвета на разъёме VGA соединил, чтоб чёрно-белое изображение получить, можно даже на 2 монитора разные картинки вывести (пробовал), или на один монитор 4 градации яркости вместо 4 цветов (пока не пробовал).
Неактивний
Спасибо, это я ещё в первый день попробовал- не прокатило У вас компилируется?
Да, скетч скомпилировался (Arduino 1.8.1)
Скетч использует 3080 байт (9%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1818 байт (88%) динамической памяти, оставляя 230 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти, программа может работать нестабильно.
Остання редакція void loop (2017-02-01 08:36:57)
Неактивний
проверил сообщение 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
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.
все собралось без танцев
Неактивний
все собралось без танцев
Так скетч Image.ino не использует метод print.
Спасибо, это я ещё в первый день попробовал- не прокатило
rename print to printPROGMEM and add new method printSRAM, to print from SRAM https://github.com/smaffer/vgax/commit/ … ae68e55988 Между print и PROGMEM пробел случайно не поставили?
Неактивний
автор забыл в примере исправить, бывает
что означает не прокатило? 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
}
}
Неактивний
что означает не прокатило?
Меняю 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
Ошибка компиляции.
Неактивний
УРА! Заработало! В папке скетча "BitFont" были файлы "bitblit.cpp", "blit.cpp", "blit4.cpp", "blit8.cpp", вот их убрал и всё компилируется.
А закинул я их туда ещё в первый день, до переименования print в printPROGMEM. Пример "MarioSprites" только с ними компилировался, вот я и здесь всунул на свою голову.
Всем большое спасибо, рад что тема заинтересовала.
Неактивний
Ещё вопрос знатокам, может глупый.
Можно ли изменить доступное разрешение в этой библиотеке с 120*60 на 120*120. Аппаратно в моём понимании ограничение по горизонтали привязано к тактовой частоте, а по вертикали хоть 480.
Вот так бы выглядела картинка на экране (слева 120*60, справа 120*120, фотошоп)
Сам попробовал изменить один параметр в "VGAX.cpp"- не получилось.
Неактивний
В строке
if (++aline==5) {
файла "VGAX.cpp" меняю 5 на 2, получаю пиксель высотой 3 строки вместо 6, то есть то, что и хотел. Но вот вывести более 60 пикселей по вертикали не получается (получилось, но нижняя половина экрана дублировала верхнюю с некоторым смещением и абракадаброй на стыке зон). У кого есть мысли в этом направлении? Заранее благодарен за любую помощь.
Неактивний
Открываем файл 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" //
Пробовал здесь поиграть, ничего толкового не вышло, хотя немного узнал об Ассемблере, что тоже неплохо.
Может кто поскажет что?
Неактивний
Сторінки 1