Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ср апр 20, 2016 08:19:12
Привет уважаемым мудрым котам. Ковыряю библиотеку для LPH9157-2. Прошу помощи разобраться в принципе работы функции. Судя по тому, что маска сдвигается влево, шлём сначала младший бит? Или я не так понимаю?
Так надо или всёже надо со старшего? В таблице баиты (напр. для символа "А") такие:
0x7E, 0x11, 0x11, 0x11, 0x7E
Я ещё ничего в железе не делал, только разбираюсь. Запутался в конец.
Спойлер
//=========
// Функция прорисовки символа на дисплее без цвета фона
//=========
void Send_Symbol_Shadow (unsigned char symbol, char x, char y, int t_color, char zoom_width, char zoom_height)
{
unsigned char temp_symbol, a, b, zw, zh, mask;
char m, n;
m=x;
n=y;
if (symbol>127) symbol-=64; //Убираем отсутствующую часть таблицы ASCII
for ( a = 0; a < 5; a++) //Перебираю 5 байт, составляющих символ
{
temp_symbol = font_5x8[symbol-32][a];
zw = 0;
while(zw != zoom_width) //Вывод байта выполняется zw раз
{
switch(rot)
{
case 0: case 180: n=y; break;
case 90: case 270: m=x; break;
}
mask=0x01;
for ( b = 0; b < 8; b++ ) //Цикл перебирания 8 бит байта
{
zh = 0; //в zoom_height раз увеличится высота символа
while(zh != zoom_height) //Вывод пикселя выполняется z раз
{
switch(rot)
{
case 0: case 180:
if (temp_symbol&mask)
{
Put_Pixel (m+zw, n+zh, t_color);
}
break;
case 90: case 270:
if (temp_symbol&mask)
{
Put_Pixel (m+zh, n+zw, t_color);
}
break; //Получить адрес начального пикселя по оси y для вывода очередного байта
}
zh++;
}
mask<<=1; //Смещаю содержимое mask на 1 бит влево;
switch(rot)
{
case 0: case 180: n=n+zoom_height; break;
case 90: case 270: m=m+zoom_height; break;
}
}
zw++;
}
switch(rot)
{
case 0: case 180: m=m+zoom_width; break;
case 90: case 270: n=n+zoom_width; break;
}
}
}
Ср апр 20, 2016 09:03:47
Да, ты прав, вначале младший бит, потому что вначале mask = 0x01. Потом маска сдвигается влево и передаётся второй бит и т.д.
Ср апр 20, 2016 09:16:25
GARMIN писал(а):Да, ты прав, вначале младший бит, потому что вначале mask = 0x01. Потом маска сдвигается влево и передаётся второй бит и т.д.
Ну столько-то я понимаю, хоть и полный профан в С. Я не понял, так и должно быть?. И ещё. Зачем во всех циклах проверяется угол поворота экрана? Если проверку вынести в самое начало функции и установить ФЛАГ в зависимости от поворота (ещё 1 переменная) и потом вместо проверки на поворот просто AND ФЛАГ,- не будет ли быстрее работать?
Вообще-то перекраиваю под ассемблер... (Профан же
)
Ср апр 20, 2016 10:52:00
Учиться никогда не поздно.
Я тоже посматриваю листинг ассемблера после компиляции, чтобы проверить, насколько оптимально написана программа, но первичным нужно делать си.
Ср апр 20, 2016 12:22:43
Просто учиться не хватает самого дорогого - времени
. Писать на асме начал для Зайлоговского Z80, когда ни С ни тем более AVR небыло. Интуитивно чувствую, что делает программа на С, но сам что либо написать ПОКА не в силах. Потому с месяц назад и просил здесь помощи, но, видно, не дождусь
. На свои вопросы ответов не получаю, наверно глупые те вопросы... Ковыряюсь дальше. Сам, всё только сам...
Может и рожУ что. Спасибо, что вообще ответили!
Ср май 18, 2016 10:43:42
Привет котам, Запустил я свой LPH-9157-2. Всё какое-то время работало отлично, но потом стал замечать, что цвета пошли не те.. В общем, не гасится зелёный (горит вполнакала даже если вывожу чёрный), да и красный "подсвечивает". Красный еле светит. В итоге цвета искажены. Если даю инверсию (0х21) то Красный светит нормально (опять же вместе с зелёным). Это что - хана дисплею или таблица цветов сбилась? Если таблица (0х2D) - то что там должно быть? (там 128 байт) Команду 0х2D я не посылал. Питаю от 3,3V, входы - через делители.
Пт июн 10, 2016 06:48:20
Есть дисплеи от Samsung C3300 (LMS241GF66) и Nokia 5600s-1(LS022...), попадалось ли что-нибудь на них?
Пт июн 10, 2016 22:31:38
По дисплеям LS022... я ранее приводил ссылку
http://phreakerclub.com/464
Пн июл 11, 2016 06:36:53
Кто знает, что случилось с сайтом, откуда я п@здил схемы сотовых, в частности подключение дисплеев?
http://service-schematics.ru/Месяц назад работал, а сейчас посылает на X.
Чт сен 22, 2016 08:39:39
Так работает сайт.
Сб сен 24, 2016 22:38:31
Изучаю даташит на SPFD54124B. В упор не вижу рекомендаций как его инициализировать. Ткните носом, пожалуйста.
Пт окт 07, 2016 23:07:15
dgrett писал(а):Привет уважаемым мудрым котам. Ковыряю библиотеку для LPH9157-2. Прошу помощи разобраться в принципе работы функции. Судя по тому, что маска сдвигается влево, шлём сначала младший бит? Или я не так понимаю?
Так надо или всёже надо со старшего? В таблице баиты (напр. для символа "А") такие:
0x7E, 0x11, 0x11, 0x11, 0x7E
Я ещё ничего в железе не делал, только разбираюсь. Запутался в конец.
Спойлер
//=========
// Функция прорисовки символа на дисплее без цвета фона
//=========
void Send_Symbol_Shadow (unsigned char symbol, char x, char y, int t_color, char zoom_width, char zoom_height)
{
unsigned char temp_symbol, a, b, zw, zh, mask;
char m, n;
m=x;
n=y;
if (symbol>127) symbol-=64; //Убираем отсутствующую часть таблицы ASCII
for ( a = 0; a < 5; a++) //Перебираю 5 байт, составляющих символ
{
temp_symbol = font_5x8[symbol-32][a];
zw = 0;
while(zw != zoom_width) //Вывод байта выполняется zw раз
{
switch(rot)
{
case 0: case 180: n=y; break;
case 90: case 270: m=x; break;
}
mask=0x01;
for ( b = 0; b < 8; b++ ) //Цикл перебирания 8 бит байта
{
zh = 0; //в zoom_height раз увеличится высота символа
while(zh != zoom_height) //Вывод пикселя выполняется z раз
{
switch(rot)
{
case 0: case 180:
if (temp_symbol&mask)
{
Put_Pixel (m+zw, n+zh, t_color);
}
break;
case 90: case 270:
if (temp_symbol&mask)
{
Put_Pixel (m+zh, n+zw, t_color);
}
break; //Получить адрес начального пикселя по оси y для вывода очередного байта
}
zh++;
}
mask<<=1; //Смещаю содержимое mask на 1 бит влево;
switch(rot)
{
case 0: case 180: n=n+zoom_height; break;
case 90: case 270: m=m+zoom_height; break;
}
}
zw++;
}
switch(rot)
{
case 0: case 180: m=m+zoom_width; break;
case 90: case 270: n=n+zoom_width; break;
}
}
}
А еще можно покурить регистры "Partial....."
Я по поводу кода вывода символа. Циклы циклы циклы.
Ср ноя 16, 2016 09:49:09
у кого есть библиотеки под цветные дисплеи?
например такого плана TFT 5110
поделитесь!
https://ru.aliexpress.com/item/J34-F85- ... 5540d63412
Вт сен 19, 2017 16:59:17
Доброго времени суток, уважаемые. Подскажите пожалуйста по поводу дисплея от Siemens A70.
Подключал еще давно к атмеге, будто разобрался, заработал. Вот, сегодня решил подключить к STM32F103C8T6, библиотеки портировал. Питание STM-ки естественно от 3,3В, на дисплее ничего не выводится, контрастность на максимум поставил, если очень сильно присмотреться, то почти получается различить выводимую информацию, подаю на дисплей питание 5В - все отлично выводится. Есть ли у кого-нибудь опыт подрубания этого дисплея к 3,3В?
Нашел пару проектов по подключению этого дисплея к STM, брал инициализацию с них - та же проблема
Сб сен 23, 2017 11:05:03
Вот кусок из проэкта, отвечающий за инициализацию и установку контраста:
- Код:
Proc LCD_Command(Command As Byte)
LCD_DC = 0
DelayCS 1
LCD_CS = 0
DelayCS 1
SHOut LCD_SDA,LCD_CLK,MsbFirst,[Command]
DelayCS 1
LCD_CS = 1
EndProc
Proc LCD_Init()' Siemens A70 102x64 pix.
LCD_Reset()
LCD_Command($21) 'LCD EXTENDED COMMANDS
LCD_Command(Contrast) 'SET LCD Vop (CONTRAST), init value = $C8
LCD_Command($14) 'LCD BIAS MODE
LCD_Command($0B)
LCD_Command($05) 'SET TEMP COEFFICENT
LCD_Command($20) 'LCD STANDARD COMMANDS
LCD_Command($11)
LCD_Command($0C) 'LCD IN NORMAL MODE
EndProc
Proc LCD_Contrast(Contrast As Byte)
LCD_Command($21)
LCD_Command(Contrast) 'SET CONTRAST
LCD_Command($20)
LCD_Command($11)
LCD_Command($0C)
EndProc
А вот и как работает:
https://www.youtube.com/watch?v=RM_3OMl8NG4
Сб сен 23, 2017 11:27:36
Siemens A70.... фу какя древность... и ult их берете если работать с семенами надо брать от с65 с75-самые изученые и масовые
кстати все семеновские диспы имеют питание 2,9в!!! подать на них 3в3 еще с болшим натягом можно ...но 5в это...
уже полный беспредел ...а че мелочится давай уж сразу 230...
Сб сен 23, 2017 19:41:53
Дисплеи от Siemens A70 очень удобные - паябельные и с встроенной подсветкой, работают без замечаний при напряжении питания от 2,7 до 3,6 вольт, это проверено, дальше просто не пробовал.
Сб сен 23, 2017 22:14:47
бгкот, спасибо за пример кода. к сожалению он не работает на моем дисплее. то ли он подпаленный, то ли контроллер глючный или немного не тот (не получается поменять адресацию, режим норм/инверсный). всем спасибо, просто стало скучно, хотел поиграться с этим дисплеем. ну, от 5В работает хорошо и то неплохо
Сб сен 23, 2017 22:20:13
зря ты на него 5в подаешь...это в 2раза от нормы! я понимаю что немцы живучие если ориг
Сб сен 23, 2017 23:11:21
Немцы здесь нипричем, это корейцам спасибо - "ориг" дисплей HP10534 сделали в Hyundai LCD Inc., но конечно 5в. это перебор.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.