Ви не увійшли.
Открываем файл 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" //
Пробовал здесь поиграть, ничего толкового не вышло, хотя немного узнал об Ассемблере, что тоже неплохо.
Может кто поскажет что?
В строке
if (++aline==5) {
файла "VGAX.cpp" меняю 5 на 2, получаю пиксель высотой 3 строки вместо 6, то есть то, что и хотел. Но вот вывести более 60 пикселей по вертикали не получается (получилось, но нижняя половина экрана дублировала верхнюю с некоторым смещением и абракадаброй на стыке зон). У кого есть мысли в этом направлении? Заранее благодарен за любую помощь.
Ещё вопрос знатокам, может глупый.
Можно ли изменить доступное разрешение в этой библиотеке с 120*60 на 120*120. Аппаратно в моём понимании ограничение по горизонтали привязано к тактовой частоте, а по вертикали хоть 480.
Вот так бы выглядела картинка на экране (слева 120*60, справа 120*120, фотошоп)
Сам попробовал изменить один параметр в "VGAX.cpp"- не получилось.
УРА! Заработало! В папке скетча "BitFont" были файлы "bitblit.cpp", "blit.cpp", "blit4.cpp", "blit8.cpp", вот их убрал и всё компилируется.
А закинул я их туда ещё в первый день, до переименования print в printPROGMEM. Пример "MarioSprites" только с ними компилировался, вот я и здесь всунул на свою голову.
Всем большое спасибо, рад что тема заинтересовала.
multiple definition of `VGAX::printPROGMEM
смотрите print.cpp
"три вечера мучаюсь." эх, какие все шустрые )
что означает не прокатило?
Меняю 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
Ошибка компиляции.
автор забыл в примере исправить, бывает
что означает не прокатило? 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
}
}
все собралось без танцев
Так скетч 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 )
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.
все собралось без танцев
Спасибо, это я ещё в первый день попробовал- не прокатило У вас компилируется?
Да, скетч скомпилировался (Arduino 1.8.1)
Скетч использует 3080 байт (9%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1818 байт (88%) динамической памяти, оставляя 230 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти, программа может работать нестабильно.
120*60 это слишком маленькое разрешение. (
VGA для Arduino - это как с помощью стремянки на 9-этажку, так что и 120*60 неплохо. Хотя мне кажется, что 120*120 вполне можно было бы в однобитном режиме сделать. Но автор библиотеки почему-то выбрал двухбитный режим со странным подключением. Я три цвета на разъёме VGA соединил, чтоб чёрно-белое изображение получить, можно даже на 2 монитора разные картинки вывести (пробовал), или на один монитор 4 градации яркости вместо 4 цветов (пока не пробовал).
print был переименован в printPROGMEM.
Спасибо, это я ещё в первый день попробовал- не прокатило У вас компилируется?
120*60 это слишком маленькое разрешение. (