Tags:
Salve Eustaquio Luiz Ferreira;
Fiz algo similar ao seu projetinho, alguns meses atrás, porém, utilizando o PIC18F452 e PIC16F877A, programei através do software MikroC Pro for PIC (software da empresa Mikroeletronica).
No meu projeto o PIC 18F ou 16F recebia o valor de tensão linear referente a uma medição de temperatura, esse valor era disponibilizado noo pino 2 do PIC (Canal AD do PIC). Depois enviava o valor correspondente a temperatura convertida pelo AD do PIC, para o porta COM2 do Computador PC.
Acredito que a forma de programar o PIC184550 seja a mesma do PIC18452, a experiência que tenho no uso da USART dos PIC16 e 18F é através de estudo de apostilas pegas na internet, seria muito bom fazer um treinamento mas não tenho grana para fazer um treinamento, e como encontrei muito material usando o compilador MikroC resolvi adotar o mesmo, ao invés do excelente compilador C18, excelente compilador Hi-Tech ou CCS que não gosto muito.
Bem segue abaixo o código do meu projeto, baseado no compilador MikroC Pro
OBS: ABAIXO EM NEGRITO ESTÃO AS FUNÇÕES USADAS NO MIKROC PRO, PARA ENVIO DE CARACTER PELA PORTA SERIAL USART.
//=========================================================================================================================
/* Projeto Medidor de Temperatura de 0 a 150C ,exibindo Valor no Display LCD
Alfanumerico 16x2, envio do valor da temperatura medida para a porta Com 2 do computador PC, sensor linear utilizado LM35
Microcontrolador utilizado PIC16F877A ou PIC18F452
Autor: Alexandre Augusto*/
//============ Declaração dos Defines ==============================================================
# define Rs_LCD portc.rc4
# define En_LCD portc.rc5
//==================================================================================================
//
//============ Declaração de Protótipos das funções ================================================
LCD_Comando (char Com); // Declaração de Protótipos das funções
LCD_Letra (char Com);
LCD_Mensagem (char Texto[51]);
//==================================================================================================
//============ Funções criadas =====================================================================
LCD_Comando (char Com)
{/*char Valor;
Valor=Aux; */
Rs_LCD=0; PORTB=Com;/* PORTB recebe valor da variável Com*/ En_LCD=1; Delay_ms(1); En_LCD=0; }
LCD_Mensagem(char Texto[51])
{ int i=0;
do{ LCD_Letra(Texto[i]);
i++;
}while(Texto[i]!=0);
}
LCD_Letra(char Com)
{/*char Valor;
Valor=Aux; */
Rs_LCD=1; PORTB=Com;/* PORTB recebe valor da variável Com*/ En_LCD=1; Delay_ms(1); En_LCD=0; }
void main()
{
float Resultado_AD, Var_AUX, Tensao_Real, Tensao_Amostra, Aux ;
int Milhar, Centena, Dezena, Unidade, Cont=0 , j ;// A Declaração da variável deve ser feita antes da definição dos TRIS
//CUIDADO: SEMPRE A Declaração da variáveis deve ser feita antes da definição dos TRIS , isso para o compilador MikroC
char Serial[10];
//=========== Confgiurações de Entra/Saída ================================
TRISB=0b00000000; // configura PORTB como saída, está ligado nos pinos de de dados do Display LCD
TRISC=0b00000000;
TRISD=0b00000000; // rd0 e rd1 entradas, rd6 e rd7 saidas
//============ Configurações do A/D ========================================
INTCON=0b00000000; // Desabilita todas interrupções
ADCON1=0b00001110; /* ADMF=0 justificado a esquerda(usa 8 bits mais significati
vos,
PCFG3=1,PCFG=1,PCFG1=1,PCFG0=0 significa AN7 à AN1 Como
canais digitais , e AN0 como digital(Conversor A/D),
Vref+=VDD, Vref-=VSS, e sem Referênica externa.*/
ADCON0=0b10000001;/* ADCS1=1,ADCS2=0, significa Fosc/32
CH2=0,CH1=0,CH0=0, seleciona canal AD, no caso Canal 0
(RA0/AN0)
ADON=0 conversão Desligada, em 1 conversão ligada */
LCD_Comando(0x3c); // Sequência de incialização do LCD 20X2
LCD_Comando(0x3c);
LCD_Comando(0x3c);
LCD_Comando(0x3c);
LCD_Comando(8);
LCD_Comando(1);
LCD_Comando(6);
LCD_Comando(0x0c); // com 0x0c ao inves de 0x0f o cursor do LCD Fica apagado
LCD_Comando(1); // Limpa a tela do LCD
LCD_Comando(0x80); // Posiciona cursor LCD na 1º linha e 1º Coluna
while (1)
{
ADCON0.GO_DONE=1; /* Bit GO/DO do registrador ADCON0 setado, isso faz
a conversão ter início*/
do{
}while(ADCON0.GO_DONE==1); /* Fica travado esperando fim da conversão,
que ocorre quando o bit GO/DONE vai para 0 */
Resultado_AD=ADRESH; /* Variável Resul_AD recebe resultado da convesão, que
está armazenado no registrador ADRESH, o qual foi
justificado a esquerda, através de ADMF=0 . */
Var_AUX = Resultado_AD;
PORTD = Var_AUX ;
Aux=Resultado_AD;
/*
Tensao_Amostra=(4/204)*(Resultado_AD);
Tensao_Real=(28/4)*(Tensao_Amostra);
Tensao_Real= Tensao_Real*10;
Aux=Tensao_Real;
*/
Centena=0;
while(Aux>=100)
{ Aux=Aux-100;
Centena=Centena+1;
}
Dezena=0;
while(Aux>=10)
{ Aux=Aux-10;
Dezena=Dezena+1;
}
Unidade=0;
while(Aux>=1)
{ Aux=Aux-1;
Unidade=Unidade+1;
}
// LCD_Comando(1);
LCD_Comando(0x80); // Posiciona cursor na 1º linha do LCD alfanumérico 16X2
LCD_Mensagem ("Temperatura");
LCD_Comando(0xc0); // Posiciona cursor na 2º linha do LCD alfanumérico 16X2
LCD_Mensagem ("T = ");
Serial[0]= 0x23; /*Envia o Caracter jogo da velha, que indica inicio da comunição serial
# corresponde ao numero 0x23 da tabela ASCII*/
LCD_Letra (Centena+0x30); /* Exibe no Display LCD O Valor da casa das centenas na
forma do caracter char, simbolo da tabela ASCII */
Serial[1]= Centena+0x30;
LCD_Letra (Dezena+0x30); /* Exibe no Display LCD O Valor da casa das centenas na
forma de caracter char, símbolo da tabela ASCII*/
Serial[2]= Dezena+0x30;
// LCD_Letra (','); // Exibe a vírgula de por exemplo; 29,5 Volts
LCD_Letra (Unidade+0x30); /* Exibe no Display LCD O Valor da casa das unidades na
forma de caracter char, símbolo da tabela ASCII */
Serial[3]= Unidade+0x30;
LCD_Mensagem (" C");
Cont++;
if (Cont==40)
{
Cont=0;
Soft_UART_Init(&PORTC, 7, 6, 9600, 0); // Configura pinos RC7, RC6 do PIC , Bautrate 9600bps, sem paridade
j=0;
do{
Soft_UART_Write(Serial[j]); //Envia esse char pela serial. // /
j++;
}while(j<4);
}
}
}
//=========================================================================================================================
Segue em anexo uma apostila que ensina a usar as funções prontas do MikroC para comunicação serial (no MikroC Pro muda pouca coisa, é quase igua o material da apostila), ler a partir da página 48. O ideal é ler o datasheet do PIC18F4550 entender o funcionamento dos registradores que controlam a USART, e saber como programar esse registradores no compilador C, a ser usado, seja qual for.
Espero ter ajudado
ABS
Alexandre Augusto
Alexandre, valeu pelas dicas. Vou ler a apostila e analisar o se código.
Obrigado,
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por