Ir ao conteúdo
  • Cadastre-se

PIC 16F628A + LCD usando MikroC e Proteus


cezar.opaleiro

Posts recomendados

Olá amigos!

Sou novo em micro eletrônica e fiz um programinha bem simples...porém não mostra nada no Display LCD...alguem poderia me ajudar a solucionar o problema??

O código no MikroC é este:

char *text = "mikroElektronika";

void main() {

TRISB = 0;

LCD_Init(&PORTB); // Initialize LCD connected to PORTB

LCD_Cmd(LCD_CLEAR); // Clear display

LCD_Cmd(LCD_CURSOR_OFF); // Turn cursor off

while(1){

LCD_Out(1,1, text); // Print text to LCD, 2nd row, 1st column

Delay_ms(1000);

LCD_Out(2,6,"PIC 16F628A");

}

}

no ISIS:

diagramaisis.jpg

Alguem poderia me ajudar por gentileza?

Desde já um muito obrigado!!

Link para o comentário
Compartilhar em outros sites

configure o LCD usando o sistema de ajuda do próprio MikroC


D7 → port.7
D6 → port.6
D5 → port.5
D4 → port.4
E → port.3
RS → port.2
RW → port.0

para PORTB


D7 → portB.7
D6 → portB.6
D5 → portB.5
D4 → portB.4
E → portB.3
RS → portB.2
RW → portB.0

O código exemplo ;)


char *text = "mikroElektronika";

void main() {
TRISB = 0; // PORTB is output
Lcd_Init(&PORTB); // Initialize LCD connected to PORTB
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column
}//

Link para o comentário
Compartilhar em outros sites

He esqueci de uns detalhe, pra configurar o LCD no microC você faz assim:

LCD_Init(&PORTB 7,6,5,4,3,2,1,0 &PORTA 6,0,5);

ah e nao esqueça disso:

CMCON = 0x07 ; porta IO digital

TRISA = 0

TRISB = 0

como voce esta operando no modo 8 bits essa e a configuração que tem que ir pro seu codigo.

abs.

Link para o comentário
Compartilhar em outros sites

He esqueci de uns detalhe, pra configurar o LCD no microC você faz assim:

LCD_Init(&PORTB 7,6,5,4,3,2,1,0 &PORTA 6,0,5);

ah e nao esqueça disso:

CMCON = 0x07 ; porta IO digital

TRISA = 0

TRISB = 0

como voce esta operando no modo 8 bits essa e a configuração que tem que ir pro seu codigo.

abs.

Felipe!

Fiz as atualizações no código que você me passou:

char *text = "mikroElektronika";

void main() {

CMCON = 0x07 ; //porta IO digital

TRISA = 0;

TRISB = 0;

Lcd_Init(&PORTB 7,6,5,4,3,2,1,0 &PORTA 6,0,5);

Lcd_Cmd(Lcd_CLEAR); // Clear display

Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off

Lcd_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column

}

Só que agora deu um erro de sintaxe...na linha do Lcd_Init.

A descrição:

expected ')' but '7' found

expected ';' but '6' found

Abraço!

Link para o comentário
Compartilhar em outros sites

Alterações:

char *text = "mikroElektronika";

void main() {

CMCON = 0x07 ; //porta IO digital

TRISA = 0;

TRISB = 0;

Lcd8_Init(&PORTB,7,6,5,4,3,2,1,0,&PORTA,6,0,5);

Lcd8_Cmd(Lcd8_CLEAR); // Clear display

Lcd8_Cmd(Lcd8_CURSOR_OFF); // Turn cursor off

Lcd8_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column

}//

Erro:

expected ')' but ',' found

expected ';' but '5' found

Link para o comentário
Compartilhar em outros sites

Estranho, alias muito mesmo, faz tempo que nao programo em C (o assembly me dominou =D) bom que tal olhar o manual da Mikro C e ver se tem algo faltando ?

aqui o link:

http://www.mikroe.com/pdf/mikroc_pic_pro/mikroc_pic_pro_manual_v100.pdf

EDIT:

veja a pagina 356 dei uma olhada e tem algo que pode ajudar

tente isso;

[B] Lcd_Init (&PORTB, 7, 6, 5, 4, 3, 2, 1, 0, &PORTA, 6, 0, 5);[/B] Colocando os espaços

Mais um detalhe, apos a inicializaçao do LCD de um pequeno delay.

vou continuar veriificando o que esta errado e posto aqui

abs.

Link para o comentário
Compartilhar em outros sites

Estranho, alias muito mesmo, faz tempo que nao programo em C (o assembly me dominou =D) bom que tal olhar o manual da Mikro C e ver se tem algo faltando ?

aqui o link:

http://www.mikroe.com/pdf/mikroc_pic_pro/mikroc_pic_pro_manual_v100.pdf

EDIT:

veja a pagina 356 dei uma olhada e tem algo que pode ajudar

vou continuar veriificando o que esta errado e posto aqui

abs.

Realmente muito estranho...

Sou muito grato pela sua ajuda Felipe!

Vou olhar no manual também...

Link para o comentário
Compartilhar em outros sites

ficou assim:

char *text = "mikroElektronika";

void main() {

CMCON = 0x07 ; //porta IO digital

TRISA = 0;

TRISB = 0;

Lcd8_Config(&PORTB,7,6,5,4,3,2,1,0,&PORTA,6,0,5);

Lcd8_Cmd(Lcd8_CLEAR); // Clear display

Lcd8_Cmd(Lcd8_CURSOR_OFF); // Turn cursor off

Lcd8_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column

}//

porém o erro mudou:

division by zero

expected ';' but ')' found

Link para o comentário
Compartilhar em outros sites

Eu ja passei o código teste e é esse aqui.


char *text = "mikroElektronika";

void main() {
TRISB = 0; // PORTB is output
Lcd_Init(&PORTB); // Initialize LCD connected to PORTB
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column
}//

Ali naqueles portb.1.2.3.4.5.6.8.98.90.9..9.0.9.9.9..9. Eu estava apenas te mostrando ONDE ERA CADA PINO para que você possa conectar corretamente o LCD

Se você quiser ligar em pinagens diferentes, use o Lcd_Custom_Config e use o help dele (ou seja, clique duas vezes sobre o comando na tela de comandos).

Está tudo descrito lá!

Alias, se quiser usar as saídas todas customizadas, use o Lcd_Custom_Config();

 
char *text = "mikroElektronika";

void main() {
TRISB = 0; // PORTB is output
Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTB,2,0,3); // Initialize LCD on PORTB
Lcd_Custom_Cmd(Lcd_CURSOR_OFF); // Turn off cursor
Lcd_Custom_Out(1, 1, text); // Print text at LCD
}

A sintaxe está descrita no Help do MikroC, alias, todos os exemplos eu tirei de lá... entõa rapaz, aproveite pois o help do MikroC é um dos mais completos para PIC que existem!

Link para o comentário
Compartilhar em outros sites

Felipe, fiz umas modificações porém na simulação o LCD ainda não mostra nada...:roll:

Novo código:

char *text = "mikroElektronika";

void main() {

CMCON = 0x07 ; //porta IO digital

TRISA = 0;

TRISB = 0;

Lcd8_Config(&PORTA, &PORTB, 7, 6, 5, 7, 6, 5, 4, 3, 2, 1, 0);

Lcd8_Init(&PORTA,&PORTB);

while(1){

Lcd8_cmd(LCD_CLEAR); //' limpa o display

Lcd8_Out(1,1,"Display LCD"); // ' escreve um texto no lcd

}

}//

Esse código rodou sem erro, mas na simulação no ISIS o LCD fica em branco só com uma linha embaixo, veja:

lcddd.jpg

Abraço!

Link para o comentário
Compartilhar em outros sites

Calma Lucas, deixa o cara aprender com os 8 pinos primeiro, depois a gente compica hehehehe.

se for assim 4 pinos, pra mim, ainda é um desperdicio (prefiro usar um shift register e uma rotina de deslocamento de bits =D so uso um pino de IO)

=D

ao amigo, do lcd faça o que o Lucas disse, nao tinha reparado que voce estava usando um 628 (pramim era um 16f84)

abs.

Link para o comentário
Compartilhar em outros sites

Felipe, com 1 pino só é possivel via 1-wire communication...

Ja vi um rapaz que fez com 3 pinos, usando um DMUX e um shift register.

Com 2 pinos é só usar RS-232 e um circuito dedicado com microcontrolador provavelmente.

Mas realmentem eu ja tive MUITOS problemas com o LCD no ISIS e em 90% dos casos era que o projeto no MikroC estava programado para 20MHz e no Isis ao ver as propriedades do PIC ele estava configurado para 8MHz

Link para o comentário
Compartilhar em outros sites

Quando digo 1 pino, so contando os barramentos de dados, a contando tudo (RS e EN e CLK do Shift Reg) serao 4 pinos. consegui implementar sem muitas dificuldades um voltimetro com um PIC12f675.

quannto ao ISIS, concordo com voce, muitos dos problemas sao a configuração da frequencia do PIC, pois sem as devidas modificaçoes como vamos respeitar as temporizaçoes e o tempo de busy do LCD =D

abs.

Link para o comentário
Compartilhar em outros sites

Olá Felipe!

Tentei inverter o RS e o EN e nada...mesma coisa...:unsure:

Lucas, as config. estão como segue abaixo...ambos estão config. as frequencias em 4Mhz.

MikroC:

mikrocconifg.jpg

No ISIS:

isisconfig.jpg

Desde já agradeço pela grande ajuda de vocês...estou aprendendo bastante!

Este é o princípio de um projeto que tenho que fazer para o meu TD...logo comento com vocês!!

Fiz um upload do meu projeto no 2shared, o link é este abaixo:

http://www.2shared.com/file/6702653/1fc72b63/Cez_mikro.html

Nele está tanto o ISIS quanto o código no MikroC. Se vocês puderem dar uma analisada. Eu notei que no ISIS os pinos EN e RS do display LCD estão sempre cinza...assim como RA6 e RA7 no PIC, é isso mesmo?

Abraço!

Link para o comentário
Compartilhar em outros sites

Amigos...uma dúvida...para carregar o programa no ISIS, basta apenas carregar o ".hex" ou tenho que carregar o ".asm", ambos gerados pelo MikroC. Ou tenho que carregar os 2 juntos...

quando carrego o .asm sempre da erro...

Outro detalhe, vejam o arquivo de log, realmente parece que tem algum conflito com a frequencia...como corrigir isso??

loggg.jpg

Eu estava precisando de um passo-a-passo bem simples pra esse meu 1º projetinho rsrsrs

Helppp...por favor! :unsure:

Link para o comentário
Compartilhar em outros sites

Varifique novamente as conexões, RA7 no EN e RA6 no RS

assim: Lcd8_Config(&PORTA, &PORTB, 7, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0);

Opa! parece que seu oscilador ta configurado errado está no RC -> segundo o seu log

coloque para INTRC_NOCLKOUT (PORTA 6 e 7 como pinos de IO) pode ser por isso que nao estaja funcionando e também você não poder usar o o RA5 para saida pois ele só pode ser configurado como entrada.

abs.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...