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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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

    ×