Autor Tópico: Microcontrolador ARM e Lcd 19x2 ??  (Lida 2485 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline m3t4l3ir0

  • Novato
  • *
  • Posts: 33
  • Sexo: Masculino
Microcontrolador ARM e Lcd 19x2 ??
« Online: 14 de Julho de 2010, 22:36 »
Primeiramente Boa noite ;D.

To comećando a me aventurar com microcontroladores de 32bits, mais especificamente um LPC2148 da nxp.

Despois de muita briga pra compilar o gcc pro arm e aprender na marra como funciona o tal Makefile, consegui ligar um display que tinha por aqui, deu um bom trabalho fazer funcionar, mais agora so consigo usar 19 colunas onde deveria ter 20  ???

Alguem poderia por favor da uma olhada no nesse codigo ai???
e ver se tem algo errado???

Boa noite.

lcd.h

Código: [Selecionar]
#ifndef _DISPLAY_H_
#define _DISPLAY_H_

#define EnableRS FIO0SET = P21
#define DisableRS FIO0CLR = P21

#define EnableEN FIO0SET = P20
#define DisableEN FIO0CLR = P20

void LCD_Init ( void );
void LCD_Delay ( int ms );
void LCD_Command ( unsigned char data );
void LCD_Data ( unsigned char data );

#endif

lcd.c
Código: [Selecionar]
//
// Driver para display LCD de texto 20x2 =:(
//
// Versão 0.00000000000000000000000000000000000000000000000000000000001
// 17/07/2010
//

#include <cpu.h>

#include "display.h"

void LCD_Init ( void )
{

DisableRS;
DisableEN;

LCD_Delay ( 15 );

LCD_Command ( 0x03 );
LCD_Delay ( 5 );

LCD_Command ( 0x03 );
LCD_Delay ( 5 );

LCD_Command ( 0x03 );
LCD_Delay ( 5 );

LCD_Command ( 0x02 );
LCD_Delay ( 5 );

LCD_Command ( 0x02 );
LCD_Delay ( 5 );

LCD_Command ( 0x08 );
LCD_Delay ( 5 );

LCD_Command ( 0x00 );
LCD_Delay ( 5 );

LCD_Command ( 0x08 );
LCD_Delay ( 5 );

LCD_Command ( 0x00 );
LCD_Delay ( 5 );

LCD_Command ( 0x01 );
LCD_Delay ( 5 );

LCD_Command ( 0x00 );
LCD_Delay ( 5 );

LCD_Command ( 0x01 );
LCD_Delay ( 5 );

LCD_Command ( 0x0F );
LCD_Delay ( 5 );

LCD_Data('D');
LCD_Data('i');
LCD_Data('s');
LCD_Data('p');
LCD_Data('l');
LCD_Data('a');
LCD_Data('y');
LCD_Data(' ');
LCD_Data('1');
LCD_Data('9');
LCD_Data('x');
LCD_Data('2');
LCD_Data(' ');
LCD_Data('=');
LCD_Data(':');
LCD_Data('|');
LCD_Data(' ');
LCD_Data(':');
LCD_Data('(');

// while(1) LCD_Data('.');
}

void LCD_Delay ( int ms )
{
long tmp = 0;
for( tmp = 0 ; tmp < ( 100 * ms ) ; tmp++ );
}

void LCD_Command ( unsigned char data )
{

unsigned char val_lower = ( data & 0x0F );
unsigned char val_upper = ( data >> 4 );

DisableRS;

FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_upper << 16 );
FIO0MASK = 0x0000FFFF;

DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );

FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_lower << 16 );
FIO0MASK = 0x0000FFFF;

DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );

}

void LCD_Data ( unsigned char data )
{

long tmp = 0;

unsigned char val_lower = ( data & 0x0F );
unsigned char val_upper = ( data >> 4 );

EnableRS;

FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_upper << 16 );
FIO0MASK = 0x0000FFFF;

DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );

FIO0MASK = 0xFFF0FFFF;
FIO0PIN = ( val_lower << 16 );
FIO0MASK = 0x0000FFFF;

DisableEN;
LCD_Delay ( 5 );
EnableEN;
LCD_Delay ( 5 );
DisableEN;
LCD_Delay ( 5 );

}

Esse codigo ai foi adaptado de alguns encontrados pela net  ;D

ja ia esquecendo to usando 4 bits.

To sem o programa da webcam mais vai uma foto.

Offline jmlopes

  • Novato
  • *
  • Posts: 18
  • Sexo: Masculino
  • Cidade - UF: OSASCO - SP
Re: Microcontrolador ARM e Lcd 19x2 ??
« Resposta #1 Online: 18 de Agosto de 2010, 10:28 »
Olá Metaleiro,

 Seu código aparentemente está certo, mas só escreve 19 caracteres.

 Você tentou escrever 20 caracteres e ele não escreve ? É isso ?

 Mande o modelo do display. Quem sabe precisa acertar a inicialização.

  []s
 Jorge

Offline m3t4l3ir0

  • Novato
  • *
  • Posts: 33
  • Sexo: Masculino
Re: Microcontrolador ARM e Lcd 19x2 ??
« Resposta #2 Online: 20 de Agosto de 2010, 22:16 »
Desculpe a demora, eu estava sem internet.

Bom, o problema era no display, a ultima coluna não funcionava tentei durante uma semana ate resolver desmontar o display.
estava com uma rachadura que não dava pra ver... :-[ :-[ :-[

Mais obrigado por tentar ajudar. ;D

agora estou usando um display 16x2 mesmo.

Caso alguém mais esteja usando esses microcontroladores e precisar de alguma ajuda pode perguntar ai  ;D

Offline serandre

  • Fuso
  • **
  • Posts: 109
Re: Microcontrolador ARM e Lcd 19x2 ??
« Resposta #3 Online: 21 de Agosto de 2010, 01:06 »
De qualquer forma esse código só ia mostrar mesmo 19 caracteres:
 
LCD_Data('D');
LCD_Data('i');
LCD_Data('s');
LCD_Data('p');
LCD_Data('l');
LCD_Data('a');
LCD_Data('y');
LCD_Data(' ');
LCD_Data('1');
LCD_Data('9');
LCD_Data('x');
LCD_Data('2');
LCD_Data(' ');
LCD_Data('=');
LCD_Data(':');
LCD_Data('|');
LCD_Data(' ');
LCD_Data(':');
LCD_Data('(');

// while(1) LCD_Data('.');

Essa última linha está com // (comentário) e não ia executar.  ;)

Offline m3t4l3ir0

  • Novato
  • *
  • Posts: 33
  • Sexo: Masculino
Re: Microcontrolador ARM e Lcd 19x2 ??
« Resposta #4 Online: 21 de Agosto de 2010, 09:51 »
Isso ai era apenas para teste, no codigo principal ele limpa o display e escreve uma mensagem que usa todas as 20 colunas :)


 

/** * */