Ir ao conteúdo
  • Cadastre-se

Mplab + hi-tech


cezar.opaleiro

Posts recomendados

Olá amigos!

Gostaria da ajuda de vocês!

Estou fazendo um projetinho, que é fazer o PIC 16F88 controlar um LCD.

Abandonei o compilador MikroC, pois meus programas feitos nele ficavam lentos ou não funcionavam na prática. No proteus rodava beleza, mas quando montava ocorriam os problemas. Então decidi mudar agora uso o MPLAB + HI-TECH programando em C. Abaixo seguem meu programa de teste. Minha dúvida esta na configuração do oscilador. Como faço para configurar ele sendo interno?



#include <htc.h>
#include "lcd.h"
#include "lcd.c"

void
main(void)
{
lcd_init();
lcd_goto(0); // ir para a primeira linha
char * vet = "Teste";

while(1)
{
lcd_clear();
lcd_puts(vet);
__delay_ms(2000);
}

}

No proteus a simulação ocorre perfeita.

No gravador quando carrego o código o oscilador fica como externo. Posso ignorar e gravar assim mesmo? Vou grava esse código no 16F88, usando Osc. interno.

Obrigado!

Link para o comentário
Compartilhar em outros sites

Use:

__CONFIG( INTIO & MCLRDIS & WDTDIS & PWRTEN);

#define _XTAL_FREQ 4000000

Procure la na pasta include do HT o arquivo do teu PIC. Abra ele que você encontrará todos os bits de configuração.

EDIT: o HT tem um probleminha que o delay em ms costuma nao funcionar acima de 150ms, aconselho a fazer loop com varios de 150, dai certo que funciona.

Link para o comentário
Compartilhar em outros sites

Use:

__CONFIG( INTIO & MCLRDIS & WDTDIS & PWRTEN);

#define _XTAL_FREQ 4000000

Procure la na pasta include do HT o arquivo do teu PIC. Abra ele que você encontrará todos os bits de configuração.

EDIT: o HT tem um probleminha que o delay em ms costuma nao funcionar acima de 150ms, aconselho a fazer loop com varios de 150, dai certo que funciona.

Muito obrigado Edu pela dica!

Porém no HiTech a instrução

__CONFIG( INTIO & MCLRDIS & WDTDIS & PWRTEN);

ficou como desconhecida...

Acho que o que falta pra mim é configurar o oscilador...que no caso quero deixar interno!

Alguém sabe como fazer?

Uso o PIC16F88.

Alguém poderia me mandar um codigo de exemlo pra mim testar meu projeto, tipo um "Hello Word!" no LCD?

Só me mandar o .hex e a configuração das ligações.

Link para o comentário
Compartilhar em outros sites

Cara, tu colocou dois (2) underlines antes? (_ _)-> sem espaço.

Isso pode dar erro. vou te mandar um codigo de pisca led bem simples com o HT funcionando e tudo certo com o PIC16F690. O código do teu pic é só isso mesmo? Porque nao encontrei nenhum assim nas bibliotecas do HT, somente 887 ou 88 + algo.

=======================

#include <htc.h>

__CONFIG( WDTDIS & PWRTEN & MCLRDIS & INTIO );

#define _XTAL_FREQ 4000000

void main(void)

{

ANSEL=0;

ANSELH=0;

TRISA=0;

TRISB=0;

TRISC=0;

while(1)

{

RC0=1;

__delay_ms(150);

__delay_ms(150);

__delay_ms(150);

RC0=0;

__delay_ms(150);

__delay_ms(150);

__delay_ms(150);

}

}

Link para o comentário
Compartilhar em outros sites

Cara, tu colocou dois (2) underlines antes? (_ _)-> sem espaço.

Isso pode dar erro. vou te mandar um codigo de pisca led bem simples com o HT funcionando e tudo certo com o PIC16F690. O código do teu pic é só isso mesmo? Porque nao encontrei nenhum assim nas bibliotecas do HT, somente 887 ou 88 + algo.

=======================

#include <htc.h>

__CONFIG( WDTDIS & PWRTEN & MCLRDIS & INTIO );

#define _XTAL_FREQ 4000000

void main(void)

{

ANSEL=0;

ANSELH=0;

TRISA=0;

TRISB=0;

TRISC=0;

while(1)

{

RC0=1;

__delay_ms(150);

__delay_ms(150);

__delay_ms(150);

RC0=0;

__delay_ms(150);

__delay_ms(150);

__delay_ms(150);

}

}

Olá Edu!

Sim, coloquei identico ao seu exemplo.

Modifiquei algumas coisas porque tinha algumas instruções que o 16F88 não tinha. Ficou assim:

#include <htc.h>
__CONFIG( WDTDIS & PWRTEN & MCLRDIS & INTIO );
#define _XTAL_FREQ 4000000

void main(void)
{
ANSEL=0;
//ANSELH=0;
TRISA=0;
TRISB=0;

while(1)
{
RB0=1;
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
RB0=0;
__delay_ms(150);
__delay_ms(150);
__delay_ms(150);
}
}

Então ocorreram essas mensagens de erro:

Error [800] lcd.as; 45. undefined symbol "INTIO"

Error [800] lcd.as; 45. undefined symbol "MCLRDIS"

Error [800] lcd.as; 45. undefined symbol "PWRTEN"

Error [800] lcd.as; 45. undefined symbol "WDTDIS"

Link para o comentário
Compartilhar em outros sites

Eae pessoal!

Consegui resolver, porém paguei minha lingua...heheh

Fiz o mesmo projeto na versão mais atual do MikroC e funcionou!

Estranho que a 1 ano atras fiz a mesma coisa só que numas versões anteriores e num funcionava nem a pau. Bom num deu no HiTech mas deu no MikroC :lol:

Fico assim:


// LCD module connections
sbit LCD_RS at RA6_bit;
sbit LCD_EN at RB4_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISA6_bit;
sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

}

void main()
{
CMCON = 0; //desabilita comparador

Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

while(1)
{
Lcd_out(1,4,"Deu certo hahaha");
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR); // Clear display
}
}

Obrigado a todos pela força!

Link para o comentário
Compartilhar em outros sites

Cara, o curioso é que nao encontro a biblioteca desse teu PIC. Quando fizer o projeto, use o Project Wizzard, e assegure que o device é correto assim como o compilador. Eu creio que o problema está na identificação do PIC. Baixe a versão mais recente do MPLAB também. Uso o HT e consigo tudo, o unico problema como disse é o delay.

Link para o comentário
Compartilhar em outros sites

Cara, o curioso é que nao encontro a biblioteca desse teu PIC. Quando fizer o projeto, use o Project Wizzard, e assegure que o device é correto assim como o compilador. Eu creio que o problema está na identificação do PIC. Baixe a versão mais recente do MPLAB também. Uso o HT e consigo tudo, o unico problema como disse é o delay.

Pois é Edu, o lance que mesmo usando o Project Wizard, não configura o tipo Osc. Que no meu caso eu quero usar interno. No MikroC configurou. Vou prosseguir nele por enquanto...agora o problema realmente é esse...num sei o porque o programa roda mas fica lento...no Proteus roda rapidão, quando eu gravo e ligo o PIC o programa executa lentamente. Tipo eu fiz um programa que contava os segundos...no Proteus mostrava contando certinho, mas no LCD fico bem lento a contagem...já tentei colocar o PIC com 4Mhz e 8Mhz, mas fica a mesma coisa...alguém se habilita a desvendar esse mistério?

Link para o comentário
Compartilhar em outros sites

Cara, me passa o código completo desse teu PIC. Eu preciso encontrar a biblioteca dele no HT. Lá tem todas as funções, configurações e registradores que podem ser acessados do teu MCU. Certeza que estas com a última versão do MPLAB? Fico no aguardo do código do MCU.

Link para o comentário
Compartilhar em outros sites

Cara, me passa o código completo desse teu PIC. Eu preciso encontrar a biblioteca dele no HT. Lá tem todas as funções, configurações e registradores que podem ser acessados do teu MCU. Certeza que estas com a última versão do MPLAB? Fico no aguardo do código do MCU.

Edu

Uma duvida, no MPlaB você está usando o hi-tech tool... usando em C, ou está usando o CCS que também é programado em C?

Valeu

Tiago

Link para o comentário
Compartilhar em outros sites

Cara, me passa o código completo desse teu PIC. Eu preciso encontrar a biblioteca dele no HT. Lá tem todas as funções, configurações e registradores que podem ser acessados do teu MCU. Certeza que estas com a última versão do MPLAB? Fico no aguardo do código do MCU.

Aí Edu, beleza?!

Descobri o problema...acho que vai resolver seu caso também!

O problema que fazia ficar lento é porque eu não configurava o registrador

OSCCON. Para 4Mhz coloquei assim: OSCCON = 01100110;

Agora o programa fico num tiro! Perfeito!

Experimenta ae e me fala!

O código era só aquele mesmo!

Link para o comentário
Compartilhar em outros sites

Eu uso o High-Tech (HT). Tudo bem, da pra modificar la no OSCCON, mas quando você usa o config, ele deveria automaticamente configurar o oscilador para interno, e o padrão do oscilador interno é de 4MHz. De novo, qual versão está usando do MPLAB e qual o código completo do PIC.

Link para o comentário
Compartilhar em outros sites

Eu uso o High-Tech (HT). Tudo bem, da pra modificar la no OSCCON, mas quando você usa o config, ele deveria automaticamente configurar o oscilador para interno, e o padrão do oscilador interno é de 4MHz. De novo, qual versão está usando do MPLAB e qual o código completo do PIC.

MPLAB IDE v8.66

O código...


#include <htc.h>
#include "lcd.h"
#include "lcd.c"

void
main(void)
{
lcd_init();
lcd_goto(0); // select first line
char * vet = "Teste LCD";
char * vet2 = " OK";

while(1)
{
lcd_puts(vet);
__delay_ms(2000);
lcd_goto(0x40); // Select second line
lcd_puts(vet2);
__delay_ms(2000);
lcd_clear();

}
}

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