Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

seri0shka
2017-02-04 23:47:35

Открываем файл 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" //
Пробовал здесь поиграть, ничего толкового не вышло, хотя немного узнал об Ассемблере, что тоже неплохо.
Может кто поскажет что?

seri0shka
2017-02-03 14:46:22

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

seri0shka
2017-02-03 12:30:22

PICT0536bj_3894347_25021927.jpg

seri0shka
2017-02-03 12:28:06

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

seri0shka
2017-02-02 01:50:11

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

void loop
2017-02-01 18:19:39

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

NoName
2017-02-01 16:18:21

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

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

seri0shka
2017-02-01 16:00:59
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
Ошибка компиляции.

NoName
2017-02-01 15:29:35

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

что означает не прокатило? 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  
  }
}
void loop
2017-02-01 14:23:30
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 пробел случайно не поставили?

NoName
2017-02-01 11:29:56

проверил сообщение 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.


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

void loop
2017-02-01 08:35:33
seri0shka пише:

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

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

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

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

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

seri0shka
2017-02-01 01:23:48
void loop пише:

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

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

NoName
2017-01-31 17:18:43

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

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