Como criar caracteres personalizados no LCD usando Arduino- (Parte 5/49)

Como criar caracteres personalizados no LCD usando Arduino- (Parte 5/49)

O módulo LCD é a unidade de saída mais comum em uma placa microcontroladora. É muito eficaz, pois pode exibir mensagens, valores, relógio, etc. Tipos especiais de drivers de LCD são usados ​​para acionar o LCD. Dois ou mais ICs de driver desse tipo, juntamente com a tela LCD, formam módulos LCD encontrados em sistemas embarcados. Os caracteres exibidos nos módulos LCD são, na verdade, armazenados nos locais de memória interna desses controladores. Eles são armazenados de forma que se assemelham exatamente à tabela ASCII. Sempre que os microcontroladores enviam um valor ASCII, os controladores LCD exibem o caracter ASCII que foi armazenado correspondente a esse valor.

Os módulos LCD podem exibir não apenas caracteres ASCII, mas também caracteres personalizados. O usuário pode armazenar a matriz de pixels correspondente ao caractere personalizado em um módulo LCD. O caractere personalizado armazenado pode ser exibido enviando o valor correspondente ao módulo LCD.O Arduino é uma plataforma de fácil prototipagem em que o hardware é muito simples de usar e conectado a qualquer outro circuito. O ambiente de programação também é muito fácil de começar e possui muitas funções integradas para cada tarefa simples e complexa. O IDE também possui funções para interface com LCD e entre elas existem funções que auxiliam na criação de personagens customizados também. Este projeto demonstra como é possível crie os caracteres personalizados em um LCD e exiba os mesmos usando o Arduino.

O módulo LCD possui dois ou mais ICs de driver de vídeo que armazenam o padrão de caracteres a ser exibido. Sempre que um valor ASCII é enviado ao módulo LCD, o controlador carrega o array de caracteres correspondente e o exibe na tela LCD. Para exibir cada caractere, a tela LCD usa uma matriz de 8*5 pixels na tela. Na memória interna todos os pixels a serem ativados para um determinado caractere são armazenados como 1 e os demais são mantidos como 0. Um exemplo de caractere armazenado na memória EPROM interna do controlador LCD comum HD44780 é mostrado na imagem a seguir;

Padrão de caracteres armazenado na memória EPROM do controlador LCD HD44780

Fig. 2: Padrão de caracteres armazenado na memória EPROM do controlador LCD HD44780

A imagem mostrada acima é o padrão de caracteres armazenado na memória interna do controlador LCD. O valor ASCII para a letra 'b' em binário é 0b01100010 e portanto o padrão é armazenado no local da memória com o mesmo endereço. Portanto, quando o microcontrolador envia o valor ASCII do caractere 'b', o controlador LCD carrega o padrão de caractere do mesmo local com o endereço igual a esse valor ASCII. A memória onde os caracteres padrão são armazenados é chamada de ROM gerador de caracteres (CGROM). O usuário não pode gravar nesses locais, pois se trata de memória somente leitura (ROM). O controlador LCD possui outro bloco de memória que é uma memória de leitura e gravação com 64 bytes (8*8) de armazenamento por local onde o usuário pode armazenar seus caracteres personalizados. O usuário pode gravar 64 caracteres personalizados nesta memória, conhecida como Character Generator RAM (CGRAM).

Neste projeto é utilizada a placa Arduino pro-mini que é então programada com o auxílio do Arduino IDE versão 1.0.3 no sistema operacional Windows. A imagem da placa Arduino pro-mini e do Arduino IDE é mostrada a seguir;

Placa Arduino Pro-Mini típica

Fig. 3: Placa Arduino Pro-Mini típica

 Janela do software Arduino IDE

Fig. 4: Janela do software Arduino IDE

Outro hardware que pode realizar a conversão de USB para TTL é usado para carregar o programa na placa Arduino.

Placa conversora USB externa para TTL para programação de Arduino e comunicação serial

5: Placa conversora USB para TTL externa para programação Arduino e comunicação serial

Presume-se que o leitor tenha passado pelo projeto como começar com o arduino e fiz todas as coisas discutidas nele. É preciso descobrir o caractere personalizado que precisa ser exibido na tela LCD. Os caracteres personalizados exibidos neste projeto são mostrados na imagem a seguir e a seção a seguir explica como descobrir o padrão de caracteres necessário para cada caractere personalizado.

Personagens personalizados criados no projeto no LCD usando a configuração do circuito Arduino na placa de ensaio

Fig. 6: Caracteres personalizados criados no projeto no LCD usando a configuração do circuito Arduino na placa de ensaio

O LCD usa um bloco de 8*8 pixels para exibir cada caractere e, portanto, é necessário assumir uma matriz 8*5 e desenhar o caractere personalizado necessário e descobrir o padrão de bits necessário. Pode-se trabalhar com a ajuda da matriz de pixels e da matriz binária, conforme mostrado na imagem a seguir.

Pixel 8*5 e disposição binária para meio ciclo positivo para caráter personalizado

Fig. 7: Pixel 8 * 5 e matriz binária para meio ciclo positivo para caracteres personalizados

Existem oito linhas R0 a R7 e oito colunas C0 a C7. Os valores em todas as linhas e colunas agora são zero, pois todos os pixels estão desativados. Todos os pixels que precisam ser ativados devem receber o valor 1 e o restante deve ser mantido como 0. Agora leia o padrão binário e escreva o mesmo no CGRAM para gerar o caractere personalizado. É aconselhável armazenar o padrão de caracteres em uma matriz de caracteres para que seja fácil de usar com o código C. A matriz de pixels e a matriz binária do primeiro caractere personalizado exibido no projeto são mostradas na imagem a seguir;

 8*5 pixels e matriz binária para o primeiro caractere personalizado

Fig. 8: 8*5 pixels e matriz binária para o primeiro caractere personalizado

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b11111

};

A matriz de pixels e a matriz binária do segundo caractere personalizado exibido no projeto são mostradas na imagem a seguir;

Pixel 8*5 e disposição binária para o segundo personagem personalizado usando Arduino

Fig. 9: 8*5 pixels e matriz binária para segundo caractere personalizado usando Arduino

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b11111,

0b11111

};

A matriz de pixels e a matriz binária do terceiro caractere personalizado exibido no projeto são mostradas na imagem a seguir;

 Pixel e matriz binária para terceiro caractere personalizado usando Arduino

Fig. 10: Pixel e array binário para terceiro caractere personalizado usando Arduino

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b11111,

0b11111,

0b11111

};

A matriz de pixels e a matriz binária do quarto caractere personalizado exibido no projeto são mostradas na imagem a seguir;

Pixel e matriz binária para o quarto caractere personalizado

Fig. 11: Pixel e matriz binária para o quarto caractere personalizado

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b00000,

0b00000,

0b00000,

0b11111,

0b11111,

0b11111,

0b11111

};

A matriz de pixels e a matriz binária do quinto caractere personalizado exibido no projeto são mostradas na imagem a seguir;

Pixel e matriz binária para o quinto caractere personalizado

Fig. 12: Pixel e matriz binária para o quinto caractere personalizado

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b00000,

0b00000,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111

};

A matriz de pixels e a matriz binária do sexto caractere personalizado exibido no projeto são mostradas na imagem a seguir;

Pixel e matriz binária para o sexto caractere personalizado

Fig. 13: Pixel e matriz binária para o sexto caractere personalizado

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b00000,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111

};

A matriz de pixels e a matriz binária do sétimo caractere personalizado exibido no projeto são mostradas na imagem a seguir;

 Pixel e matriz binária para o sétimo caractere personalizado usando Arduino

Fig. 14: Pixel e matriz binária para o sétimo caractere personalizado usando Arduino

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b00000,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111

};

A matriz de pixels e a matriz binária do oitavo caractere personalizado exibido no projeto são mostradas na imagem a seguir;

Pixel e matriz binária para o oitavo caractere personalizado usando Arduino

Fig. 15: Pixel e matriz binária para o oitavo caractere personalizado usando Arduino

A matriz de caracteres de 8 bytes para o caractere personalizado mostrado acima pode ser definida no código conforme fornecido abaixo;

{

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111

};

O Arduino IDE possui uma biblioteca chamada que fornece muitas funções para acessar o módulo LCD. Poucas dessas funções que são muito úteis em pequenas aplicações já foram discutidas no projeto anterior em como fazer interface com um LCD, como exibir o valor do sensor no LCD, como conectar o LCD ao PC e como fazer um display LCD de rolagem.

O código escrito para este projeto possui uma função lcd.createChar que ajuda a criar caracteres personalizados em uma tela LCD. Os detalhes da função lcd.createChar são discutidos na seção a seguir.

lcd.createChar

A função lcd.createChar pode ser usada para escrever um caractere personalizado no local necessário no CGRAM. A função possui dois parâmetros nos quais o primeiro parâmetro é o local na memória CGRAM onde o array de caracteres correspondente ao caractere personalizado precisa ser armazenado e o segundo parâmetro é o próprio array de caracteres. Por exemplo, se houver uma matriz de caracteres personalizada chamada 'cc' e ela precisar ser armazenada no 5º localização do CGRAM pode-se usar a seguinte afirmação;

lcd.createChar(5, cc);

A instrução acima grava a matriz de caracteres no 5º localização do CGRAM do controlador LCD de onde ele pode ser exibido chamando a função lcd.write discutida nos projetos em como conectar o LCD ao PCe como fazer um display LCD de rolagem.

lcd.write(5);

Código-fonte do projeto

###




/*================================= EG LABS =======================================

 Receive a character through the serial port of the PC and display the same cahracter

 in a 16*2 LCD in scrolling manner along with glowing an LED each time

 

 The circuit:

 * LED attached from pin 5 to ground through a 1K resistor

 

 LCD:

 * LCD RS pin to digital pin 12

 * LCD Enable pin to digital pin 11

 * LCD D4 pin to digital pin 5

 * LCD D5 pin to digital pin 4

 * LCD D6 pin to digital pin 3

 * LCD D7 pin to digital pin 2

 * LCD R/W pin to ground

 * 10K resistor:

 * ends to +5V and ground

 * wiper to LCD pin 3

 * LED anode attached to digital output 6

 * LED cathode attached to ground through a 1K resistor

//================================= EG LABS =======================================*/


// include the library code:

#include 


// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


//----------------- store the custom characters in arrays ---------------------//

byte cc1(8) = 

              {

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b11111

              };


byte cc2(8) = 

              {

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b11111,

                0b11111

              };


byte cc3(8) = 

              {

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b11111,

                0b11111,

                0b11111

              };


byte cc4(8) = 

              {

                0b00000,

                0b00000,

                0b00000,

                0b00000,

                0b11111,

                0b11111,

                0b11111,

                0b11111

              };


byte cc5(8) = 

              {

                0b00000,

                0b00000,

                0b00000,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111

              };


byte cc6(8) = 

              {

                0b00000,

                0b00000,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111

              };


byte cc7(8) = 

              {

                0b00000,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111

              };


byte cc8(8) = 

              {

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111,

                0b11111

              };

//----------------- store the custom characters in arrays ---------------------//


// give the LED pin a name:

int led = 6;


void setup 

{

  //---- create custom characters ----//

  lcd.createChar(1, cc1);

  lcd.createChar(2, cc2);

  lcd.createChar(3, cc3);

  lcd.createChar(4, cc4);

  lcd.createChar(5, cc5);

  lcd.createChar(6, cc6);

  lcd.createChar(7, cc7);

  lcd.createChar(8, cc8);

  //---- create custom characters ----//

  

  // initialize the led pin as an output.

  pinMode(led, OUTPUT);

  

  // set up the lcd's number of columns and rows: 

  lcd.begin(16, 2);

}


void loop 

{

  lcd.print("EG LABS ");  

 

  lcd.write(1);                    // dispaly custom character

  //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

   //---- blink LED -----//

   

  lcd.write(2);                   // dispaly custom character

  //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

  //---- blink LED -----//

  

  lcd.write(3);                   // dispaly custom character

   //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

   //---- blink LED -----//

   

  lcd.write(4);                   // dispaly custom character

  //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

  //---- blink LED -----//

     

  lcd.write(5);                   // dispaly custom character

  //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

  //---- blink LED -----//

  

  lcd.write(6);                   // dispaly custom character

  //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

  //---- blink LED -----//

  

  lcd.write(7);

  //---- blink LED -----//

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

  //---- blink LED -----//

  

  lcd.write(8);                   // dispaly custom character

  //---- blink LED -----// 

  digitalWrite(led, HIGH);       

  delay(1000);

  digitalWrite(led, LOW);

  delay(1000);

  //---- blink LED -----//

 

  lcd.clear ;

}

###

 

Diagramas de circuito

Diagrama de Circuito-Criando Caracteres Personalizados-LCD-Usando-Arduino

Componentes do Projeto

  • Arduino ProMini
  • LCD
  • LIDERADO
  • Resistor

Vídeo do projeto

返回網誌

發表留言

請注意,留言須先通過審核才能發佈。