Re: Arduino & display siemens S65
Цитата:
Сообщение от
zhserg
Спасибо за подсказку. Почти так и сделал, только буфер последовательного порта > 128 байт не получается применить - не работает. Но даже с буфером 126 байт скорость вывода получилась практически теоретически достижимая. На 115200 - около 7 сек. На 256000 (оказывается ардуинка и такую скорость поддерживает!!!) - около 4 сек. Эксперименты с выводом картинки завершил :)
PHP код:
#include <S65Display.h>
S65Display lcd;
byte volatile data[126]; //массив входных данных
int n=0, nbuf=126; // индекс массива, размер буфера
byte x=1, y=1; // текущие координаты
void setup(){
//init LCD
lcd.init(4); //spi-clk = Fcpu/4
//clear screen
lcd.clear(RGB(0,0,0));
Serial.begin(256000);
}
void loop(){
if (Serial.available() == nbuf) {
for (int i = 0; i < nbuf; i++) data[i] = Serial.read(); // прочитать данные из порта в массив
for (int i = 0; i < nbuf/3; i++) {
lcd.drawPixel(x ,y ,RGB(data[n],data[n+1],data[n+2])); // вывод пикселя на экран
x++; // увеличиваем значение X
n = n + 3;
if (n > nbuf-1) n = 0;
if (x > 176) {
x = 1;
y++; // увеличиваем значение Y
}
}
}
}
Подскажите, пожалуйста, новичку.
Не могу разобраться, как нужно слать ардуине. Я так понимаю что нужна последовательность RGB, например, 255044120. При отправке подобного кода ардуина рисует пиксели, но не требуемого цвета. Не знаю в каком режиме нужно слать через терминал(byte, ascii, hex, dec)?
Еще вопрос, какой программой вы пользовались для разложения картинки на последовательность цветов пикселей?
Chip, насчет русских шрифтов нет новостей?
Re: Arduino & display siemens S65
В терминале нужно посылать по одному байту
Re: Arduino & display siemens S65
Цитата:
Сообщение от
Chip
В терминале нужно посылать по одному байту
Спасибо, разобрался! Все рисует правильно, правда скорость не выше 9600, больше не держит, ардуина самодельная, которая на arduino.cc.
Если кто знает программу, раскладывающую картинку на последовательность цветов, буду благодарен.
Re: Arduino & display siemens S65
Re: Arduino & display siemens S65
Цитата:
Сообщение от
Chip
Видел ее, к сожалению, ничего не получилось из-за ft232, при запуске жалуется на отсутствие устройства. Думал перегнать ей картинку, затем сниффером com порта перехватить данные и уж затем слать обычной терминалкой в com.
Re: Arduino & display siemens S65
Потратив несколько часов и перепробовав кучу способ, я таки нашел решение! Скетч использовал от zhserg. Алгоритм следующий:
1) открываем изображение в фотошопе, обрезаем до 176х132, именно такого размера, иначе изображение пойдет волной на экране.
2) сохраняем изображение в .raw формат, ставим Save channels in: interleaved order и header 0.
3) ставим программу com port toolkit, затем открываем наш raw файл, ставим галочку "отправка сырых данных" и жмем send.
Для тех кто не знает, raw формат как раз представляет последовательность RGB без всего лишнего.
---
Все таки моя ардуина поддерживает скорость 115200, скорость вывода картинки около 6секунд, взамен 72с. при 9600.
Re: Arduino & display siemens S65
Уже третьи сутки пытаюсь инициализировать дисплей lph88. За основу взял код для LS020 отсюда, а команды инициализации отсюда. Написал скетч для Arduino, но дисплей не реагирует. Может есть люди, которые привязывали lph88 к Arduino, помогите пожалуйста. Мой код:
PHP код:
// lcd pins connected to corresponding lcd pins
#define RS (4)
#define RESET (17)
#define CS (16)
#define CLK (13)
#define DAT (11)
void setup() {
// set output pins
pinMode(RESET, OUTPUT);
digitalWrite(RESET,LOW);
pinMode(CS, OUTPUT);
digitalWrite(CS,HIGH);
pinMode(RS, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(DAT, OUTPUT);
/**************************
*
* init starts here
*
**************************/
delay(100); // wait a bit for everything to settle down... who knows
digitalWrite(CS, HIGH);
digitalWrite(RS, HIGH);
digitalWrite(RESET, LOW);
delay(50);
digitalWrite(RESET, HIGH);
delay(50);
digitalWrite(CS,LOW);
unsigned char LCD_init_masiv[70][3] ={
{0x74,0x00,0x00}, //1 block
{0x76,0x00,0x01},
{0x74,0x00,0x07},
{0x76,0x00,0x00},
{0x74,0x00,0x02},
{0x76,0x04,0x00},
{0x74,0x00,0x04},
{0x76,0x00,0x00},
{0x74,0x00,0x0C},
{0x76,0x00,0x01},
{0x74,0x00,0x0D},
{0x76,0x06,0x16},
{0x74,0x00,0x1E},
{0x76,0x10,0x10}, //2 block
{0x74,0x00,0x03},
{0x76,0x00,0x0C},
{0x74,0x00,0x0E},
{0x76,0x2D,0x1F},
{0x74,0x00,0x0D},
{0x76,0x06,0x16},
{0x74,0x00,0x01},
{0x76,0x02,0x15},
{0x74,0x00,0x0F},
{0x76,0x00,0x00},
{0x74,0x00,0x0B},
{0x76,0x00,0x00},
{0x74,0x00,0x11},
{0x76,0x00,0x00}, //3 block
{0x74,0x00,0x06},
{0x76,0x00,0x00},
{0x74,0x00,0x05},
{0x76,0x00,0x30},
{0x74,0x00,0x14},
{0x76,0xAF,0x00},
{0x74,0x00,0x15},
{0x76,0x00,0x00},
{0x74,0x00,0x16},
{0x76,0x83,0x00},
{0x74,0x00,0x17},
{0x76,0xAF,0x00},
{0x74,0x00,0x20},
{0x76,0x00,0x00}, //4 block
{0x74,0x00,0x30},
{0x76,0x00,0x00},
{0x74,0x00,0x31},
{0x76,0x04,0x00},
{0x74,0x00,0x32},
{0x76,0x02,0x07},
{0x74,0x00,0x33},
{0x76,0x07,0x00},
{0x74,0x00,0x34},
{0x76,0x00,0x05},
{0x74,0x00,0x35},
{0x76,0x07,0x03},
{0x74,0x00,0x36},
{0x76,0x07,0x07}, //5 blocl
{0x74,0x00,0x37},
{0x76,0x00,0x07},
{0x74,0x00,0x3A},
{0x76,0x12,0x00},
{0x74,0x00,0x3B},
{0x76,0x00,0x09},
{0x74,0x00,0x07},
{0x76,0x00,0x05},
{0x74,0x00,0x07},
{0x76,0x00,0x25},
{0x74,0x00,0x07},
{0x76,0x00,0x27},
{0x74,0x00,0x07},
{0x76,0x00,0x37}
};
int i;
for(i=0;i<=69;i++){
shiftOut(DAT, CLK, MSBFIRST, (LCD_init_masiv[i][0] >> 8));
shiftOut(DAT, CLK, MSBFIRST, LCD_init_masiv[i][0]);
shiftOut(DAT, CLK, MSBFIRST, (LCD_init_masiv[i][1] >> 8));
shiftOut(DAT, CLK, MSBFIRST, LCD_init_masiv[i][1]);
shiftOut(DAT, CLK, MSBFIRST, (LCD_init_masiv[i][2] >> 8));
shiftOut(DAT, CLK, MSBFIRST, LCD_init_masiv[i][2]);
}
// were done, display doesnt need to listen anymore
digitalWrite(CS, HIGH);
pinMode(13, OUTPUT);
}
void loop() {
// blink onboard led to signal end of init
digitalWrite(13,HIGH);
delay(250);
digitalWrite(13,LOW);
delay(250);
}
У меня Arduino UNO, питание для подсветки беру внешнее 10В, а для питания самого дисплея эти же 10В через стабилизатор 3,3В. Согласование с Arduino через делители.
Re: Arduino & display siemens S65
В этой библиотеке есть lph88 закоментировано. Посмотри может поможет. Я сам не пробовал.
Re: Arduino & display siemens S65
И эту библиотеку я пробовал, подправил 1 строчку (больше не нашел), но дисплей инициализировать не удалось.
Re: Arduino & display siemens S65
В файле S65Display.h нужно раскоментировать твой дисплей, а ненужный закоментировать
Цитата:
//Display settings
#define S65_LS020 //LS020 type (default)
//#define S65_LPH88 //LPH88 type
//#define S65_L2F50 //L2F50 type