Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: m3t4l3ir0 em 14 de Julho de 2010, 22:36

Título: Microcontrolador ARM e Lcd 19x2 ??
Enviado por: m3t4l3ir0 em 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.
Título: Re: Microcontrolador ARM e Lcd 19x2 ??
Enviado por: jmlopes em 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
Título: Re: Microcontrolador ARM e Lcd 19x2 ??
Enviado por: m3t4l3ir0 em 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
Título: Re: Microcontrolador ARM e Lcd 19x2 ??
Enviado por: serandre em 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.  ;)
Título: Re: Microcontrolador ARM e Lcd 19x2 ??
Enviado por: m3t4l3ir0 em 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 :)