LINUX.ORG.RU
ФорумTalks

Дисплей с UART шлет данные на RX, но не принимает данные с TX.

 , ,


0

2

Добрый вечер всем! Сразу скажу, что в электронике полный нуб и не прошу за меня найти решение, а лишь направить на путь решения.

Приобрел на Али дисплей со встроенным UART-RS232 - Surenoo SLG12864D. И прежде чем писать софт работающий с этим дисплеем, я решил попробовать послать команды (HEX-последовательности) вручную через CuteCom. В качестве конвертера USB-RS232 использую YN-8604. Настройки порта выставлены согласно руководству дисплея (полноценного даташита в понимании этого слова, похоже нет).

Моя проблема заключается в том, что я не могу успешно отправить данные на RX, но при этом без проблем получаю данные с TX, при замыкании ножки RESET на GND (см. скрин). Версия с непропаяной ножкой сразу отпадает, пропаял все раз десять. Дисплей рабочий, один раз мне удалось вывести мой текст на экран но больше повторить это не смог. Плюс в подтверждении этой версии могу добавить, что на микросхеме RS232-to-TTL была через «прозвонку» мультиметра была найдена соединенная с RX ножка, и на эту ножку приходит сигнал видимый через логический анализатор.

Ссылка товара на официальном сайте
Пользовательское руководство
Ссылка на скачивание библиотеки (только в ней есть нужные HEX-последовательности)

Скриншот CuteCom #1 - Что посылаю
Скриншот CuteCom #2 - Настройки порта

Фото #1
Фото #2
Фото #3
Фото #4



Последнее исправление: BratecLis (всего исправлений: 1)
#include <RSI12864-02.h>

//-----------------------显示产品信息--------------------------
void display_ID()      
{
    send(0xaa);
    send(0x00);
}
//---------------------------复位------------------------------
void reset()
{
    send(0xaa);
    send(0x01);
}

//------------------------显示清屏-----------------------------
void clear_display()
{
    send(0xaa);
    send(0x10);
}
//------------------------打开显示-----------------------------
void display_on()
{
    send(0xaa);
    send(0x11);
}
//------------------------关闭显示-----------------------------
void display_off()
{
    send(0xaa);
    send(0x12);
}
//------------------------设置背光亮度-------------------------
void brightness(U8 n)
{
    send(0xaa);
    send(0x13);
    send(n);
}
//------------------------波特率设为9600------------------------
void baud_9600()
{
    send(0xaa);
    send(0x14);
}
//------------------------波特率设为19200------------------------
void baud_19200()
{
    send(0xaa);
    send(0x15);
}
//------------------------波特率设为38400------------------------
void baud_38400()
{
    send(0xaa);
    send(0x16);
}

//-------------------光标设置------------------------------------
void cusor_xy(U8 x,U8 y)
{
    send(0xaa);
    send(0x20);
    send(x);
    send(y);
}
//----------------字符反白显示功能打开------------------------
void inversely_on()
{
    send(0xaa);
    send(0x21);
}
//----------------字符反白显示功能关闭------------------------
void inversely_off()
{
    send(0xaa);
    send(0x22);
}


//-------------------在当前光标处显示字符串-------------------
void print_string(U8 *ptr)
{
    send(0xaa);
    send(0x23);
    while(*ptr!='\0')
    {
        send(*ptr++);             
    }
    send(0X0d);
}
//-------------------在指定位置显示字符串---------------------
void print_string_xy(U8 x,U8 y,U8 *ptr)
{
    send(0xaa);	
    send(0x20);
    send(x);
    send(y);
    send(0xaa);
    send(0x23);
    while(*ptr!='\0')
    {
        send(*ptr++);             
    }
    send(0X0d);
}
//-----------------在当前光标处显示长整型变量-----------------
void print_U32(U32 n)
{
    U32 i,temp;
    U8 t=0;
    send(0xaa);
    send(0x23);
	if(n==0)
	{
        send(0x30);
	}
	else
	{
        for(i=1000000000;i>=1;i=i/10)
        {
            temp=n/i;
            if(t==0&&temp)
            {
                send(temp%10+0x30);
                t=1;
            }
            else if(t==1)
            {
                send(temp%10+0x30);
            }
		}
    }
    send(0x0d);
}
//-----------------在指定光标处显示长整型变量-----------------
void print_U32_xy(U8 x,U8 y,U32 n)
{
    U32 i,temp;
    U8 t=0;
    send(0xaa);
    send(0x20);
    send(x);
    send(y);

    send(0xaa);
    send(0x23);
    if(n==0)
	{
        send(0x30);
	}
	else
	{
        for(i=1000000000;i>=1;i=i/10)
        {
            temp=n/i;
            if(t==0&&temp)
            {
                send(temp%10+0x30);
                t=1;
            }
            else if(t==1)
            {
                send(temp%10+0x30);
            }
		}
    }
    send(0x0d);
}
//-------------------在当前光标处显示字符串,使用5*7字体-------------------
void print_string_5_7(U8 *ptr)
{
    send(0xaa);
    send(0x24);
    while(*ptr!='\0')
    {
        send(*ptr++);             
    }
    send(0X0d);
}
//-------------------在指定位置显示字符串,使用5*7字体---------------------
void print_string_xy_5_7(U8 x,U8 y,U8 *ptr)
{
    send(0xaa);	
    send(0x20);
    send(x);
    send(y);
    send(0xaa);
    send(0x24);
    while(*ptr!='\0')
    {
        send(*ptr++);             
    }
    send(0X0d);
}
//-----------------在当前光标处显示长整型变量,使用5*7字体-----------------
void print_U32_5_7(U32 n)
{
    U32 i,temp;
    U8 t=0;
    send(0xaa);
    send(0x24);
	if(n==0)
	{
        send(0x30);
	}
	else
	{
        for(i=1000000000;i>=1;i=i/10)
        {
            temp=n/i;
            if(t==0&&temp)
            {
                send(temp%10+0x30);
                t=1;
            }
            else if(t==1)
            {
                send(temp%10+0x30);
            }
		}
    }
    send(0x0d);
}
//-----------------在指定光标处显示长整型变量,使用5*7字体-----------------
void print_U32_xy_5_7(U8 x,U8 y,U32 n)
{
    U32 i,temp;
    U8 t=0;
    send(0xaa);
    send(0x20);
    send(x);
    send(y);

    send(0xaa);
    send(0x24);
    if(n==0)
	{
        send(0x30);
	}
	else
	{
        for(i=1000000000;i>=1;i=i/10)
        {
            temp=n/i;
            if(t==0&&temp)
            {
                send(temp%10+0x30);
                t=1;
            }
            else if(t==1)
            {
                send(temp%10+0x30);
            }
		}
    }
    send(0x0d);
}

//---------------指定区域反白显示--------------------
void inversely_area(U8 x1,U8 y1,U8 x2,U8 y2)
{
    send(0xaa);
    send(0x30);
    send(x1);
    send(y1);
    send(x2);
    send(y2);
}
//--------------按序列号显示图片-------------------
void display_bmp(U16 n)
{
    send(0xaa);
    send(0x31);
    send(n>>8);
    send(n);
}
//-------------块方式显示图片-------------------------
void display_bmp_block(U16 n,U8 px,U8 py,U8 x,U8 y,U8 w,U8 h)
{
    send(0xaa);
    send(0x32);
    send(n>>8);
    send(n);
    send(x);
    send(y);
	send(px);
    send(py);
    send(w);
    send(h);
}
//------------使能按键扫描功能-------------------------
void keyscan_enable()
{
    send(0xaa);
    send(0x50);
}
//------------禁止按键扫描功能-------------------------
void keyscan_disable()
{
    send(0xaa);
    send(0x51);
}
//------------单次触发模式-------------------------
void kescan_single()
{
    send(0xaa);
    send(0x52);
}
//------------连续触发模式-------------------------
void kescan_continuous()
{
    send(0xaa);
    send(0x53);
}
//------------连续触发周期-------------------------
void kescan_continuous_cycle(U8 n)
{
    send(0xaa);
    send(0x54);
    send(n);
}
BratecLis
() автор топика

один раз мне удалось вывести мой текст на экран но больше повторить это не смог

Просадки по питанию могут влиять на глючность, и посмотри нет ли управляющих ножек совсем никуда не припаянных, неопределённое состояние которых иногда творит необъяснимые наукой чудеса :)

quickquest ★★★★★
()

Я тоже нуб, однажды полвечера с STN-экранчиком чесал репу на тему «чот не показывает», а потом таки покрутил регулировку контрастности с обратной стороны платы, и опа, стало видно, что показывает. Причем, как правильно пишет человек выше, если в процессе его лапать пальцами за ноги, то может и случайно нарисовать что-нибудь.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Уже пробовал менять контрастность, это ничего не дало. У меня даже подсветка не включается.

И насчет текста, он был не случайный, а тот который я послал.

BratecLis
() автор топика
Ответ на: комментарий от foxy_ant

Вот зачем учить плохому :)

3	BUSY O	1:Busy, 0:Idle Generally can be suspended treatment

И да это, нога которую надо читать, а не дергать по уровням, тебе стекло само скажет когда оно готово с тобой поговорить

Morin ★★★★★
()
Последнее исправление: Morin (всего исправлений: 2)
Ответ на: комментарий от BratecLis

Смотри что нашел

6 RST I Reset signal, active-low

если я правильно понял китайский английский, то сброс логическим нулем, а у тебя провод в воздухе на фото.

Правда куда оно подтянуто хз, по фото не разобрать

Morin ★★★★★
()
Ответ на: комментарий от Morin

Если я кратковременно замыкаю RST на GND, то на RX получаю старый адрес сайта производителя (видно на скриншоте из CuteCom).

BratecLis
() автор топика
Ответ на: комментарий от BratecLis

так в рабочем состоянии там должен быть плюс, а у тебя что? ты проверил? может оно в воздухе висит, через килоомчик на плюс посади

Morin ★★★★★
()

Все еще не понятны уровни сигналов на UART. Можешь осциллом глянут, что он выдает на TX? Если там меандр 0-5V то у меня для тебя плохие новости. Своим нарядным YN-Tech ты мог подпалить RX у дисплея.

З.Ы. Снимаю вопрос, там 2 версии. С запаянным RS232-TTL и нет. У тебя судя по фотке запаян.

yax123 ★★★★★
()
Последнее исправление: yax123 (всего исправлений: 2)

Неплохо бы проверить,а действительно ли линуксовый комп с терминальной программой что-то посылает по проводам. С микросхемой PL2303 (тоже конвертор usb-com) у меня были случаи когда линуксовый драйвер порта ничего не хотел посылать на выход пока небыли установлены в правильное значение пары сигналов cts/rts и dtr/dsr. Можно было либо на самой микросхеме соответствующие ноги замкнуть,либо программно посредством вызовов ioctl с нужными флагами сказать драйверу чтобы он эти сигналы игнорировал. Тоже самое справедливо и для приема,но тут как раз прием работает. Проверить просто - подключить осциллограф к выходу порта на конверторе usb-com и понажимать кнопки в терминальной программе. Особенно удобна буква «U» потому что у нее биты чередуются 0-1. Еще вариант проверки - соединить на конверторе ком-усб выводы tx и rx - в терминале должно появиться «эхо». Для того чтобы увидеть значения сигналов в порту - можно использовать программу statserial. По умолчанию ее в системе нет,обычно надо доустановить. Самой некапризной терминальной программой для ком-портов в линуксе я считаю minicom. У него несколько неочевидные хоткеи,но зато я за четверть века не замечал за ним серьезных глюков.

watchcat382
()
Ответ на: комментарий от watchcat382

Благодарю за ответ! Я уже проверял, что сигнал принимается на другом COM порту. Так же проверял работу в оффтопик системе. Плюс, как я уже писал в шапке на ножку микросхемы конвертера явно приходит сигнал, а вот выходит ли он, ещё не смотрел. За дельные советы с буквой «U», mimicom и statserial, отдельное спасибо!

P.S. Я начинаю думать, что не работает имеено SP3232EEN, но это лишь мое нубовское предположение.

BratecLis
() автор топика
Ответ на: комментарий от BratecLis

если она дохлая всегда можно ее отпаять и прицепиться напрямую, согласовав уровни. на офсайте даже видно какие перемычки надо перекинуть.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

Спасибо за совет!

Проверил выводы конвертера уровней, используя логический анализатор и даташит, и пришел к выводу что микросхема умерла. Снял феном, удалил лишние конденсаторы и переместил нулевые резисторы. Как итог все команды заработали, за исключенем лишь установки уровня подсветки, это пока победить не смог.

Написал китайскому продавцу, что микросхема мертвая и кинул фото-пруфы. Получил ответ, что ничего сломаться не могло, на заводе есть ОТК и вообще они такие тысячи штук продали и у никого нет проблем.

BratecLis
() автор топика
Ответ на: комментарий от BratecLis

Я нашел ещё один даташит, которого нет на англоязычном сайте. Удивительно, но там прописанны все управляющие последовательности и там же другой вольтаж.

Ещё один даташит

BratecLis
() автор топика

Minimum and Maximum voltages
The minimum and maximum voltages of RS-232 signals are +/-13V, while TTL signals are 0 to 3.3V/5V.

Я не понял , ttl или rs232?
Ты какую купил?

bloodmeri
()
Ответ на: комментарий от bloodmeri

Есть ещё джампер подсветки

Добрый день! Сразу извиняюсь за поздний ответ. Я уже было отчаялся, но ваш совет помог - методом научного тыка понял надо соеденить J c R1. Экран сразу загорелся (как и написанно в даташите)!

Я не понял , ttl или rs232?

Купил RS232, понял что конвертер RS232-to-TTL мертв, и переделал на версию TTL согласно картинке. Все работало, за исключением подсветки, до момента установки перемычки. Теперь работает лишь подсветка, RX и TX нет. Проверял под микроскопом не поставил ли где-то перемычку припоем. Так же пробовал менять UART-«свисток». Не знаю, что еще сделать :(

P.S. Наверное неправильно, что до всего этого нужно догадываться, было бы хорошо если бы китайцы опубликовали принципиальную схему устройства. Но увы, продавец крайне не контактный.

BratecLis
() автор топика
Ответ на: комментарий от BratecLis

Вообще, я наверное сглупил сильно. Надо было брать любой популярный I2С-дисплей и через AVR/PIC подключать его к ПК.

BratecLis
() автор топика
Ответ на: комментарий от BratecLis

Купил RS232, понял что конвертер RS232-to-TTL мертв, и переделал на версию TTL

На картинке только способ опознания , не факт что сняв микросхему оно станет работать TTL.

Как определили что конвертор мёртв?


Остался вариант управлять экраном напрямую с аакой нибудь ардуино.

bloodmeri
()
Ответ на: комментарий от BratecLis

Дык , припаял джампер , перестало работать связь , так отпаяй джампер , не?

bloodmeri
()
Ответ на: комментарий от bloodmeri

Добрый вечер!

Как определили что конвертор мёртв?

Используя логический анализатор и даташит на SP3232EEN. На входе есть сигнал, но на выходе уже нет.

не факт что сняв микросхему оно станет работать TTL.

Да, так и есть. Но мне повезло, тогда заработало вообще все, кроме подстветки.

Остался вариант управлять экраном напрямую

Честно, тут не понял, чем это будет отличаться от варанта с ПК.

так отпаяй джампер

Отпаял. Не работает почему-то :(

P.S. Заказал таких же размеров I2C-дисплей, сам МК запрограммирую. Чувствую, что этот дисплей я ещё не скоро заведу.

BratecLis
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)