-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Добрый день. высвечивает ошибку при компиляций скетча. Arduino: 1.6.5 (Windows XP), Плата"Arduino Nano, ATmega328"
Изменена опция сборки, пересобираем все
In file included from C:\Program Files\Arduino\libraries\S65Display\font_10x16.c:3: 0:
C:\Program Files\Arduino\libraries\S65Display\fonts.h:71:1: error: unknown type name 'prog_uint8_t'
extern const prog_uint8_t font_PGM[];
^
Ошибка компиляции.
Это сообщение будет содержать больше информации чем
"Отображать вывод во время компиляции"
включено в Файл > Настройки
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
чтобы старые библиотеки заработали в новой IDE — нужно просто открыть файлы библиотеки (.h и .cpp) и если в них встречается строчка
#include "WProgram.h",
то заменить её на:
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Если честно пять раз пересматривал библиотеки не разу не видел строчки #include "WProgram.h" может я слепой. не знаю что и делать.
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Действительно.
Тогда остается использовать старый компилятор 0023
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Добрый день, а подскажите пожалуйста, за что отвечает строчка: "lcd.init(4);" ?
Какие значения она принимает и от чего зависит?
Так же не понял строчку: "lcd.drawRect"
Может есть путеводитель по этой библиотеке? :)
Ну или если можно то вкратце своими словами. Спасибо.
Кстати запустил данную библиотеку (для LS020) на Arduino IDE 1.6.7. Необходимо было "const prog_uint8_t" заменить на "const uint8_t" в некоторых местах (в fonts.h, S65Display.cpp и в font_8x12.c) ну и добавить библиотеку DigitalWriteFast.h.
Тоже самое относится и к библиотеке для версии дисплея L2F50, только в ней вместо библиотеки Wire.h необходимо подставить #include <Arduino.h> .
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Цитата:
Так же не понял строчку: "lcd.drawRect"
Нарисовать прямоугольник
Цитата:
Может есть путеводитель по этой библиотеке?
К сожалению нет
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Спасибо, а что известно про "lcd.init(4);" ?
Где то видел ставят параметр 2, у Вас 4, но объяснения толком так и не нашел. В коде вроде бы есть структура switch (clock_div) в S65Display.cpp, но на что это точно влияет так и не понял. На скорость вывода изображения на экран?
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
4- это делитель частоты , определяет скорость шины SPI
Если заработает с делителем 2 то хорошо, но у меня не заработало
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Помогите.
Дисплей L2F50126 epson. Вместо текста выводит мусор на экран.
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
А картринки выводит нормально?
-
Вложений: 1
Re: Дисплей Epson LCD L2F50 от Siemens S65
Картинки я не выводил. А рисовать пиксель, линию, круг, заливка цветом все работает.
Пробовал менять в библиотеке S65Display.cpp как на сайте http://forum.arduino.cc/index.php?topic=51440.15
Код:
uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color)
{
uint8_t ret, h, w; // h,w sind Laufvariablen für Höhe und Weite
#if FONT_WIDTH <= 8
uint8_t data;
#elif FONT_WIDTH <= 16
uint16_t data;
#elif FONT_WIDTH <= 32
uint32_t data;
#endif
uint8_t i, j, width, height;
const prog_uint8_t *ptr, *ptr_tmp;
i = (uint8_t)c;
#if FONT_WIDTH <= 8
ptr = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 16
ptr = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 32
ptr = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)];
#endif
width = FONT_WIDTH;
height = FONT_HEIGHT;
if(size <= 1)
{
ret = x+width;
if(ret > S65_WIDTH)
{
return S65_WIDTH+1;
}
setArea(x, y, (x+width-1), (y+height-1));
s65_drawStart();
ptr_tmp = ptr;
for(w=width; w!=0; w--) //
{
ptr = ptr_tmp;
//Serial.print("w="); Serial.println(w); delay(50);
for(h= height; h!=0; h--)
{
#if FONT_WIDTH <= 8
data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
data = pgm_read_dword(ptr); ptr+=4;
#endif
if(CHECK_BIT(data,w)) // hier Sprung in die Funktion CHECK_BIT(var,pos)
// die ist in S6%Dislay.h angelegt
// und sieht so aus:
// #define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))
{
s65_draw(color);
}
else
{
s65_draw(bg_color);
}
}
}
s65_drawStop();
}
else
{
ret = x+(width*size);
if(ret > S65_WIDTH)
{
return S65_WIDTH+1;
}
s65_setArea(x, y, (x+(width*size)-1), (y+(height*size)-1));
s65_drawStart();
ptr_tmp = ptr;
for(w=width; w!=0; w--) //
{
ptr = ptr_tmp;
//Serial.print("w="); Serial.println(w); delay(50);
for(h= height; h!=0; h--)
{
#if FONT_WIDTH <= 8
data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
data = pgm_read_dword(ptr); ptr+=4;
#endif
if(CHECK_BIT(data,w))
{
for(j=size; j!=0; j--)
{
s65_draw(color);
}
}
else
{
for(j=size; j!=0; j--)
{
s65_draw(bg_color);
}
}
}
}
s65_drawStop();
}
return ret;
}
И добавил в S65Display.h
Код:
#define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))
Было просто вся полоса в разбросанных пикселях.
После изменений начал понимать сколько букв в слове но все равно какие то иероглифы.
Вот lcd.drawText(10, 30, "Test",4, RGB(255,255,0), RGB(0,0,0)); шрифт 8х8 пробовал менять на другие все равно иероглифы.
Вложение 18867
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Еще после изменений не работает size - размер шрифта.
Как в вашей библиотеке вывести картинку с массива.
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
А не size - размер шрифта заработал размер меняется.
Но все равно иероглифы.
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Цитата:
Сообщение от
VetalST
Еще после изменений не работает size - размер шрифта.
Как в вашей библиотеке вывести картинку с массива.
Протестировать вывод изображения можно скачать программку и залить скетч из шапки темы
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Цитата:
А не size - размер шрифта заработал размер меняется.
Но все равно иероглифы.
А шрифты установлены вместе библиотекой? Похоже что либа работает, но вместо шрифтов мусор
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
-
Вложений: 1
Re: Дисплей Epson LCD L2F50 от Siemens S65
СПАСИБО БОЛЬШОЕ.
Мучался почти неделю. Заработало только на Arduino IDE версии 1.0.6
#include "WProgram.h"
Нужно было заменить в файлах l2f50.cpp и в S65Display.cpp библиотеки на:
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
И НИКОГО НЕ СЛУШАТЬ НЕ МЕНЯТЬ const prog_uint8_t font_PGM[] = на const uint8_t font_PGM[] =
И ЗА ЭТОГО ВМЕСТО БУКВ ВЫВОДИЛСЯ МУСОР.
Но появилась другая проблемка нужно текст нормально разместить на экране.
Вложение 18868
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
-
Вложений: 1
Re: Дисплей Epson LCD L2F50 от Siemens S65
ВСЕ РАБОТАЕТ БОЛЬШОЕ СПАСИБО.
Чтобы перевернуть текст как положено.
Как раз надо изменить в библиотеке в файле S65Display.cpp и S65Display.h тот кусок кода какой я выкладывал в посте #91.
Вот рабочая исправленная библиотека под Arduino IDE версии 1.0.6
Вложение 18870
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Выложил библиотеку в шапке
-
Вложений: 1
Re: Дисплей Epson LCD L2F50 от Siemens S65
Шрифты все работают, меняются в fonts.h.
Питаюсь добавить русский. Нашел чужой, выводит слова на русском, но через букву добавляет мусор.
На англ. все в порядке.
Отключил #define FONT_END7F в fonts.h чтобы от 0x80 до 0xbf были русские буквы.
В шрифте англ. и русские буквы ни чего лишнего но и знаки и цифры конечно. Все стандартно.
Как это можно исправить.
Может в uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color)
где то условие поставить, если после 0x80 до 0xbf выводил на экран через букву :confused:.
Только не пойму где, и как это придумать.
Пока не разобрался как, и какой программой под этот дисплей шрифт сделать.
Но шрифт нормальный может действительно в uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color) проблема.
Подскажите где копать.
В шрифте 8х8 выводит / палочку перед русской буквой.
Это 12х15 выводит мусор перед русской буквой.
Вложение 18871
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
А для LS020 есть у кого библиотека ? Я взял библиотеку L2F50 и заменил там L2F50 на LS020 не работает )
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
В шапке есть "Исправленная и рабочая библиотека для LCD L2F50 еще одна библиотека с исправленным выводом текста от VetalST" но нет на LS020 и написано что простая замена не помогла " поменял нужные строчки либы вместо LS020 заменил на L2F50 , но диплей никак не хотел работать "
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
"Тестовая программа для вывода изображений через USB . В программе можно задать паузу между выводами картинок и скорость порта в файле config.ini
Изображения с разрешением 176х132 можно положить в любом количестве в папку с программой и они будут автоматически прокручены через ардуино и ЖКИ"
В какую папку с программой ? ардуино ?
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
В ардуино код, программа на ПК. Которая тоже есть в шапке темы
Программа работает только с ардуиной у которой FTDI USB мост
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
В какой папке на ПК должна быть программа ?
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
С кирилицей по прежнему никак?, или есть варианты?
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Копать нужно в эту сторону http://compcar.ru/forum/showthread.p...l=1#post110401
http://compcar.ru/forum/showthread.p...l=1#post110395
http://compcar.ru/forum/showthread.p...ll=1#post91484
Вытащил из либы функции, с которыми нужно разбираться
PHP код:
uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color)
{
uint8_t ret, h, w; // h,w sind Laufvariablen für Höhe und Weite
#if FONT_WIDTH <= 8
uint8_t data;
#elif FONT_WIDTH <= 16
uint16_t data;
#elif FONT_WIDTH <= 32
uint32_t data;
#endif
uint8_t i, j, width, height;
const prog_uint8_t *ptr, *ptr_tmp;
i = (uint8_t)c;
#if FONT_WIDTH <= 8
ptr = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 16
ptr = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 32
ptr = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)];
#endif
width = FONT_WIDTH;
height = FONT_HEIGHT;
if(size <= 1)
{
ret = x+width;
if(ret > S65_WIDTH)
{
return S65_WIDTH+1;
}
setArea(x, y, (x+width-1), (y+height-1));
s65_drawStart();
ptr_tmp = ptr;
for(w=width; w!=0; w--) //
{
ptr = ptr_tmp;
//Serial.print("w="); Serial.println(w); delay(50);
for(h= height; h!=0; h--)
{
#if FONT_WIDTH <= 8
data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
data = pgm_read_dword(ptr); ptr+=4;
#endif
if(CHECK_BIT(data,w)) // hier Sprung in die Funktion CHECK_BIT(var,pos)
// die ist in S6%Dislay.h angelegt
// und sieht so aus:
// #define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))
{
s65_draw(color);
}
else
{
s65_draw(bg_color);
}
}
}
s65_drawStop();
}
else
{
ret = x+(width*size);
if(ret > S65_WIDTH)
{
return S65_WIDTH+1;
}
s65_setArea(x, y, (x+(width*size)-1), (y+(height*size)-1));
s65_drawStart();
ptr_tmp = ptr;
for(w=width; w!=0; w--) //
{
ptr = ptr_tmp;
//Serial.print("w="); Serial.println(w); delay(50);
for(h= height; h!=0; h--)
{
#if FONT_WIDTH <= 8
data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
data = pgm_read_dword(ptr); ptr+=4;
#endif
if(CHECK_BIT(data,w))
{
for(j=size; j!=0; j--)
{
s65_draw(color);
}
}
else
{
for(j=size; j!=0; j--)
{
s65_draw(bg_color);
}
}
}
}
s65_drawStop();
}
return ret;
}
uint8_t S65Display::drawText(uint8_t x, uint8_t y, char *s, uint8_t size, uint16_t color, uint16_t bg_color)
{
while(*s != 0)
{
x = drawChar(x, y, *s++, size, color, bg_color);
if(x > S65_WIDTH)
{
break;
}
}
return x;
}
Я бы поправил, но без дисплея это просто не возможно
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Уважаемые, не могли бы Вы объяснить новичку возможно ли подключение дисплея l2f50126 к arduino due и каким образом, или подсказать где копать?
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Я думаю что с подключением нет проблем, но с совместимостью библиотеки нужно проверить
Попробуйте скомпилировать сначало для UNO , если все получится, потом компилуруйте для DUE
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
В соответствии с предложеной Вами схемой распаял на макетке питание подсветки дисплея, на выходе получаю 1,9В. И сильный нагрев транзистора. Что может быть не так?
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Параметры дросселя не те, что нужны
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Уважаемый, Chip, подскажите, пожалуйста, в чём может быть причина такого поведения:
Дисплей отображает то, что от него требуется только первые полсекунды (примерно) после включения Ардуино, после этого только подсветка работает...?!
Т.е. изображение появляется при запуске и сразу исчезает.
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Методом "тыка" проблема разрешилась: подсоединил провод питания от 3.3V (идущий к 6-му и 8-му пинам дисплея) к 5V и картинка перестала исчезать. Видимо, не хватало питания.
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
-
Re: Дисплей Epson LCD L2F50 от Siemens S65
Цитата:
Сообщение от
Chip
Копать нужно в эту сторону
http://compcar.ru/forum/showthread.p...l=1#post110401
http://compcar.ru/forum/showthread.p...l=1#post110395
http://compcar.ru/forum/showthread.p...ll=1#post91484
Вытащил из либы функции, с которыми нужно разбираться
PHP код:
uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color)
{
uint8_t ret, h, w; // h,w sind Laufvariablen für Höhe und Weite
#if FONT_WIDTH <= 8
uint8_t data;
#elif FONT_WIDTH <= 16
uint16_t data;
#elif FONT_WIDTH <= 32
uint32_t data;
#endif
uint8_t i, j, width, height;
const prog_uint8_t *ptr, *ptr_tmp;
i = (uint8_t)c;
#if FONT_WIDTH <= 8
ptr = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 16
ptr = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 32
ptr = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)];
#endif
width = FONT_WIDTH;
height = FONT_HEIGHT;
if(size <= 1)
{
ret = x+width;
if(ret > S65_WIDTH)
{
return S65_WIDTH+1;
}
setArea(x, y, (x+width-1), (y+height-1));
s65_drawStart();
ptr_tmp = ptr;
for(w=width; w!=0; w--) //
{
ptr = ptr_tmp;
//Serial.print("w="); Serial.println(w); delay(50);
for(h= height; h!=0; h--)
{
#if FONT_WIDTH <= 8
data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
data = pgm_read_dword(ptr); ptr+=4;
#endif
if(CHECK_BIT(data,w)) // hier Sprung in die Funktion CHECK_BIT(var,pos)
// die ist in S6%Dislay.h angelegt
// und sieht so aus:
// #define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))
{
s65_draw(color);
}
else
{
s65_draw(bg_color);
}
}
}
s65_drawStop();
}
else
{
ret = x+(width*size);
if(ret > S65_WIDTH)
{
return S65_WIDTH+1;
}
s65_setArea(x, y, (x+(width*size)-1), (y+(height*size)-1));
s65_drawStart();
ptr_tmp = ptr;
for(w=width; w!=0; w--) //
{
ptr = ptr_tmp;
//Serial.print("w="); Serial.println(w); delay(50);
for(h= height; h!=0; h--)
{
#if FONT_WIDTH <= 8
data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
data = pgm_read_dword(ptr); ptr+=4;
#endif
if(CHECK_BIT(data,w))
{
for(j=size; j!=0; j--)
{
s65_draw(color);
}
}
else
{
for(j=size; j!=0; j--)
{
s65_draw(bg_color);
}
}
}
}
s65_drawStop();
}
return ret;
}
uint8_t S65Display::drawText(uint8_t x, uint8_t y, char *s, uint8_t size, uint16_t color, uint16_t bg_color)
{
while(*s != 0)
{
x = drawChar(x, y, *s++, size, color, bg_color);
if(x > S65_WIDTH)
{
break;
}
}
return x;
}
Я бы поправил, но без дисплея это просто не возможно
Хоть тема старая, но напишу решение, в этом коде после
добавляем
Цитата:
ret = x;
if ((i!=208) && (i!=209)) {
и закрываем скобку перед