Página 1 de 1

MikroC

MensagemEnviado: 10 Jul 2011 12:18
por DU, DUDU,EDU
Oi pessoal, estou tentando fazer uma programação para comunicação com LCD usando o MikroC mas não estou conseguindo, estou usando o exemplo que vem junto com a biblioteca do mikroC, mas não esta dando certo.
// LCD module connections
sbit LCD_RS at RB3_bit;
sbit LCD_EN at RB0_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB3_bit;
sbit LCD_EN_Direction at TRISB0_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

char txt1[] = "mikroElektronika";
char txt2[] = "EasyPIC5";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i; // Loop variable

void Move_Delay() { // Function used for text moving
Delay_ms(500); // You can change the moving speed here
}

void main(){
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff; // Configure AN pins as digital I/O
Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,6,txt3); // Write text in first row

Lcd_Out(2,6,txt4); // Write text in second row
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Out(1,1,txt1); // Write text in first row
Lcd_Out(2,5,txt2); // Write text in second row

Delay_ms(2000);

// Moving text
for(i=0; i<4; i++) { // Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}

while(1) { // Endless loop
for(i=0; i<8; i++) { // Move text to the left 7 times
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}

for(i=0; i<8; i++) { // Move text to the right 7 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
}
}
se alguem puder me ajudar, vlww!!!

Re: MikroC

MensagemEnviado: 10 Jul 2011 12:49
por andre_luis
Eduarrdo,


Coloca aqui também o circuito e diz qual é o erro que está ocorrendo.
Pra começar a tentar alguma coisa : Tentou ajustar a tensão no potenciometro ligado ao pino 3 do LCD para algo entre 0 e 0,7v ?



Dica : Quando postar o código, coloca entre cotas
Código: Selecionar todos
xxxxx



+++

Re: MikroC

MensagemEnviado: 10 Jul 2011 14:28
por DU, DUDU,EDU
Voltou te mandar o esquema q fiz no proteus pra simular.
O programa compila sem aparecer a mensagem de erro, mas na hora q rodo ele no proteus, não aparece nenhuma mensagem no display, qd compilei o arquivo hex. ficou com 3KB, como uso a versão demo, e esta suporta até 2KB, seria este o problema.[/img][/url][/code][/list]

MensagemEnviado: 10 Jul 2011 16:02
por mastk
Pode ser limitacao do seu ambiente de desenvolvimento, mas 3K para um codigo desse tamanho eh muito, talvez as bibliotecas que vc esta usando sejam muito maiores do que vc precissa.

Nao sei se eh por causa do forum, mas identacao no codigo ajuda muito a leitura.

Nao sei o pq, desses moves "right" e "left", normalmente vc endereça uma possicao no display manda tudo os caracteres que deseja.[/code]

Re: MikroC

MensagemEnviado: 10 Jul 2011 18:51
por andre_luis
O problema é que na versão Demo, a funcionalidade de otimização do código não existe, podendo gerar realmente arquivos Hexa extensos.

MensagemEnviado: 11 Jul 2011 08:49
por Andre_Cruz
DU,DUDU,EDU

Seja vem bem vindo !

Eu também comecei mexer com mikroC agora, eu uso o mikroC 8.2 no help dele tem um exemplo de como usar a biblioteca do lcd comunicando em 4 vias, no exemplo ele segue uma sequência de passos:
Código: Selecionar todos
char *text = "mikroElektronika"; //TEXTO A SER EXIBIDO

void main() { //ROTINA PRINCIPAL
  TRISB = 0;                // CONFIGURA O PORTB TODO COMO SAÍDA
  Lcd_Init(&PORTB);         // INICIALIZA O LCD E INDICA PARA A FUNÇÃO QUE O LCD ESTA LIGADO NO PORTB
  Lcd_Cmd(Lcd_CLEAR);       // COMANDO PARA LIMPAR O LCD
  Lcd_Cmd(Lcd_CURSOR_OFF);  // COMANDO PARA DESLIGAR O CURSOR
  Lcd_Out(1, 1, text);      // ESCREVE O TEXTO "mikroElektronika" NA LINHA 1 E COLUNA 1
}//~!


No seu programa dei uma olhada rápida na chamada da função "Lcd_Init" você não passou o parâmetro pode ser o "pobrema", e a configuração do PORTB de seu programa esta um pouco confusa:

Código: Selecionar todos
void main(){ //ROTINA PRINCIPAL
TRISB = 0; //CONFIGURA O PORTB TODO COMO SAÍDA
PORTB = 0xFF; //LIGA TODOS OS PINOS DO PORTB
TRISB = 0xff; // CONFIGURA O PORTB TODO COMO ENTRADA
Lcd_Init(); // AQUI FALTA O PARÂMETRO !!! TENTE Lcd_Init(&PORTB);


Tente configurar o PORTB como saída e não como entrada, retire ou comente a linha //TRISB = 0xff; e deixe a linha TRISB = 0;

Mande notícia quando resolver ser de exemplo para outros usuários do fórum.

Abraço

MensagemEnviado: 11 Jul 2011 17:55
por DU, DUDU,EDU
Olá André,
fiz o que vc flo, mudei todo o portb para 0
no esquema que fiz no proteus tbm tinha um erro, esqueci de jogar o pino R/W para terra. Apos as mudanças, o programa rodou certinho!!
Agradeço muito a ajuda de vcs!!!
vlw!![/code]