Analizando datos olfateados de pines de LCD 2 * 16 usando Atmega32

2

Olfateé DB4..7 de un 2 * 16 LCD usando el siguiente circuito: (Atmega32.PORTA1..3 está conectado a GND)

Comosevemásarriba,conectéelpinEndelapantallaLCDaINT0deAtmega32(queestáconfiguradoparaeldisparodeFallingEdge).

Enlarutinadeinterrupciónescribíestoscódigosacontinuación:

interrupt[EXT_INT0]voidext_int0_isr(void){printf("%c",'#');
    printf("%02x", PINA);
    }

Por otra parte, en mi computadora escribí este código:

import serial
ser=serial.Serial('COM3')

while(1):
    if (ser.read(1)=='#'):
        print '#'
        print ser.read(2)
    else:
        print 'Oops'

Y cuando encendí mi circuito, esta salida de abajo aparece en python:

#
00
#
30
#
30
#
80
#
c0
#
10
#
10
#
00
#
11
#
41
#
61
#
00
#
91
#
a1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
10
#
10
#
00
#
d1
#
a1
#
00
#
91
#
91
#
91
#
91
#
91
#
91
#
91
#
91
#
00
#
30
#
30
#
80
#
c0
#
10
#
10
#
00
#
11
#
41
#
61
#
01
#
e1
#
a1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
10
#
10
#
00
#
d1
#
a1
#
00
#
91
#
91
#
91
#
91
#
91
#
91
#
81
#
81
#
00
#
30
#
30
#
80
#
c0
#
10
#
10
#
00
#
11
#
41
#
61
#
01
#
e1
#
a1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
b1
#
10
#
10
#
00
#
d1
#
a1
#
00
#
91
#
91
#
91
#
91
#
91
#
91
#
71
#
71

Ahora quiero analizar esta salida! Pero no tengo ni idea de lo que significa. Aprecio si traducir alguna parte de ella.

    
pregunta TheGoodUser

2 respuestas

1

Comencé a analizar los datos asumiendo que se trata de un dispositivo basado en el Controlador LCD HD44780 y mientras comienza con algo similar a la secuencia de inicialización para ingresar al modo de 4 bits, muchos de los datos posteriores no parecen tener mucho sentido. Creo que Brian Drummond tiene razón en su comentario de que verás una secuencia bastante aleatoria de bocados.

Varía un poco según el módulo, pero creo que la mayoría de los módulos pueden aceptar datos cada 40 uS y, a 115,200 bps, se necesitarán 87 uS para enviar cada carácter. Usted está enviando tres caracteres, por lo que los datos potenciales podrían llegar seis veces más rápido de lo que usted los envía.

Para analizar inicialmente los datos, ya que las tramas no serán tan grandes, el ATmega32 debería tener suficiente RAM para capturar una cantidad decente de datos y luego descargarlos. Lo siguiente no está probado, por lo que debe tratarlo como un pseudocódigo, pero debería darle una idea general, solo debe volcar los primeros 1024 bytes recibidos:

#include <stdint.h>
#define BUF_SIZE 1024
uint8_t buf[BUF_SIZE];
uint16_t buf_pos = 0;

interrupt [EXT_INT0] void ext_int0_isr(void)
{
    if (buf_pos < BUF_SIZE)
        buf[buf_pos++] = PINA;
}

void main(void)
{
    uint16_t i;

    // Enable interrupts here and then wait for buffer to fill
    while (buf_pos < BUF_SIZE)
        ;
    // Dump out buffer
    for (i=0; i < BUF_SIZE; i++)
        printf("#%02x", buf[i]);
    // Stop by looping forever
    while (1)
        ;
}
    
respondido por el PeterJ
2

Este tipo de pantallas LCD alfanuméricas han estado usando el mismo protocolo durante décadas, por lo que todos los fabricantes de controladores de IC lo hacen básicamente de la misma manera. No estoy seguro de si está intentando averiguar el protocolo para poder usar la pantalla LCD o si su pregunta en realidad es algo así como cómo hacer un analizador lógico , pero en cualquier caso podría ser más fácil para usted primero entender el tráfico de datos entre el microcontrolador y la pantalla. Después de eso, es más fácil comunicarse con la pantalla LCD o hacer el analizador lógico.

  • Los pines 1, 2 y 3 son tierra, lógica VCC y voltaje de polarización del panel. La tensión de polarización del panel depende del tipo de pantalla y el requisito de un contraste adecuado puede ser de -10 voltios a +2 voltios. En realidad, es un voltaje negativo referenciado a VCC.
  • Pin 4 es registro seleccionado; bajo para acceder a los registros de control, alto para leer / escribir datos.
  • Pin 5 es Read / xWrite; está permanentemente bajo porque el microcontrolador solo escribe en el módulo, no lee.
  • El pin 6 está habilitado, un impulso de reloj alto activo; por lo general, los datos se bloquean en el borde descendente.
  • Los pines 7 a 14 son un bus de datos de 8 bits. El bit 7 es el bit más significativo y el protocolo está construido de manera que puede seleccionar una comunicación de 8 o 4 bits con solo los bits 7..4 conectados. En el modo 4-it, todas las transferencias de bus se realizan con dos pulsos de activación, primero para el mordisco alto (bits 7..4) y el segundo para el mordisco bajo (bits 3..0).
  • Los pines 15 y 16, si están presentes, están conectados a la luz de fondo de la pantalla LCD.

Aquí hay una hoja de datos para uno de los IC del controlador que puede consultar sobre el protocolo:

enlace

    
respondido por el PkP

Lea otras preguntas en las etiquetas