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

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
MezaqueJr1985

Voltimetro e Amperimetro no PIC18f452 baseado no C18 Compiler

Recommended Posts

]

Olá pessoal

Vi muito tópicos sobre voltímetro e amperímetro aqui no CBH. Eu comecei o projeto usando o CCS C compiler e consegui fazer funcionar, mas tive problemas na hora de gravar o microcontrolador. Agora resolvi usar o C18 compiler e consegui fazer um led pisca ^^. Gravei e funcionou perfeitamente. Agora estou tentando programar nessa sintaxe mais ela é bem diferente do CCS C e estou tomando um surra feia do bichano aqui.

Eu estudei o datasheet do pic 18f452 e estou com dificuldade em entender como configura o ADCON0 E o ADCON1.

Eu estou usando o:

MPLAB v8.83

MCC v3.40

E para simulação o proteus 7.7.

Entendi que tenho q fazer algo como:

C18
ADCON0= 0b00000000 // seleciono o canal. NO caso eu quero um canal para medir a tensão e outro pra medir a corrente.


CCS C
SET_ADC_CHANNEL(0); // seleciona o canal 0
.
.
SET_ADC_CHANNEL(1); // seleciona o canal 1.

Como faço isso no C18?

Estou usando um pic18f452

Cristal externo de 4Mhz

Vref = VDD e Vss (5v-0v)

No datasheet vi que para selecionar os canal 0 e 1 é algo assim:

bit 5-3 CHS2:CHS0: Analog Channel Select bits
000 = channel 0, (AN0)
001 = channel 1, (AN1)
....

Eu fiz um robozinho com todos os materiais que encontrei nos blogs e foruns e ficou mais ou menos assim:

Nome do arquivo: firmware voltag meter.c

Data: 01 de fevereiro de 2012

Versao: 1.0

MPLAB IDE: v8.83

MCC v3.40

Autor: Mezaque Lima

*********************************************************************/
#include <p18f452.h> //Diretiva de compilação.
#include <delays.h> //Diretiva de compilação.
#include <stdio.h> //Diretiva de compilação.
#include <adc.h> //Diretiva de compilação.
#pragma config OSC = HS //Configuração do oscilador à cristal.
#pragma config WDT = OFF //Desabilita o Watchdog Timer (WDT).
#pragma config PWRT = OFF //Habilita o Power-up Timer (PWRT).
#pragma config BOR = ON //Brown-out Reset (BOR) habilitado somente no hardware.
#pragma config LVP = OFF //Desabilita o Low Voltage Program.
#define ADC = 10 //Configura o compilador para trabalhar com A/D 10 bits

//********************************************************************
//protótipos de funções
void Inic_Regs (void);
void Configura_AD (void);
int Conv_AD (void);


//********************************************************************
//variáveis globais
//int ???? [?];
//float ?? [?];
//********************************************************************
//definições

#define result_A PORTBbits.RB0 //Defini o portbit RB0 com o nome de result_A.
//#define ???????? PORTCbits.RC1
//********************************************************************
void main(void){ //função main

int valortensao; //
float tensão=0, AD_Result=0; //declaração de variável local inicializada
//**********************************
Inic_Regs (); //configurar SFRs
//**********************************/
Configura_AD();
//**********************************
//rotina principal
while (1){
Delay10KTCYx( 50);
ConvertADC(); //inicializa a conversão
while( BusyADC() ); //Espera a conversão do ADC
valortensao = ReadADC(); // Lê o resultado e coloca na variavel valortensao
CloseADC(); //Disable A/D converter
tensão = (valortensao * 0.0048828125);
if(tensão >= 4.5 && tensão <= 5.5) //Se a tensão for menor ou igual a 4.5v e menor ou igual a 5.5v
result_A = 1; //coloca o pino B0 em nível lógico alto - ligado
else
result_A = 0; //coloca o pino B0 em nivel lógico baixo - desligado

}// Fim do while
} // Fim da função principal
//*******************************************************************
/*Esta funcao inicializa os resgistradores SFRs.*/
void Inic_Regs (void){
TRISA = 0x01; //PORTA saída
TRISB = 0x01; //PORTB saída
TRISC = 0x00; //PORTC saída
TRISD = 0x00; //PORTD saída
TRISE = 0x00; //PORTE saída
ADCON1 = 0x0F; //configura pinos dos PORTA e PORTE como digitais
PORTA = 0; //limpa PORTA
PORTB = 0; //limpa PORTB
PORTC = 0; //limpa PORTC
PORTD = 0; //limpa PORTD
PORTE = 0; //limpa PORTE
}//********************************************************************
//esta função configura o conversor A/D
void Configura_AD(void){
ADCON0=0b00000001; //canal AN0 selecionado<5:2>
//Módulo conversor ligado<1>
ADCON1=0b00001110; //Vref- = VSS<5>
//Vref+ = VDD<4>
//pino RA0/AN0 analógico e demais pinos digitais<3:0>*/
//resultado justificado à direita<7>
//Tempo de aquisição de 12TAD<5:3>
//TAD = 1µs<2:0>
}//********************************************************************
//esta função efetua uma conversão A/D
int Conv_AD (void){
int Result_AD; //declaração de variável local
ADCON0bits.GO = 1; //inicia conversão
while (ADCON0bits.GO); //aguarda finalizar conversão
Result_AD = (((int)ADRESH)<<8)|(ADRESL); //obtém valor da conversão
return Result_AD; //retorna valor da conversão
}

desde já agradeço o tempo e atenção.

Pois ficou extenso esse tópico.

abraço

Editado por Bcpetronzio
Inserir CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara usa o microC pelo que li esse C18 compiler e o puro C mesmo assim os outros que entendem mais dizem mas o microC é fácil como o CCS é bem melhor também

Compartilhar este post


Link para o post
Compartilhar em outros sites
cara usa o microC pelo que li esse C18 compiler e o puro C mesmo assim os outros que entendem mais dizem mas o microC é fácil como o CCS é bem melhor também

O C18 é muito melhor em otimização do código.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Eu já vi um pouco de mikro C e gostei assim como ccs c. Mas a ferramenta que tenho nas mãos no momento é o C18.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Geralmente se programa coisas simples no MikroC e CCS,por isso talvez tenha que começar do zero essa aplicação.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    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

    ×