Autor Tema: Control display NHD-C0220BiZ-FSW-FBW-3V3M  (Leído 268 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2644
Control display NHD-C0220BiZ-FSW-FBW-3V3M
« en: 02 de Mayo de 2019, 06:46:48 »
Buenas, a ver si alguien puede echarme una mano con este display, nunca he utilizado un display en I2C.

Tengo varias dudas y no soy capaz de echarlo a andar.

http://www.newhavendisplay.com/specs/NHD-C0220BiZ-FSW-FBW-3V3M.pdf

http://www.newhavendisplay.com/app_notes/ST7036.pdf

Estoy utilizando un Renesas synergy con el I2C configurado como maestro, con rate estadar (up to 100Khz) y slave adress 0x3C

 

* Sin título.png
(25.9 kB, 658x208 - visto 78 veces)


el I2C me funciona, por que lo he visto en el osciloscopio, y los valores positivos llegan a 3,28V y los negativos a ~0V.

tambien he intentado hacerlo funcionar como en el ejemplo, que es un I2C por software, pero nada, la pantalla siempre esta en blanco.

El driver es bastante confuso, para empezar dice que la dirección es 0x78 pero en el ejemplo de la trama manda 7C, busacndo por internet he visto que muchos mandan el 0x3C ya que el 0x78 es el 0x3C con un 0 mas del R/W.

si inicializo con los siguientes codigos deberia ver por pantalla el cursor parpadeando no?

Código: [Seleccionar]
uint8_t Byte=0x00;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);

    Byte=0x38;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);
    R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);

    Byte=0x39;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);
    R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);

    Byte=0x14;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);

    Byte=0x78;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);

    Byte=0x5E;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);

    Byte=0x6D;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);
    R_BSP_SoftwareDelay(300, BSP_DELAY_UNITS_MILLISECONDS);

    Byte=0x0E;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);

    Byte=0x01;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);
    R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

    Byte=0x06;
    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 1 , false);
    R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

aunque asi no se si manda la dirección que puse en la configuracion en cada write, si lo escribo asi:

Código: [Seleccionar]
uint8_t Byte[10]={0x00,0x38,0x39,0x14,0x78,0x5E,0x6D,0x0E,0x01,0x06};

    g_i2c0.p_api->write(g_i2c0.p_ctrl, &Byte, 10 , false);

tampoco funciona.

¿alguien que sepa tratar estas pantallas?
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7167
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #1 en: 02 de Mayo de 2019, 08:39:34 »
Citar
El driver es bastante confuso, para empezar dice que la dirección es 0x78 pero en el ejemplo de la trama manda 7C, busacndo por internet he visto que muchos mandan el 0x3C ya que el 0x78 es el 0x3C con un 0 mas del R/W.

La direccion del ST7036 va de : 0111100 a 0111111, Asi que si o si deberia tener un h'7x' para comenzar Puede ser 0x78, 0x7A, 0x7C, 0x7E

Esto esta definido por los pines DB7 y DB6 del ST7036 a la cual vos no tenes acceso, y ya conectado para que sea 0x78 la direccion del esclavo. La imagen de la transferencia es valida, y esta sacada directamente del datasheet del ST7036, el cual posee una direccion de esclavo valida, aunque no se aplique a justamente ese modelo.

0x3C son los 7 bits de la direccion, si los desplazas 1 ves a la izquierda para poner el R/W, te queda 0x78

-----------------------

Citar
si inicializo con los siguientes codigos deberia ver por pantalla el cursor parpadeando no?

No estoy familiarizado con las librerias de renesas y no encuentro un PDF sobre la API que explique correctamente que hace cada uno de los comandos.
Lo digo porque uno puede cargar la direccion del esclavo que desea conectarse...

Si la API envia la direccion y R/W entonces solo enviar:

0x00 y 0x0F byte de control indicando que es el ultimo comando, y finalmente la instruccion de display on, cursor on y blink on.

Deberia incluir solo el start/stop y el manejo del ack.

Si no envia la direccion y el R/W entonces seria:

0x78,0x00,0x0F
direccion, byte de control indicando que es el ultimo comando, y finalmente la instruccion de display on, cursor on y blink on.

Recorda dejar un tiempo de al menos 50 a 100ms antes de enviarle algo al LCD, debido a que esta inicializandose, supuestamente este se inicializa solo, aunque luego vas a tener que acomodarlo a 2 lineas... Pero si hablamos de solamente poner el cursor en blink, por lo que parece deberias enviar esos 2 bytes nomas.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2644
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #2 en: 02 de Mayo de 2019, 09:08:33 »
He conseguido hacer que funcione por software:

Código: [Seleccionar]
void init_LCD()
{
    DSPL_RST_ON;
    R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
    DSPL_RST_OFF;
    R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);

    I2C_Start();
    I2C_out(0x78);//Slave=0x78
    I2C_out(0x00);//Comsend = 0x00
    I2C_out(0x38);
    R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
    I2C_out(0x39);
    R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
    I2C_out(0x14);
    I2C_out(0x78);
    I2C_out(0x5E);
    I2C_out(0x6D);
    I2C_out(0x0E);
    I2C_out(0x01);
    I2C_out(0x06);
    R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
    I2C_Stop();
}

void I2C_out(unsigned char j) //I2C Output
{
    int n;
    uint8_t d;
    ioport_level_t level;

    d=j;
    for(n=0;n<8;n++)
    {
    if((d&0x80)==0x80)
        SDA_ON;
        else
            SDA_OFF;
        d=(uint8_t)(d<<1);
        SCL_OFF;
        SCL_ON;
        SCL_OFF;
    }
    SCL_ON;
    while(level==1)
    {
        g_ioport.p_api->pinRead(SDA, &level);
        SCL_OFF;
        SCL_ON;
    }
    SCL_OFF;

}

void I2C_Start(void)
{
    SCL_ON;
    SDA_ON;
    SDA_OFF;
    SCL_OFF;
}

void I2C_Stop(void)
{
    SDA_OFF;
    SCL_OFF;
    SCL_ON;
    SDA_ON;
}

void Show(unsigned char *text)
{
    int n;
    I2C_Start();
    I2C_out(0x78); //Slave=0x78
    I2C_out(0x40);//Datasend=0x40
    for(n=0;n<20;n++)
    {
        I2C_out(*text);
        ++text;
    }
    I2C_Stop();
}

con estas funciones puedo escribir por pantalla, pero claro prefiero hacerlo por I2C.

Citar
Recorda dejar un tiempo de al menos 50 a 100ms antes de enviarle algo al LCD, debido a que esta inicializandose, supuestamente este se inicializa solo

Despues de la inicialización le dejo 100mS.

cuando quiero mandar un dato al display, ya sea con 0x78 delante o sin 0x78 me lleva a erro:

Código: [Seleccionar]
Display_Trama[0]=0x78;
    Display_Trama[1]=0x00;
    Display_Trama[2]=0x0F;

ssp_err_t err = g_i2c0.p_api->write(g_i2c0.p_ctrl, &Display_Trama[0], 3 , true);
    if (SSP_SUCCESS != err)
    {
        //Ha ocurrido un error
        err=0;
    }

el error es SSP_ERR_ABORTED que quiere decir que el dispositivo se cerro en medio de una transmision, puedes verlo aqui:
https://www.renesas.com/us/en/doc/products/renesas-synergy/apn/r11an0148eu0102-synergy-i2c-master-hal-mod-guide.pdf

la inicializacion de mi I2C es asi;

Código: [Seleccionar]
ssp_err_t err = g_i2c0.p_api->open (g_i2c0.p_ctrl, g_i2c0.p_cfg);

    if (SSP_SUCCESS != err)
    {
        err=0;
        //Ha ocurrido un error
    }

    DSPL_RST_ON;
    R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);

    err = g_i2c0.p_api->reset (g_i2c0.p_ctrl);

    if (SSP_SUCCESS != err)
    {
        err=0;
        //Ha ocurrido un error
    }

    DSPL_RST_OFF;

    R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);

los DSPL_RST_OFF es el pin de reset del display, que primero lo pongo en bajo y luego en algo para resetear la pantalla.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7167
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #3 en: 02 de Mayo de 2019, 14:58:34 »
Estuve buscando entre PDFs si habia algo que aclarara esto... pero no encontre nada, lo unico:


Citar
To write an I2C application using the IIC, follow these steps. The

Código: C
  1. g_i2c.p_api->open()

function must be called first. The rest of the calls may be used in any order depending on the application requirements:
1) Configure the module by setting up the structures i2c_cfg_t.Once the module is configured, the module related
header and configuration files are generated automatically.
2) Open an I2C instance with the I2C implemented by IIC.The IIC driver is called through the I2C Interface

Código: C
  1. g_i2c.p_api->open (g_i2c.p_ctrl, g_i2c.p_cfg)

where p_ctrl and p_cfg are the instances of control and configuration structures auto generated after the I2C configuration step.

3) Initiate a write to a slave device by calling

Código: C
  1. g_i2c.p_api->write(g_i2c.p_ctrl, &write_buffer,num_bytes_to_write, false)
  2.  
where g_i2c.p_ctrl is the same control instance that was used in the open call. The last argument specifies whether the write should be followed by a restart condition (set to true) or a stop condition (set to false). A Restart condition is typically used if the master does not want to relinquish the bus between successive read/write calls.

4) Initiate a read from a slave device by calling

Código: C
  1. g_i2c.p_api->read(g_i2c.p_ctrl,&write_buffer,num_bytes_to_write, false)
  2.  
where g_i2c.p_ctrl is the same control instance that was used in the open call. The last argument specifies if the read should be followed by a restart condition (set to true) or a stop condition (set to false).

5) If there is a need to reset the IIC peripheral, do so by calling

Código: C
  1. g_i2c.p_api->reset(g_i2c.p_ctrl)
  2.  
where g_i2c.p_ctrl is the same control instance that was used in the open call.

6) To close the IIC channel, do so by calling

Código: C
  1. g_i2c.p_api->close(&g_i2c, p_ctrl)

where g_i2c.p_ctrl is the same control structure that was used in the open call

https://synergygallery.renesas.com/media/products/1/156/en-US/r01us0171eu0096_synergy_ssp.pdf
Y si te fijas en la pagina 879 del PDF ( o 875 si haces casos al numero de hoja) el Write no devuelve SPP_ERR_ABORTED

Imagino que es la que se encuentra en la API y es de donde saque las instrucciones al comienzo.. Es un desastre de documentacion.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2644
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #4 en: 06 de Mayo de 2019, 05:19:39 »
mmm, a veces consigo que no me devuelva el aborted, pero no termino de conseguirlo. voy a avanzar utilizando la pantalla con i2c por software para no frenarme mucho y lo dejaré para el final, me parece que tendré que comprarme un analizador lógico para ver que esta pasando, conocéis alguno que tenga buen stock y sea barato? me gustaba el de saleae, pero me parece que ya no lo venden.

un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3384
    • Pinballsp
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #5 en: 06 de Mayo de 2019, 08:43:14 »
me parece que tendré que comprarme un analizador lógico para ver que esta pasando, conocéis alguno que tenga buen stock y sea barato? me gustaba el de saleae, pero me parece que ya no lo venden.

un saludo.


Tengo un par de Saleae (de 8 y 16 canales) y van fenomenal, lo que más me gusta es el software. Compré, hace tiempo, un par de Analizadores para PC de Hantek, uno de ellos de 32 canales, y no los uso para nada, fundamentalmente por el software que es malísimo.

También tengo analizador lógico en mi osciloscopio de banco, un Hantek MSO5102D, este lo he usado puntualmente para comprobar alguna comunicación SPI que no me funcionaba, pero para hacer mediciones precisas prefiero el Saleae en el PC.

Me extraña mucho que los Saleae ya no se vendan, tanto los originales como los chinos, son un referente en el mundo de los Analizadores Lógicos.
« Última modificación: 06 de Mayo de 2019, 08:57:47 por planeta9999 »

Desconectado AccioRw

  • PIC12
  • **
  • Mensajes: 57
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #6 en: 06 de Mayo de 2019, 11:50:36 »
Ahora que sacais el tema, perdonadme que os pregunte si creeis que merecera la pena el analizador logico que traen los osciloscopios de Pico o mejor un analizador aparte de Saleae?
y las copias baratas de Saleae, teneis alguna opinion de ellas ?

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2644
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #7 en: 06 de Mayo de 2019, 16:23:54 »
Ahora que sacais el tema, perdonadme que os pregunte si creeis que merecera la pena el analizador logico que traen los osciloscopios de Pico o mejor un analizador aparte de Saleae?
y las copias baratas de Saleae, teneis alguna opinion de ellas ?

depende de la velocidad de datos que quieras capturar. si te sobra con el del osciloscopio pues no necesitas otro.

Rectifico lo de antes, si se siguen vendiendo los de saleae, pero a un precio desorbitado. Antes cuando estaban diseñados con un cipress costaban menos de 100 euros y eran muy practicos, hicieron un rediseño utilizando spartan 6 y si vale han mejorado las prestaciones, pero el mas barato ahora son 400 dolares... para mi ya no merece la pena uno de marca saleae. Existiendo los basados en cypress por mucho menos dinero y que sirven para la mayoría de las aplicaciones.

yo pensaba que habian dejado de venderlos, por que cuando hicieron el rediseño de cypress a spartan, no se que pasaría pero no había stock en ningun proveedor, ni venta al publico ni empresas, y no se podia contactar con ellos. Supongo que dejaron de fabricar el antiguo y no calcularon bien lo que tenian en stock o cuando iban a tardar en sacar el nuevo.

un saludo

Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado AccioRw

  • PIC12
  • **
  • Mensajes: 57
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #8 en: 06 de Mayo de 2019, 16:51:27 »
Aun no tengo el Osciloscopio por eso preguntaba, quería cogerme el 2206B de pico que por lo que veo es el que mas a cuenta me sale, hasta ahora estoy con un hantek prestado y se me queda corto por todos lados :oops: son 200€ mas y el analizador que trae es de 8 canales y hasta 100Mhz en la mayoría de los oscilocopios asequibles...

Yo creo que por el precio que tienen me cogeré un analizador de los que estan basados en cypress o incluso de los mas baratos que pille por amazon a ver cuanto de bien analiza y el osciloscopio Pico sin la opción de MSO

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 459
    • JMN
Re:Control display NHD-C0220BiZ-FSW-FBW-3V3M
« Respuesta #9 en: 06 de Mayo de 2019, 20:02:55 »
Yo tengo la primera versión del Saleae, comprada hace 10 años, y sigo usandola siempre que tengo que ver alguna comunicación. Como ya habéis dicho, los Saleae ahora se han ido de precio, por lo que puede haber opciones con mejor relación calidad precio, aunque el Saleae funciona muy bien.

En los osciloscopios de bajo coste, la mejor relación calidad precio, diría que ahora es este: https://www.batterfly.com/shop/en/testandmeasurement/oscilloscopi/siglent-sds1104x-e

Pero para protocolos de comunicaciones yo no los cogería, ya que siempre es mejor un Saleae o similar, tienes mucha más memoria y funcionan mucho mejor.