В порядке бреда: если попробовать поменять местами определения кнопок start_but и stop_but - что получится? Если проблема реально в модели памяти - тогда всё должно стать ровно наоборот: кнопка "стоп" должна рисоваться наполовину.
Короче, задача простая: дать линкеру понять, что адреса данных кнопок во флеше поменялись местами, и проверить на этих вводных. А там дальше видно будет.
З.Ы. Библиотеку не правили? Она там вроде с короткими адресами работает только.
З.Ы. Библиотеку не правили? Она там вроде с короткими адресами работает только.
Аааа..... мммм....эээээ
Ну на самом деле функцию вывода изображения добавил ... да да, давайте, очень смешно.
Во первых худо бедно она работает.
Дальше я решил добавить на эту же плату ещё один экран на другой библиотеке и вывести в него теже массивы.
В имеющейся библиотеке для экрана 2,0 дюйма вобще не было функции вывода изображений. И туда подогнал, только с ближними указателями.
Получаем размер после компиляции ок. 75К
Массив символов проявляется (латиница), две верхних "кнопки" на нижнем выводятся. Массивы те же самые.
Меняю указатели (для верхнего) на явно ближние:
data = pgm_read_word_near(&bmp[....
Можно было бы и порадоваться немного. При том что размер кода 75 438 байт, но как только добавляю ещё одно изображение, размером как правая, даже если только нижний вывожу, экраны после загрузки не инициализируются (просто белые), и в порт ничего не летит. Похоже как висит просто. (это к тому -"смысл выводить в порт А = А)
З.Ы. Библиотеку не правили? Она там вроде с короткими адресами работает только.
Аааа..... мммм....эээээ
Ну на самом деле функцию вывода изображения добавил ... да да, давайте, очень смешно.
У вас мания - во всём видеть угрозу себе любимому что ли? Я спросил в том смысле, что "не правили ли вы библиотеку? А то вроде как она работает с ближними адресами, и в этом может быть проблема, которую можно попробовать пофиксить, покопавшить в кишочках библиотеки на предмет адресов". И шо я слышу? "да да, давайте, очень смешно". Ага, вот только петросян тут один, и это явно не я.
На самом деле я действительно ожидал что то типа - " а, ну тут всё понятно, ламер запорол либу, и все виноватые" ну или что то в этом роде.
Я вот сейчас только маленький экран мучаю, и то же самое. Пока 3 изображения, всё работает ( 63 096 байт), Добавляю, контроллер не запускается, экран белый, порт молчит. Если проблема с указателями, должно просто выводиться непонятно что, а тут висяк просто.
Может действительно надо "переорганизовать" память?
P.S. И кишочки вроде пересмотрел все, может не замечаю чего.
Привет всем. Помогите пожайлуста переделать код, чтобы показывал картинки из массива без SD карты. Вот рабочий исходник :
// Demo based on:
// UTFT_Demo by Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
/*
The delay between tests is set to 0. The tests run so fast you will need to
change the WAIT value below to see what is being plotted!
This sketch uses the GLCD and font 2 only.
Make sure all the required fonts are loaded by editting the
User_Setup.h file in the TFT_ILI9341 library folder.
If using an UNO or Mega (ATmega328 or ATmega2560 processor) then for best
performance use the F_AS_T option found in the User_Setup.h file in the
TFT_ILI9341 library folder.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
###### TO SELECT THE FONTS YOU USE, SEE ABOVE ######
#########################################################################
*/
// Delay between demo pages
#define WAIT 2000 // Delay between tests, set to 0 to demo speed, 2000 to see what it does!
#define CENTRE 240
#include <TFT_HX8357.h> // Hardware-specific library
TFT_HX8357 tft = TFT_HX8357(); // Invoke custom library
#define TFT_GREY 0x7BEF
uint32_t runTime = 0;
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
void setup()
{
randomSeed(analogRead(0));
Serial.begin(38400);
// Setup the LCD
tft.init();
tft.setRotation(3);
}
void loop()
{
int buf[478];
int x, x2;
int y, y2;
int r;
runTime = millis();
// Clear the screen and draw the frame
tft.fillScreen(TFT_BLACK);
tft.fillRect(0, 0, 480, 13, TFT_RED);
tft.fillRect(0, 305, 480, 320, TFT_GREY);
tft.setTextColor(TFT_BLACK,TFT_RED);
tft.drawCentreString("* TFT_HX8357_no_touch *", CENTRE, 3, 1);
tft.setTextColor(TFT_YELLOW,TFT_GREY);
tft.drawCentreString("Adapted by Elektronik +37062120416", CENTRE, 309,1);
tft.drawRect(0, 14, 479, 305-14, TFT_BLUE);
// Draw crosshairs
tft.drawLine(239, 15, 239, 304, TFT_GREEN);
tft.drawLine(1, 159, 478, 159, TFT_GREEN);
for (int i=9; i<470; i+=10)
tft.drawLine(i, 157, i, 161, TFT_BLUE);
for (int i=19; i<220; i+=10)
tft.drawLine(237, i, 241, i, TFT_BLUE);
// Draw sin-, cos- and tan-lines
tft.setTextColor(TFT_CYAN);
tft.drawString("Sin", 5, 15,2);
for (int i=1; i<478; i++)
{
tft.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95),TFT_CYAN);
}
tft.setTextColor(TFT_RED);
tft.drawString("Cos", 5, 30,2);
for (int i=1; i<478; i++)
{
tft.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95),TFT_RED);
}
tft.setTextColor(TFT_YELLOW);
tft.drawString("Tan", 5, 45,2);
for (int i=1; i<478; i++)
{
tft.drawPixel(i,159+(tan(((i*1.13)*3.14)/180)),TFT_YELLOW);
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
tft.drawLine(239, 15, 239, 304,TFT_BLUE);
tft.drawLine(1, 159, 478, 159,TFT_BLUE);
// Draw a moving sinewave
int col = 0;
x=1;
for (int i=1; i<(477*15); i++)
{
x++;
if (x==478)
x=1;
if (i>478)
{
if ((x==239)||(buf[x-1]==159))
col = TFT_BLUE;
else
tft.drawPixel(x,buf[x-1],TFT_BLACK);
}
y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100)));
tft.drawPixel(x,y, TFT_BLUE);
buf[x-1]=y;
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some filled rectangles
for (int i=1; i<6; i++)
{
switch (i)
{
case 1:
col = TFT_MAGENTA;
break;
case 2:
col = TFT_RED;
break;
case 3:
col = TFT_GREEN;
break;
case 4:
col = TFT_BLUE;
break;
case 5:
col = TFT_YELLOW;
break;
}
tft.fillRect(150+(i*20), 70+(i*20), 60, 60,col);
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some filled, rounded rectangles
for (int i=1; i<6; i++)
{
switch (i)
{
case 1:
col = TFT_MAGENTA;
break;
case 2:
col = TFT_RED;
break;
case 3:
col = TFT_GREEN;
break;
case 4:
col = TFT_BLUE;
break;
case 5:
col = TFT_YELLOW;
break;
}
tft.fillRoundRect(270-(i*20), 70+(i*20), 60, 60, 3, col);
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some filled circles
for (int i=1; i<6; i++)
{
switch (i)
{
case 1:
col = TFT_MAGENTA;
break;
case 2:
col = TFT_RED;
break;
case 3:
col = TFT_GREEN;
break;
case 4:
col = TFT_BLUE;
break;
case 5:
col = TFT_YELLOW;
break;
}
tft.fillCircle(180+(i*20),100+(i*20), 30,col);
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some lines in a pattern
for (int i=15; i<304; i+=5)
{
tft.drawLine(1, i, (i*1.6)-10, 303, TFT_RED);
}
for (int i=304; i>15; i-=5)
{
tft.drawLine(477, i, (i*1.6)-11, 15, TFT_RED);
}
for (int i=304; i>15; i-=5)
{
tft.drawLine(1, i, 491-(i*1.6), 15, TFT_CYAN);
}
for (int i=15; i<304; i+=5)
{
tft.drawLine(477, i, 490-(i*1.6), 303, TFT_CYAN);
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some random circles
for (int i=0; i<100; i++)
{
x=32+random(416);
y=45+random(226);
r=random(30);
tft.drawCircle(x, y, r,random(0xFFFF));
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some random rectangles
for (int i=0; i<100; i++)
{
x=2+random(476);
y=16+random(289);
x2=2+random(476);
y2=16+random(289);
if (x2<x) {
r=x;x=x2;x2=r;
}
if (y2<y) {
r=y;y=y2;y2=r;
}
tft.drawRect(x, y, x2-x, y2-y,random(0xFFFF));
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
// Draw some random rounded rectangles
for (int i=0; i<100; i++)
{
x=2+random(476);
y=16+random(289);
x2=2+random(476);
y2=16+random(289);
if (x2<x) {
r=x;x=x2;x2=r;
}
if (y2<y) {
r=y;y=y2;y2=r;
}
tft.drawRoundRect(x, y, x2-x, y2-y, 3,random(0xFFFF));
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
for (int i=0; i<100; i++)
{
x=2+random(476);
y=16+random(289);
x2=2+random(476);
y2=16+random(289);
col=random(0xFFFF);
tft.drawLine(x, y, x2, y2,col);
}
delay(WAIT);
tft.fillRect(1,15,478-1,304-15,TFT_BLACK);
for (int i=0; i<10000; i++)
{
tft.drawPixel(2+random(476), 16+random(289),random(0xFFFF));
}
delay(WAIT);
tft.fillRect(0, 0, 480, 320, TFT_BLUE);
tft.fillRoundRect(160, 70, 319-160, 169-70, 3,TFT_RED);
tft.setTextColor(TFT_WHITE,TFT_RED);
tft.drawCentreString("Pabaiga!", CENTRE, 93,2);
tft.drawCentreString("Paleidimas is naujo", CENTRE, 119, 2);
tft.drawCentreString("Po pora sekundziu...", CENTRE, 132, 2);
tft.setTextColor(TFT_GREEN,TFT_BLUE);
tft.drawCentreString("Runtime: (msecs)", CENTRE, 280, 2);
tft.setTextDatum(TC_DATUM);
runTime = millis()-runTime;
tft.drawNumber(runTime, CENTRE, 300,2);
tft.setTextDatum(TL_DATUM);
delay (5000);
}
В порядке бреда: если попробовать поменять местами определения кнопок start_but и stop_but - что получится? Если проблема реально в модели памяти - тогда всё должно стать ровно наоборот: кнопка "стоп" должна рисоваться наполовину.
Короче, задача простая: дать линкеру понять, что адреса данных кнопок во флеше поменялись местами, и проверить на этих вводных. А там дальше видно будет.
З.Ы. Библиотеку не правили? Она там вроде с короткими адресами работает только.
З.Ы. Библиотеку не правили? Она там вроде с короткими адресами работает только.
Аааа..... мммм....эээээ
Ну на самом деле функцию вывода изображения добавил ... да да, давайте, очень смешно.
Во первых худо бедно она работает.
Дальше я решил добавить на эту же плату ещё один экран на другой библиотеке и вывести в него теже массивы.
В имеющейся библиотеке для экрана 2,0 дюйма вобще не было функции вывода изображений. И туда подогнал, только с ближними указателями.
Получаем размер после компиляции ок. 75К
Массив символов проявляется (латиница), две верхних "кнопки" на нижнем выводятся. Массивы те же самые.
Меняю указатели (для верхнего) на явно ближние:
Можно было бы и порадоваться немного. При том что размер кода 75 438 байт, но как только добавляю ещё одно изображение, размером как правая, даже если только нижний вывожу, экраны после загрузки не инициализируются (просто белые), и в порт ничего не летит. Похоже как висит просто. (это к тому -"смысл выводить в порт А = А)
З.Ы. Библиотеку не правили? Она там вроде с короткими адресами работает только.
Аааа..... мммм....эээээ
Ну на самом деле функцию вывода изображения добавил ... да да, давайте, очень смешно.
У вас мания - во всём видеть угрозу себе любимому что ли? Я спросил в том смысле, что "не правили ли вы библиотеку? А то вроде как она работает с ближними адресами, и в этом может быть проблема, которую можно попробовать пофиксить, покопавшить в кишочках библиотеки на предмет адресов". И шо я слышу? "да да, давайте, очень смешно". Ага, вот только петросян тут один, и это явно не я.
На самом деле я действительно ожидал что то типа - " а, ну тут всё понятно, ламер запорол либу, и все виноватые" ну или что то в этом роде.
Я вот сейчас только маленький экран мучаю, и то же самое. Пока 3 изображения, всё работает ( 63 096 байт), Добавляю, контроллер не запускается, экран белый, порт молчит. Если проблема с указателями, должно просто выводиться непонятно что, а тут висяк просто.
Может действительно надо "переорганизовать" память?
P.S. И кишочки вроде пересмотрел все, может не замечаю чего.
Привет всем. Помогите пожайлуста переделать код, чтобы показывал картинки из массива без SD карты. Вот рабочий исходник :