Você está na página 1de 4

/*

* FileName: Lista 2 - Conversor AD


* Dependencies: Veja a seção de Includes
* Processor: PIC18F4550
* Compiles: MPLAB X v3.65 + XC8 1.40
* Company: FATEC - Santo André
* Author:
* Date: 06/09/2021
* Software License Agreement: Somente para fins didáticos
*
* File Description: Gerar um programa que apresente um valor de tensão em uma
* uma entrada analógica em ponto fixo , apresentar um percentual de 0 a 100%
* e demonstrar um bargraph a cada 0,31V.
* *******************************************************************************
* Change History:
*
*
* Created on 05 de Setembro de 2021, 13:22
********************************************************************
*/

// Includes do Compilador

#include <xc.h>
#include <stdio.h>
#include <p18f4550.h>

//includes do Projeto

#include "Config.h"
#include "config_4550.h"
#include "displayLCD.h"
#include "adc.h"

// Protótipos das Funções

void delay_ms(unsigned int tempodeAtraso);

// Definições dos Apelidos das Variáveis do PIC

/*****************************************************************************/

void main()
{

// Definição dos textos apresentação


const unsigned char nome[] = "Gabriel Santos";
const unsigned char texto_0[] = "FATEC S.A 2021 ";
const unsigned char texto_1[] = "Conversor AD ";
const unsigned char limpa[] = " ";

// Definição das funções de trabalho do projeto


unsigned long valorAN0 = 0;
unsigned long tensao = 0;
unsigned int calculo = 0;
unsigned char dezena = 0;
unsigned char unidade = 0;
unsigned char casadecimal_tensao = 0;
unsigned char porcentagem = 0;
unsigned char casadecimal_porcentagem1 = 0;
unsigned char casadecimal_porcentagem2 = 0;
unsigned int bargraph = 0;
unsigned int calculo_bargraph = 0;
unsigned char colunaLCD = 1;

configuraADC(3); //Prepara e inicia o conversor AD

ConfiguraLCD(); //Prepara e inicia o Display


delay_ms(1);

// Tela de Saudação do LCD


DesligaCursor();
PosicaoCursorLCD(1,1);
EscreveFraseLCD(texto_0);
PosicaoCursorLCD(2,1);
EscreveFraseLCD(nome);
delay_ms(2000);
PosicaoCursorLCD(2,1);
EscreveFraseLCD(texto_1);
delay_ms(3000);
PosicaoCursorLCD(2,1);
EscreveFraseLCD(limpa);
PosicaoCursorLCD(1,1);
EscreveFraseLCD(limpa);

while(1)

valorAN0 = lerADC(0); // Lê o potenciometro


tensao = (valorAN0*48875)/1000000; // Realiza o calculo da tensão, onde
// 5 /1023 = 0.0048875.
calculo = tensao;

// Mostra o valor com uma casa decimal e virgula


PosicaoCursorLCD(1,1);
unidade = calculo%10 + 0x30;
dezena = calculo/10 + 0x30;
EscreveCaractereLCD(dezena);
EscreveCaractereLCD(0x2C);
EscreveCaractereLCD(unidade);

// Mostra o valor agora com duas casas decimais


PosicaoCursorLCD(1,4);
casadecimal_tensao = unidade%10 + 0x30;
EscreveCaractereLCD(casadecimal_tensao);
// Realiza o Calculo de quantos porcento da tensão de 5V o programa está
// usando, alternando entre 0 a 100% e da uma precisão de duas casas
// depois da virgula.
PosicaoCursorLCD(1,9);
porcentagem = (valorAN0*9775)/100000;//Realiza o Calculo da Porcentagem
// 100/1023 = 0.09775.

casadecimal_porcentagem1= porcentagem%10 + 0x30; // Primeira casa decimal.


casadecimal_porcentagem2= casadecimal_porcentagem1%10 + 0x30;//Segunda casa
decimal.
EscreveInteiroLCD(porcentagem);
EscreveCaractereLCD(0x2C);
EscreveCaractereLCD(casadecimal_porcentagem1);
EscreveCaractereLCD(casadecimal_porcentagem2);

// Simbolo da porcentagem (%)


PosicaoCursorLCD(1,14);
EscreveCaractereLCD(0x25);

// com o valor de while (1) , não é necessario usar a função Do - While


// Porque , o while (1) ja faz a função de repetição por si só.

//******************************************************************************
// Esta função é usada para gerar um delay programável, cuja base de tempo é de
// 1 ms. Assim, se você colocar delay_ms(500), ele esperará um tempo de 500 ms
// para seguir o programa.
//******************************************************************************
void delay_ms(unsigned int tempodeAtraso) // Gera delay para o novo compilador
{
while (--tempodeAtraso)
{
__delay_ms(1);
}
}

Você também pode gostar