Cómo controlar la pantalla Nokia 5110. Beneficios de usar Arduino Uno. Descripción de Arduino Uno

Philips PCD8544.
Para conectar el módulo a otros dispositivos, la placa contiene un conector y orificios para soldar cables. También hay 4 orificios de montaje ubicados en las esquinas del tablero.
La pantalla monocromática del Nokia 5110 LCD (pantalla azul) está retroiluminada con LED azules. A lo largo de los años de producción, Nokia 5110 se ha utilizado y se utiliza en una amplia gama de aplicaciones. El módulo de visualización facilita la conexión e instalación de Nokia en el dispositivo. Gracias al módulo, se simplifica el primer contacto de un ingeniero electrónico o programador con la pantalla LCD del Nokia 5110. Inicialmente utilizada como indicador de teléfono móvil, la pantalla se ha extendido a otras categorías de dispositivos. Es conveniente utilizarlo en instrumentos de medida: voltímetros, amperímetros, óhmetros y otros. La pantalla también es útil para mostrar lecturas de dispositivos médicos móviles. Es interesante utilizarlo para la escala de un receptor de radio o un indicador de nivel de señal en equipos de reproducción de sonido. La pantalla con una resolución de 84x48 píxeles le permite mostrar información simbólica y gráfica.
Si tiene experiencia con el Nokia 3310 LCD, le resultará fácil dominar el Nokia 5110 LCD, ya que estos indicadores están integrados en el mismo controlador PCD8544.

Especificaciones del módulo LCD Nokia 5110

Nutrición
tensión 2,7…3,3 V
actual
retroiluminación apagada 5 mA
retroiluminación en 20 mA

Temperatura del aire durante el funcionamiento 0…50
Temperatura de almacenamiento -10…70

Indicador LCD Nokia 5110

Características principales

El componente principal del módulo LCD Nokia 5110 es el indicador LCD. Tiene generadores integrados de tensión de alimentación y polarización de elementos LCD y retroiluminación LED. Interfaz de entrada de información SPI. Nokia 5110 puede funcionar en cuatro modos: normal, inversión de imagen, pantalla en blanco y "todos los puntos encendidos". El usuario también puede controlar la temperatura, el voltaje de suministro y la polarización.

Nutrición
tensión 2,7…3,3 V
corriente hasta 320 µA
Frecuencia de reloj hasta 4 MHz
Tiempo de reinicio al menos 100 ns

Estructura de visualización

La pantalla es una matriz de elementos LCD y un microcircuito PCD8544 para su control, ubicado en una carcasa montada en la placa. También alberga cuatro LED de retroiluminación de pantalla. La información sobre el estado de los puntos de visualización se almacena en la RAM del controlador PCD8544; cada punto corresponde a un bit de memoria. También hay un contador de direcciones incorporado, que aumenta automáticamente cuando se escribe el siguiente byte de información en la memoria.

control de pantalla

Realizado a través de la interfaz SPI, la pantalla es un dispositivo esclavo. Sin embargo, en lugar de las cuatro líneas de control habituales, sólo hay tres. Estas son las líneas de reloj CLK, selección de chip SCE y datos de entrada MOSI. No hay línea de salida MISO. Esto lleva a la necesidad de utilizar métodos de gestión especiales, más sobre esto a continuación. La interfaz funciona en modos SPI-0 o SPI-3. El Nokia 5110 también tiene una línea de control de información/comando adicional: D/C̅. Cada byte enviado al display puede interpretarse como un comando o un byte de información, dependiendo del nivel en la línea D/C̅.
La transferencia de información es unidireccional y los datos no se pueden leer de la memoria ni de los registros de visualización. Por lo tanto, el programa debe proporcionar la capacidad de controlar los estados de visualización. Sin embargo, hay una característica más que complica la gestión. Esta característica está relacionada con la organización de la memoria.

La memoria consta de seis bancos, cada uno de los cuales contiene 84 celdas con una capacidad de 1 byte.

Abordar cada píxel indicador. En total tenemos 84x48 píxeles, organizados en 6 bancos horizontales (de cero a cinco) y 84 columnas.

Cada banco contiene 8 píxeles dispuestos verticalmente, que en la suma de seis bancos dan 48 líneas. La figura muestra cómo se mostrará un píxel determinado desde la RAM en la pantalla; cada línea de la figura representa un banco.
La información se escribe en la memoria byte a byte, no bit a bit, y no hay forma de controlar cada punto, sino solo grupos de ocho puntos. Esto, combinado con el hecho de que la información de la memoria LCD del Nokia 5110 no se puede leer, significa que antes de enviar es necesario recordar qué datos están almacenados en qué celular. De lo contrario, es posible que se pierda información cuando se envíen nuevos datos a la pantalla. Esta característica se ilustra con una imagen que muestra la sustitución de un símbolo. Al escribir un programa de control, es necesario prever la posibilidad de almacenar datos.

Reemplazando el símbolo L por el símbolo A.

La pantalla tiene un tamaño de 84x48 píxeles. La información se genera en bloques verticales de 8 píxeles de alto, cuyos valores están determinados por los valores de bits en el byte de salida. El bit menos significativo codifica el píxel superior.
Mirando hacia las descripciones de los comandos, digamos. Los comandos 1xxxxxxx y 01000yyy definen las coordenadas del cursor: la línea y la posición en la que se mostrarán los siguientes 8 bits de datos. Una vez generado el byte, el cursor se mueve automáticamente a la posición adyacente.
Si se selecciona el modo de direccionamiento horizontal V=0 con el comando 00100PDVH, el cursor se mueve hacia la derecha y el siguiente byte de datos se mostrará en la posición adyacente a la derecha. Cuando se llega al borde derecho de la pantalla, el cursor se mueve al principio de la siguiente línea. Si se selecciona el direccionamiento vertical V=1, entonces el cursor se mueve hacia abajo a la siguiente línea y, después de la última línea, el cursor se mueve una posición horizontal hacia la derecha y se coloca en la línea superior.
Como memoria intermedia, puede utilizar la memoria del controlador de control, que almacenará una copia de los datos en la pantalla. Antes de enviar, es necesario ajustar los datos, dependiendo de qué información esté almacenada en la memoria intermedia.

Comandos de control del Nokia 5110

La pantalla se controla enviando una palabra de comando a través de la interfaz SPI. El tamaño de la palabra es 1 byte. Los comandos de control se dividen en 3 categorías.

Funciones supremas de la dirección

Establecer tipo de función: indica con qué tipo de funciones funcionará el módulo, básicas o avanzadas.
Establecer modo de energía: enciende o apaga la alimentación.
Establecer modo de direccionamiento: determina el tipo de direccionamiento de la memoria: vertical u horizontal. En el primer caso, después de escribir un byte de datos, el contador de direcciones Y aumentará, es decir, la grabación se realizará en columnas. En el segundo, el contador de direcciones X, la grabación se realizará línea por línea.
Las funciones se transfieren al Nokia 5110 LCD cuando la línea D/C̅ está baja. Se definen mediante una única palabra de comando. Esta palabra debe enviarse al display al inicio de la operación. Formato:

0 0 1 0 0 PD V H

El bit PD determina el modo de energía; establecido en PD significa modo de apagado.
Modo de direccionamiento del bit V: 1 - vertical, 0 - horizontal.
El bit H es el tipo de funciones que se utilizarán para trabajos posteriores: 0 - normal, 1 - extendido.
Como puede ver, es necesario recordar el estado actual de la pantalla para que al configurar un nuevo valor de parámetro no pierda información sobre los valores de otros. El comando 00100PDVH está presente en ambos conjuntos de comandos.

Funciones básicas

Establezca el modo de visualización en 00001D0E. Define el modo de visualización: pantalla en blanco, todos los puntos encendidos, visualización normal, visualización inversa. E - signo de inversión de imagen, D - salida de imagen. Si D=0, entonces la pantalla está completamente clara E=0 o completamente negra E=1.
Establezca el comando de dirección X en 1xxxxxxx, o 0x80 + x, selección de una posición horizontal en la línea actual donde se mostrará la imagen. Donde x = 0 es la posición más a la izquierda, 83 es ​​la más a la derecha.
El comando SetY-address 01000yyy establece la dirección Y de la celda donde se escribirá el siguiente byte. Comando, o 0x40+y seleccione el número de línea (página) en la que se muestra la imagen. Y=0 es la línea superior, 5 es la línea inferior. La línea tiene 8 puntos de altura.

Funciones avanzadas

El conjunto de comandos extendido se selecciona después de enviar el comando 00100PDV1.
Establece la temperatura. El comando 000001tt, o 0x04 + t selecciona uno de los cuatro modos de corrección de temperatura. Dependiendo del modo, el voltaje de la pantalla cambiará de manera diferente a medida que cambia la temperatura.
Establezca el voltaje de polarización de los elementos de la pantalla LCD. El comando 00010bbb, o 0x10 + b selecciona uno de los ocho modos para calcular las compensaciones de nivel para el control LCD. Para pantallas Nokia normales, el modo recomendado es 0001011 o 0x13.
Configure el voltaje de suministro para los elementos de la pantalla LCD. Comando 1vvvvvvv, o 0x80 + v selecciona el voltaje en el generador de voltaje de refuerzo para la pantalla LCD. Cuando v=0 el generador se apaga. El voltaje de salida se calcula mediante la fórmula VLCD = 3,06 V + v * 0,06 V. Dependiendo de la elección del método de corrección de voltaje, este valor cambia según la temperatura. Para evitar daños en la pantalla a bajas temperaturas, se recomienda que este valor sea inferior a 8,5 V, es decir v<=90. Для обычных дисплеев Nokia это нормальное рабочее значение этого параметра примерно равно 56, т. е. команда принимает вид 10111000, или 0xB8.
Trabajar con funciones básicas y avanzadas es más fácil porque cada una tiene su propia palabra de comando.
Hay que recordar que para poder trabajar con un determinado tipo de función, es necesario configurar la pantalla para que funcione con estas funciones. De lo contrario, enviar la palabra de comando provocará una ejecución incorrecta de este comando. Se pueden encontrar más detalles sobre los comandos de control en la documentación de la página 11.

Inicializando la pantalla

Debe ejecutarse dentro de los 30 ms posteriores a la aparición de energía en la siguiente secuencia:
restablecer activando la entrada correspondiente a nivel bajo durante 100 ns o más,
encienda la pantalla y seleccione un conjunto extendido de comandos enviando 0x21,
enviar comando de compensación de voltaje 0x13,
configurar la corrección de temperatura con el comando 0x04,
encienda el generador de alto voltaje al nivel de 6,42 V usando el comando 0xB8,
volver al comando estándar establecido enviando 0x20,
habilite el modo de gráficos con el comando 0x0C.
Después de estos pasos, Nokia 5110 LCD está listo para usar.

Conexión del módulo LCD Nokia 5110

La salida de señales a los contactos del módulo se muestra en la imagen en la parte superior de la página. También puede haber una disposición diferente de los contactos que se muestra en la figura.

Una de las opciones para la ubicación de contactos.

Señales y líneas del módulo.

Alimentación VCC 3,3 V.
Cable común GND
SCE habilitado, activo bajo
Restablecer Restablecer, activo bajo
D/C̅ Datos/comando: 0 - datos, 1 - comando
Entrada de interfaz SDIN
Señal de reloj SCLC
Retroiluminación LED. Para los módulos en la placa roja, conéctelo al común, para los módulos azules, conéctelo a la alimentación. Utilice una resistencia de 330 ohmios en el circuito de retroiluminación. Algunas modificaciones ya tienen una resistencia instalada, otras no. Para determinar la presencia de una resistencia y seleccionar el modo de retroiluminación óptimo, debe controlar la corriente del módulo y la corriente de retroiluminación. No debe exceder los 20 mA.

Si no hay otros dispositivos conectados a la interfaz SPI del microcontrolador, entonces para guardar los contactos del módulo de control principal del dispositivo y reducir la cantidad de líneas de comunicación, el pin de selección de dispositivo activo SCE debe conectarse al pin GND en el módulo. junta. Pero hay un inconveniente. Si el controlador Nokia ha perdido la sincronización con el MK, ahora es imposible detectarlo.
De esta manera se debería realizar una conexión más confiable. Lleve esta línea a un nivel alto con una resistencia de 100-500 kOhm para evitar que la interferencia afecte al controlador mientras el MK está en estado de reinicio.
Cuando se trabaja con microcontroladores AVR, es conveniente utilizar la interfaz USART en modo maestro SPI. Modo SPI-3 (CPHA=1, CPOL=1). Esto significa que mientras no hay intercambio, la línea SCLK está alta y el controlador lee datos de la línea SDIN en un flanco ascendente en la línea SCLK durante 100 ns. En este caso, deben ajustarse al menos 100 ns antes del flanco ascendente. La transmisión se realiza en 8 bits, el más significativo primero.
El nivel en la línea D/C̅ determina cómo interpretar los datos recibidos. Un nivel alto significa que se deben mostrar los datos transmitidos, un nivel bajo significa que se transmite un comando. El controlador lee el valor en esta línea junto con el último bit (el más bajo) de cada byte de datos transferido. Esto puede resultar complicado cuando se utiliza la transferencia de hardware asíncrona. Debe esperar a que el byte anterior complete la transmisión antes de configurar el nivel.

Conexión del módulo LCD Nokia 5110 y Arduino UNO.

Las señales de entrada del módulo deben corresponder a los niveles lógicos del circuito alimentado por un voltaje de 3,3 V. Cuando se trabaja con un microcontrolador alimentado con una fuente de alimentación de 5 V, se deben utilizar circuitos de adaptación de niveles.

Gráficos

Al comenzar a preparar una imagen gráfica, debe preparar una imagen en blanco y negro en formato *.bmp con una resolución de 84x48 píxeles en cualquier editor gráfico. Preparamos una imagen así en Paint, aquí está:

El nombre del archivo de imagen debe guardarse en letras latinas. Usando el programa

En este tutorial, primero mostraremos algunos datos en la pantalla del Nokia 5110 y luego mostraremos los datos del sensor DHT22 en ella. Vamos a interconectar Nokia 5110 LCD y Arduino. Aprenderá la interfaz Arduino del Nokia 5110 a través de dos ejemplos. En primer lugar, solo mostraremos algunos datos en la pantalla y, en el segundo ejemplo, leeremos las lecturas del sensor de temperatura y humedad DHT22 y las mostraremos en la pantalla LCD del Nokia 5110.

Nokia 5110 LCD es una excelente opción para mostrar datos. Es más económico que los LCD normales y muy fácil de usar con microcontroladores. Sólo necesitas conectar algunos cables y estarás listo para comenzar.

Para conectar Nokia 5110 a Arduino necesitaremos la pantalla con un microcontrolador y varias otras piezas.

  • Nokia 5110 LCD × 1
  • Potenciómetro de precisión multivuelta - 1 kΩ (25 vueltas) × 1
  • Resistencia 10 kOhmios × 4
  • Resistencia 1 kOhmio × 1
  • Resistencia 330 ohmios × 1
  • Puentes × 1
  • Diseño (universal) × 1

Además, necesitaremos un software en el formato con el que probablemente esté familiarizado.

Configuración de pines del Nokia 5110

Conclusiones Nokia 5110 LCD se ve así:

primero: restablecer pin
SCE: pin de selección de chip
CORRIENTE CONTINUA: (Datos/Comando): Este es el pin de selección de modo. BAJO significa modo de comando y ALTO significa modo de datos.
DN(Pin de datos): entrada de datos en serie
SCLK: señal de reloj serie
VCC: tensión de entrada de 2,7 a 3,3 V
CONDUJO: Este LED es una luz de fondo. Voltaje de entrada 3,3 V
Tierra: Tierra

Ejemplo No. 1

En el primer ejemplo, simplemente mostraremos los datos en la pantalla LCD del Nokia 5110. A continuación se muestra el diagrama de circuito para conectar el Nokia 5110 y Arduino.

Diagrama de conexión

Nokia 5110 LCD requiere 3,3 V para funcionar, por lo que tendremos que usar resistencias para convertir 5 V a 3,3 V. Si opera el Nokia 5110 sin resistencias, la pantalla funcionará, pero la vida útil de la pantalla LCD se reducirá.

  • Conecte el pin 1 (pin RST) al pin 6 del Arduino mediante una resistencia de 10k ohmios.
  • Conecte el pin 2 (pin SCE) al pin 7 del Arduino mediante una resistencia de 1 k ohm.
  • Conecte el pin 3 (pin D/C) al pin 5 del Arduino mediante una resistencia de 10k ohmios.
  • Conecte el pin 4 (pin DIN) al pin 4 del Arduino mediante una resistencia de 10k ohmios.
  • Conecte el pin 5 (pin CLK) al pin 3 del Arduino mediante una resistencia de 10k ohmios.
  • Conecte el pin 6 (pin VCC) al pin de 3,3 V del Arduino.
  • Conecte el pin 7 (pin LED) al pin central del potenciómetro de 1 k ohm a través de una resistencia de 330 ohm y conecte los otros dos pines a VCC y tierra.
  • Conecte el pin 8 (pin GND) a tierra de Arduino.

El potenciómetro conectado se utiliza para aumentar o disminuir la retroiluminación de la pantalla LCD. Puedes conectarlo a 3.3V si quieres que la retroiluminación sea fuerte en todo momento, o puedes conectarlo a tierra si no quieres tener la retroiluminación.

Código

Descargue la biblioteca Nokia 5110 a continuación.

El código del primer ejemplo en sí:

#incluir pantalla LCD PCD8544; configuración vacía() ( lcd.begin(84, 48); ) bucle vacío() ( lcd.setCursor(0, 0); lcd.print(" BIENVENIDO "); lcd.setCursor(0, 1); lcd.print ("Para"); lcd.setCursor(0,2); lcd.print("sitio");

En primer lugar, incluimos la biblioteca para Nokia 5110 LCD. La biblioteca incluirá todos los comandos que necesitaremos para el Nokia 5110 LCD. Luego declaramos una variable llamada "lcd" de tipo PCD8544.
#incluir pantalla LCD PCD8544;

Luego, en la función de configuración configuramos la resolución para el Nokia 5110 LCD. La pantalla LCD del Nokia5110 tiene una resolución de 84x48, por lo que configuramos la resolución en 84x48 en el IDE de Arduino.

lcd.comenzar(84, 48);

Luego, en la función de bucle, primero colocamos el cursor en la primera línea e imprimimos "¡Bienvenido!" (BIENVENIDO)..

Lcd.setCursor(0, 0);

lcd.print(" BIENVENIDO ");

lcd.setCursor(0, 1);

Diagrama de conexión

lcd.print("Para");

  • lcd.setCursor(0,2);
  • lcd.print("sitio");
  • retraso(200);

Código

Ejemplo No. 2

En el segundo ejemplo, conectaremos un sensor de temperatura y humedad DHT22 al Arduino y usaremos el DHT22 para leer la temperatura, la humedad y el índice de calor. Luego mostraremos estos datos en la pantalla LCD del Nokia 5110. A continuación se muestra el diagrama de circuito de la interfaz Nokia 5110, Arduino y DHT22.

#incluir #incluir "DHT.h" #definir DHTPIN 8 #definir DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE); configuración vacía() ( lcd.begin(84, 48); dht.begin(); ) bucle vacío() ( lcd.clear(); zumbido flotante = dht.readHumidity(); temperatura flotante = dht.readTemperature(); //Leyendo la temperatura en grados float fah = dht.readTemperature(true); //Leyendo la temperatura en grados fahrenheit if (isnan(hum) || isnan(temp) || isnan(fah)) ( //Comprobando si el arduino ha recibido los valores o no lcd.println("¡Error al leer del sensor DHT!" return; float heat_index = dht.computeHeatIndex(fah, hum); //Leyendo el índice de calor en fahrenheit float heat_indexC = dht. convertFtoC (heat_index); //Leyendo el índice de calor en grados lcd.setCursor(0, 0); lcd.print("Humi: "); .setCursor(0, 1); ); lcd.print(fah); lcd.print(" *F\t"); lcd.setCursor(0,3); lcd.print("Hola: "); (" *C "); lcd.setCursor(0,4); lcd.print("Hola: ");

lcd.println(" *F ");

#incluir retraso(2000);

) En primer lugar, hemos incluido bibliotecas para el Nokia 5110 LCD y el sensor de temperatura y humedad DHT22. Después de esto, inicializamos el pin 8 para DHT22 (DHTPIN 8) y determinamos el tipo de sensor DHT. También hay disponibles otros modelos de sensores DHT, pero utilizamos el DHT22 debido a su alta precisión. Luego declaramos una variable "lcd" de tipo PCD8544 para la pantalla LCD y una variable "dht" de tipo DHT para el sensor DHT22..

#incluir "DHT.h" #definir DHTPIN 8 #definir DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE);

Luego, en la función de configuración configuramos la resolución para Nokia 5110 LCD. La pantalla LCD del Nokia5110 tiene una resolución de 84x48, por lo que configuramos la resolución en 84x48 en el IDE de Arduino. Después de esto comenzamos a recibir datos del sensor DHT22 usando el comando

dht.comenzar()

Probablemente, como todos los constructores de Arduino, tenía alguna idea loca en mi cabeza. Pedí todas las piezas necesarias a China. Tuvimos que esperar mucho tiempo, pero luego nos entregaron antes de lo previsto un clon de la placa Arduino Uno y una pantalla LCD Nokia 5110. Como antes no estaba familiarizado con la electrónica y la programación, decidí no perder el tiempo y comencé a aprender cómo mostrar información en este módulo.

Lo primero que hice fue buscar en Google y encontré la publicación “Arduino, módulo LCD Nokia 5110 y alfabeto cirílico” del autor. Y luego me di cuenta de que todo lo que había planeado previamente no sería tan fácil de realizar.

Descubrí el alfabeto cirílico, allí todo es simple, no copiaré y pegaré la última publicación, pero hay un problema real con las imágenes. La tarea es la siguiente: necesitas hacer un dibujo y subirlo a la pantalla. Encontré el primer problema, entré al entorno de programación Arduino y vi que no existe "Insertar - Imágenes", pero es necesario escribir una imagen con un código determinado en el sistema de cálculo hexadecimal. Encontré varios editores, pero ese no fue el caso. La imagen no se muestra adecuadamente. Empecé a buscar problemas que pudieran ser.

A través de una serie de experimentos, intentos y pruebas, se me ocurrió un algoritmo que compartiré con ustedes:

1) Necesita obtener la imagen en sí, en formato .bmp en blanco y negro con una extensión de 84 x 48 píxeles.
Esto se puede hacer de varias maneras. Casi todos los editores gráficos tienen una función "Guardar como" donde especificamos los parámetros necesarios.
Lo hice en corelDRAW. Obtenemos algo similar. Es necesario aclarar que el nombre de la imagen debe guardarse con la distribución del teclado latino, ya que el siguiente programa no podrá abrirla.

2) Si es necesario, puedes editar la imagen en Paint; por extraño que parezca, existen varias herramientas sencillas e interesantes.

3) Usando esto obtenemos el código hexadecimal de la imagen.

4) Pegue este código en el código del programa Arduino y cárguelo en la placa:

// SCK - Pin 8 // MOSI - Pin 9 // DC - Pin 10 // RST - Pin 11 // CS - Pin 12 // #include LCD5110 miGLCD(8,9,10,11,12); uint8_t externo OKO; flotar y; uint8_t* bm; espacio interno; configuración vacía() ( myGLCD.InitLCD(); ) bucle vacío() ( myGLCD.clrScr(); myGLCD.drawBitmap(0, 0, OKO, 84, 48); myGLCD.update(); retraso(2000); )

#incluir const uint8_t OKO PROGMEM=( //Herramientas GLCD de código hexadecimal copiadas );

Anteriormente en este blog, se cubrieron varias pantallas/indicadores LCD y su uso desde Arduino. Su importante inconveniente es su tamaño y peso bastante grandes. Muchas veces esto no es un problema. Por ejemplo, si está montando una estación de soldadura de bricolaje en una carcasa casera, de alguna manera no importa el tamaño de la pantalla. Por otro lado, si necesita una pantalla en, digamos, un cuadricóptero, entonces el peso y el tamaño se vuelven críticos. Por eso, hoy aprenderemos a trabajar con una pantalla muy pequeña y liviana del teléfono Nokia 5110.

Nota: Otras publicaciones sobre el tema de las pantallas: Aprendí a mostrar texto en un indicador LCD de Arduino, Acerca del uso de pantallas 1602 con un adaptador I2C, Trabajar con LCD basado en HD44780 sin bibliotecas y Termómetro digital de una matriz LCD, TMP36 y Arduino.

No te preocupes, no tendrás que comprar el Nokia 5110, que efectivamente no existe hoy en día, quitarle la pantalla y tirar todas las demás piezas. La pantalla Nokia 5110 es un módulo independiente muy común para los radioaficionados y cuesta entre 2 y 5 dólares, dependiendo de la tienda. En Rusia, el módulo se puede comprar, por ejemplo, en tpai.ru, arduino-kit.ru, amperkot.ru, compacttool.ru, chipster.ru o electromicro.ru. Y, por supuesto, las pantallas se venden al precio más bajo en AliExpress, pero tendrás que esperar uno o dos meses hasta que lleguen desde China.

Como suele suceder en el mundo Arduino, ya existen bibliotecas listas para usar para el módulo, y más de una. Me gustó la biblioteca LCD5110 publicada en el sitio web rinkydinkelectronics.com. Esta biblioteca tiene dos versiones. El primero se llama LCD5110_Basic. Es más simple y sólo puede mostrar texto en fuentes de diferentes tamaños. Es posible crear tus propias fuentes. La segunda versión se llama LCD5110_Graph. Tiene todas las capacidades de la primera biblioteca y, además de ellas, puede dibujar segmentos, rectángulos, círculos, etc.

Para los fines de esta publicación, se utilizará el LCD5110_Basic. Ambas bibliotecas están bien documentadas y tienen muchos ejemplos de uso, por lo que si necesita LCD5110_Graph puede resolverlo fácilmente por su cuenta. Sin embargo, vale la pena señalar que para que LCD5110_Basic se compilara sin advertencias, tuve que realizar un par de pequeñas ediciones en su código.

Entonces, un ejemplo de uso de la biblioteca:

#incluir

externo uint8_t Números grandes;
extern uint8_t NúmerosMedios;
externo uint8_t SmallFont;

/* SCK/CLK, MOSI/DIN, CC, RST, CS */
LCD5110 LCD (2, 3, 4, 6, 5);

configuración nula()
{
lcd.InitLCD();
}

int control = 0;
bucle vacío()
{
lcd.clrScr();

Lcd.setFont(Números Grandes);
lcd.printNumI(ctr, DERECHA, 0);

Lcd.setFont(NúmerosMedios);
lcd.printNumF(12.34, 2, DERECHA, 24);

Lcd.setFont(SmallFont);
lcd.print ("Línea 1", 0, 8 * 0);
lcd.print("Línea 2", 0, 8 * 1);
lcd.print ("Línea 3", 0, 8 * 2);
lcd.print ("L 4", 0, 8 * 3);
lcd.print ("L 5", 0, 8 * 4);
lcd.print ("0123456789ABCD", 0, 8 * 5);

Ctrl+ = 5 ;
si (ctr>= 1000)
ctr = 0;

Retraso(500);
}

Cómo se ve en acción:

Espero que no sea necesario masticar el código. Tenga en cuenta que el módulo funciona con 3,3 V, pero normalmente entiende los comandos de Arduino sin ningún convertidor de nivel lógico. En consecuencia, conectamos los pines VCC (alimentación) y BL (luz de fondo) a 3,3 V, conectamos GND a tierra y conectamos los cinco pines restantes a los pines digitales de Arduino. Pasamos los números de pin al constructor de la clase LCD5110 de acuerdo con los comentarios en el código proporcionado.

Sencillo, ¿no? Puede encontrar el código fuente completo de esta publicación en este repositorio de GitHub. Adiciones y preguntas, como siempre, son bienvenidas en todas las formas posibles.

Suma: El autor de la biblioteca para trabajar con la pantalla Nokia 5110 es también el autor de la biblioteca OLED_I2C, diseñada para funcionar con pantallas OLED igualmente populares con interfaz I2C. Puede encontrar un ejemplo del uso de OLED_I2C en la publicación Uso de un joystick Sega Genesis en proyectos Arduino. Como era de esperar, las dos bibliotecas tienen una interfaz similar.

¿Recuerda aquellos tiempos en los que los teléfonos móviles eran "de roble", tenían un teclado de botón independiente y una pequeña pantalla monocromática de cristal líquido?

Ahora este mercado pertenece a todo tipo de iPhones, Galaxy, etc., pero las pantallas están encontrando un nuevo uso: ¡proyectos de bricolaje!

La pantalla en blanco y negro de 84x48 píxeles que veremos se utilizó en los teléfonos Nokia 3310. Su principal ventaja es la facilidad de uso. Una pantalla de este tipo encajará perfectamente en su proyecto para el intercambio interactivo de información con el usuario.

En este artículo veremos cómo controlar esta pantalla gráfica usando Arduino. Se consideran todas las características de conexión, las características técnicas de la pantalla y el programa para Arduino.

Materiales requeridos

  • Arduino o su clon.
  • Conectores.
  • Tarjeta de circuitos.

Especificaciones de la pantalla del Nokia 5110

Antes de conectar la pantalla y programar el Arduino, veamos información general al respecto.

Configuración de pines

Para conectar y transmitir datos en la pantalla, se utilizan dos filas paralelas de 8 conectores. Cada pin está marcado en la parte posterior de la pantalla.


Como ya se mencionó, los pines están conectados en paralelo entre sí. A continuación se proporciona información sobre el propósito de cada conector.


Nutrición

Ya habrás notado que la pantalla LCD 5110 tiene dos conectores de alimentación. El primero es el más importante: alimentar la lógica de la pantalla. La hoja de datos indica que debe seleccionarse en el rango de 2,7 - 3,3 V. En funcionamiento normal, la pantalla consumirá de 6 a 7 mA.

El segundo conector de alimentación es para la retroiluminación de la pantalla. Si retira la pantalla del tablero (esto no es necesario, puede simplemente mirar la figura a continuación), verá que la iluminación de fondo se implementa de manera muy simple: cuatro LED blancos, que se encuentran en las esquinas del tablero. Tenga en cuenta que no hay resistencias limitadoras de corriente.


Por eso debes tener más cuidado con tu dieta. Puede utilizar una resistencia limitadora de corriente al conectar el pin "LED" o utilizar una tensión de alimentación máxima de 3,3 V. ¡No olvide que los LED pueden absorber corrientes elevadas! Sin limitación, consumirán unos 100 mA con una tensión de alimentación de 3,3 V.

Interfaz de control

La pantalla tiene un controlador incorporado: Philips PCD8544, que convierte la enorme interfaz paralela en una serie más conveniente. El PCD8544 se controla mediante un protocolo serie síncrono, que es similar a SPI. Tenga en cuenta que hay pines de contador de tiempo (SCLK) y entrada de datos en serie (DN), así como selección de chip activo-bajo (SCE).

Sobre los conectores en serie considerados hay otro conector instalado, D / C, a través del cual se recibe información sobre si se pueden mostrar los datos que se están transmitiendo.

Para obtener una lista de comandos, consulte la sección "Instrucciones" de la hoja de datos de PCD8544 (página 11). Hay comandos que limpian la pantalla, invierten píxeles, apagan, etc.

Montaje y conexión de la pantalla 5110

Antes de cargar el boceto y transferir datos a la pantalla, es necesario comprender la conexión. Para hacer esto, debes resolver el problema de ensamblarlo y conectarlo a Arduino.

Asamblea

Para "ensamblar" la pantalla, es posible que necesite conectores. 8 piezas serán suficientes. Puedes usar piernas rectas o de 90 grados. Depende del uso posterior. Si planeas utilizar una placa de circuito, un riel con conectores rectos probablemente será la mejor opción.

Pantalla LCD de Nokia 5110 montada en una mini placa de circuito:


También puedes soldar directamente los adaptadores a la pantalla.

Conexión de una pantalla 5110 a Arduino

En este ejemplo conectaremos una pantalla LCD a un Arduino. Una técnica similar se puede adaptar fácilmente a otras placas y microcontroladores. Para conectar los pines de transferencia de datos, SCLK y DN(MOSI), utilizamos pines Arduino SPI, que proporcionan una transferencia de datos rápida. Los pines de selección de chip (SCE), reinicio (RST) y datos/control (D/C) se pueden conectar a cualquier pin digital. La salida del LED está conectada a un pin del Arduino, que admite la modulación PWM. Gracias a esto, es posible un ajuste flexible del brillo de la retroiluminación.

Desafortunadamente, el voltaje de alimentación máximo de la pantalla 5110 puede alcanzar los 3,6 voltios, por lo que no se puede conectar directamente a la salida estándar de 5 V del Arduino. Es necesario ajustar el voltaje. En consecuencia, aparecen varias opciones de conexión.

Conexión directa a Arduino

La opción más sencilla es conectarse directamente a Arduino. En este caso, necesitarás utilizar placas Arduino Pro 3.3V/8MHz o 3.3V Arduino Pro Mini.


La opción propuesta a continuación funciona con placas Arduino de 5V. Esta es una opción que funciona, pero la vida útil de la pantalla puede reducirse ligeramente.


Los pines están conectados de la siguiente manera:


Una opción buena y económica para brindar protección adicional es instalar resistencias entre los pines de datos del Arduino al LCD 5110. Si está usando un Arduino Uno (o una placa similar de 5 V), puede usar resistencias de 10k y 1k. El diagrama de conexión de la pantalla utilizando resistencias se muestra en la siguiente figura:

La conexión es la misma que en el primer ejemplo, pero se instala una resistencia en cada circuito de señal. Se instalan resistencias de 10 kOhm entre los pines SCLK, DN, D/C y RST. Hay una resistencia de 1 kOhm entre los pines SCE y el pin 7. Bueno, quedan 330 ohmios entre el pin 9 y el pin con el LED. y pin 7.

Convertidores de nivel


La tercera opción de conexión es utilizar convertidores de nivel para cambiar entre 5 y 3,3 V. Para estos fines, puede utilizar un convertidor de nivel lógico bidireccional o módulos TXB0104.

Desafortunadamente, hay cinco entradas para una señal de 3,3 V en la pantalla y cuatro en los convertidores de nivel. Puede dejar la salida RTS alta (conectándola usando una resistencia de 10k ohmios). Como resultado, ya no podrá controlar cómo se reinicia la pantalla, pero todas las demás funciones estarán disponibles.

Primer ejemplo de boceto de Arduino: demostración de LCD

Programa para Arduino

Los comentarios en el código anterior deberían ayudarle a comprender el programa. La mayor parte de la acción ocurre dentro de la función lcdFunTime().

Boceto en acción

Después de cargarlo en Arduino, el boceto comenzará a funcionar y se iniciará una demostración: un conjunto de animaciones estándar y pruebas de funciones gráficas. Primero, mostremos algunos píxeles. Después de eso, pasaremos a mostrar líneas, rectángulos y círculos, cargar un mapa de bits, etc.


Después de completar el boceto, el monitor cambiará al modo de transferencia de datos a través del protocolo serie. Abra el monitor serie (con una velocidad de transmisión de 9600 bps). Lo que imprima en el monitor serie aparecerá en el monitor LCD.

Si está interesado en las capacidades de visualización de imágenes rasterizadas, siga leyendo. Veremos exactamente cómo puedes importar tu propia imagen de mapa de bits de 84x48 y mostrarla en la pantalla.

Segundo ejemplo de boceto de Arduino: carga y visualización de mapas de bits

En este ejemplo, crearemos un nuevo mapa de bits de 84x48, lo integraremos en el código Arduino y lo enviaremos al monitor LCD.


Buscar/Crear/Cambiar un mapa de bits

Primero, busque la imagen que desea mostrar en la pantalla LCD 5110. No podrá ampliarla demasiado a 84x48 píxeles, pero aún es posible. A continuación se muestran algunos ejemplos:

Después de seleccionar una imagen, debe corregirla: convertirla en monocromática (color de 2 bits); mantenga el tamaño 84x48 píxeles. Puede utilizar la mayoría de los editores de imágenes para esto. Incluyendo Paint, si tienes Windows. Guarde la imagen resultante.

Convertir un mapa de bits en una matriz

El siguiente paso es convertir este archivo en una matriz de caracteres de 504 bytes. Para hacer esto, puede utilizar varios programas. Por ejemplo, Asistente LCD.

Para cargar una imagen en LCD Assistant, vaya a Archivo > Cargar imagen. Debería abrirse una ventana con una imagen de vista previa. Asegúrese de que la imagen tenga el tamaño correcto: 84 píxeles de ancho, 48 píxeles de alto y que la orientación de bytes esté configurada en Vertical y el endianidad del tamaño en Pequeño. El resto de la configuración predeterminada debe configurarse correctamente (8 píxeles/byte)

Después de esto, vaya a la pestaña Archivo > Guardar salida para generar un archivo de texto temporal. Abra este archivo de texto para ver su maravillosa nueva matriz. Cambie el tipo de matriz a char (no sin signo ni constante). También asegúrese de que la matriz tenga el nombre correcto (sin guiones, no comience con un número, etc.).

¡Importa al boceto y dibuja!

Copie la matriz creada en el boceto de Arduino. Puedes utilizar el boceto del primer ejemplo. Pegue su matriz en cualquier lugar. Ahora, para mostrar su boceto, reemplace setup() y loop() en su boceto con las líneas a continuación (mantenga las otras funciones y variables iguales):

// ...las variables, constantes y la matriz de mapa de bits se definen arriba

lcdBegin(); // Configurando pines e inicializando la pantalla LCD

establecerContraste(60); // Ajusta el contraste (el rango preferido es de 40 a 60)

setBitmap(llamaBitmap); // flameBitmap debe ser reemplazado con el nombre de tu matriz

actualizarPantalla(); //Actualiza la pantalla para mostrar la matriz

// Las funciones de control y gráficos en la pantalla LCD se definen a continuación...

¿De verdad resultó genial? ¡Entre otras cosas, puedes importar múltiples imágenes y crear pequeñas animaciones! ¡Pruébalo, estoy seguro de que te gustará!

Enlaces para descargar programas, bibliotecas y hojas de datos adicionales

Hojas de datos para pantalla LCD y controladores
  • Hoja de datos de LCD: no es exactamente igual que el 5110, pero es muy similar en especificaciones
Bibliotecas y bocetos de Arduino.
  • Biblioteca PCD8544 Arduino: biblioteca para trabajar Arduino con el controlador LCD PCD8544
Programas para crear imágenes rasterizadas.
  • TheDotFactory: gran herramienta para crear matrices de fuentes personalizadas

Deje sus comentarios, preguntas y comparta sus experiencias personales a continuación. ¡A menudo surgen nuevas ideas y proyectos de las discusiones!




Arriba