Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Entre para seguir isso  
cezar.opaleiro

[Resolvido] PIC 16F628A + LCD usando MikroC e Proteus

Recommended Posts

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!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tal por essa linha no codigo:

TRISA = 0;

lembre se q o porta tambem deve ser configurado como saida para voce enviar o sinas Enable e RS.

abs.

Compartilhar este post


Link para o post
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
}//

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

Primeiramente, muito obrigado pela ajuda!

Felipe, coloquei a linha que você sugeriu e infelizmente continua o problema...

Lucas, como eu posso configurar estes parametros que você indicou?

Sou novo de MikroC também :lol: heheh

Muito obrigado pela ajuda!

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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!

Compartilhar este post


Link para o post
Compartilhar em outros sites
 
ops errinhos de digitaçao o correto e:

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

abs.

Ô amigão...o erro ainda persiste...:(

fala agora que:

expected ')' but ',' found

expected ';' but '6' found

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso:

onde estiver escrito LCD_ mude para LCD8_

Ex.:

LCD_Init fica LCD8_Init faça isso em todos so comandos com o LCD e poste o resultado ok?

PS.: mantenhas as alteraçoes feitas

abs.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Editado por Bcpetronzio
Inserir CODE

Compartilhar este post


Link para o post
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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tava vendo um codigo antigo que fiz pro meu PIC18F452 que funciona, tenta isso aqui

em vez de LCD_Init, tenta LCD8_Config e mantenha as alteraçoes feitas

abs.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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!

Compartilhar este post


Link para o post
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!

Editado por cezar.opaleiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce ligou corretamente os pinos RS e EN de acordo com sua configuração do LCD? pode ser isso, inverta os pinos nos ISIS e veja se funciona.

abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certeza absoluta que você esqueceu de configurar a frequencia do PIC no proteus!

Alias, use o sistema normal, sem ser o de 8 pinos (LCD8) pois sinceramente, é um enorme desperdício de pinos.

Editado por Lucas Scoppio

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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!

Editado por Bcpetronzio
Unir Post seguidos em menos de 24 horas, use a opção Editar

Compartilhar este post


Link para o post
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:

Editado por cezar.opaleiro

Compartilhar este post


Link para o post
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.

Editado por Felipe_Eletronic

Compartilhar este post


Link para o post
Compartilhar em outros sites

configure os fuses pelo MikroC, e não pelo Proteus. ;)

E retire o WTD, desative-o, caso contrário poderá causar problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×