Display do Nokia 5110 no Arduino

16 SET
2015

Autor: Leonardo Dalla Porta

 O display

O Módulo de LCD Nokia 5110 utiliza um controlador Philips PCD8544 LCD, foi projetado para telefones móveis, ou seja, celulares.

Operando em 3.3V

Muitos dispositivos que podem ser usados ​​com o Arduino exigem uma fonte de alimentação de 3.3V. Este também é o caso com o Nokia 5110. A melhor maneira de lidar com dispositivos de 3.3V é fazer um Arduino Pro, que pode ser executado em 3.3V.

Graças ao grampo interno do PCD8544 podemos usar um shifter nível muito simples. Quatro resistores limitadores de corrente de 10k pode fazer o trabalho. Quando uma linha de controle LCD é alta, a corrente através do resistor 10k é apenas 40uA, então isso é inofensivo. Note que não pode ler de volta do LCD com este circuito.

Operando em 5V

Porque VDD max = 7V, o controlador pode lidar com PCD8544 5V, mas o Nokia 5110 LCD funciona melhor em 3.3V. Os quatro resistores de 10k evitar estrias no visor LCD.

Ligar Nokia 5110 LCD ao Arduino com 3 fios

lcd Nokia

Ligar Nokia 5110 LCD ao Arduino com 3 fios

Note que o Arduino usa SPI, pinos 11 e 13 são utilizados para permitir que o hardware se comunique.

Código

“Limor Fried” do “Adafruit” criou uma biblioteca que pode ser baixado em  github. A biblioteca um pouco modificada você pode baixá-lo  aqui.
Também instalar a biblioteca Adafruit_GFX.

Impressão LCD com o operador de streaming <<

Com a biblioteca Streaming, podemos usar o operador de streaming << para impressão no console:

Serial << “Olá, \ n”;  em vez de  Serial.println (“Olá! \ N”);

Porque a classe pai PCD8544 é impressão também pode usar o operador de streaming << para impressão no LCD. Aqui está um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include 
#include 
#include 
#include 
#include 
 
byte PWMDACpin const = 9; // PWM DAC, apenas os pinos 9 e 10 são permitidos
const byte NokiaSCLKpin = 13; // Compatível com ISP hardware
const byte NokiaDNpin = 11; // Compatível com ISP hardware
const byte NokiaDCpin = 12;
const byte NokiaRESETpin = 10;
 
const caractere LCDcontrast = 55;
int i;
 
// ENSAIOS
#include "Stopwatch.h"
Cronómetro cronômetro (micros);
 
Adafruit_PCD8544 nokia (NokiaSCLKpin, NokiaDNpin, NokiaDCpin, 0, NokiaRESETpin);
Metro LCDinitTimer (2000);
 
void setup (void)
{Serial.begin (9600);
  nokia.begin ();
  nokia.setContrast (LCDcontrast);
  nokia.clearDisplay ();
  nokia &lt;&lt; "Olá, \ n"; // Sem usar F
  nokia &lt;&lt; F ("Save RAM com o Flash biblioteca \ n"); // Usar F para economizar espaço RAM
  nokia.display ();
  // findBestContrast (40, 60, 500);
  nokia.setContrast (LCDcontrast);
}
 
void loop (void)
{Stopwatch.start (); // Test
  nokia.clearDisplay ();
  nokia &lt;&lt; F ("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed não eiusmod tempor") &lt;&lt; i ++;
  nokia.display ();
  se (LCDinitTimer.check ()) nokia.begin (LCDcontrast); // Permitir desconectar e conectar o LCD durante a execução
  stopwatch.stop (); // Test
  Serial &lt;&lt; stopwatch.counter &lt;&lt; "" &lt;&lt; stopwatch.interval &lt;&lt; "" &lt;&lt; stopwatch.maxInterval (1) &lt;&lt; "\ n"; // Test
}
 
vazio findBestContrast (int contrastMin, int contrastMax, int _delay)
{For (int contraste = contrastMin; contraste &lt;= contrastMax; contraste ++)
  {Nokia.clearDisplay ();
    nokia.setContrast (contraste);
    Nokia &lt;&lt; F ("12345678901234");
    nokia &lt;&lt; F ("12345678901234 \ n"); // Bug: "\ n" depois de 14 personagens cria uma linha em branco
    nokia &lt;&lt; F ("bla bla bla bla bla bla \ n");
    Nokia &lt;&lt; contraste;   
    nokia.display ();
    atraso (_delay);
  }
}

 

O contraste deve ser definido separadamente para cada LCD. Com a função findBestContrast (), o valor de contraste correto pode ser determinado.

 

 Biblioteca PCD8544 com SPI hardware

O Adafruit_PCD8544 biblioteca usa a comunicação com o LCD por SPI software; Por conseguinte, a biblioteca é bastante lento. No meu exemplo, escrevendo a tela de LCD completo leva 31ms.

Snigelen criou uma biblioteca de hardware SPI PCD8544, consulte a mesma aqui.

Conferindo

  • Não use “\ n” após uma linha de 14 caracteres, isso cria uma linha em branco extra.
  • Não use endl, << endl; leva 60 bytes mais espaço do que o programa << “\ n”;
  • O drive LCD PCD8544 pode ser danificado se não for reinicializado corretamente.

Deixe um comentário

Free WordPress Themes

*

 
Free WordPress Themes
WordPress Themes