Buenas noche, tardes o días, alguien puede decirme como leer los valores de resistencias, corriente y voltaje, uso el uart para que atravez de teraterm despliegue los valores, pero solo me sale la frase, mas no el resultado. Uso el MPLAB V5.40 con el XC16
Aqui el codigo:
#include "mcc_generated_files/system.h"
#include <stdio.h>
#define FCY 4000000
#include <libpic30.h>
void BintoBCDIntlectura_voltios(float unidad, int decimales);
void BintoBCDIntlectura_amperios(float unidad, int decimales);
void BintoBCDIntlectura_ohmios();
/* Variable para recoger la lectura de los puertos analogicos*/
float lectura;
/* Variables para calculas las medidas*/
float voltaje,corriente,ohmios;
/* Valor real de la resistencia de 22ohm para medir amperaje*/
float mediaTotal;
const volatile unsigned long R=19;
volatile unsigned int muestra;
volatile unsigned char i;
/*Funcion para la lectura de los voltios
Recibe la unidad en la que se va a medir y los decimales con los que mostrar el resultado
*/
void BintoBCDIntlectura_voltios(float unidad, int decimales)
{
if (lectura == 0)
{
lectura = LATBbits.LATB7;//input LATB7
/* Si no se esta leyendo nada */
printf("0 mV 0.00V");
}
else
{
voltaje = ((5 *(lectura)) / 1024);
printf("El voltaje es: ",(voltaje) * 3 * unidad, decimales);
}
__delay_ms(500);
}
/* Funcion para la lectura de los amperios
Recibe la unidad en la que se va a medir y los decimales con los que mostrar el resultado
*/
void BintoBCDIntlectura_amperios(float unidad, int decimales)
{
lectura =LATBbits.LATB5;//input LATBbits5
for (int i = 1; i <= 20; i++)
{
corriente = lectura * (5 / 1023.0) / R + corriente;
}
corriente =corriente / 20;
printf("La corriente es: ",corriente * unidad, decimales);
__delay_ms(500);
}
/* Funcion para la lectura de los ohmios */
void BintoBCDIntlectura_ohmios()
{
lectura = LATBbits.LATB4; //intput LATB4
/* Si no se esta leyendo nada */
if (lectura == 0)
{
printf("0 Ohms ");
}
ohmios =(lectura * 5 / 1024);
muestra =(10000 * (5 - ohmios) / ohmios);
mediaTotal = muestra;
/* Si la medida esta por debajo de 1000 la muestra en Ohms */
if (mediaTotal < 1000)
{
printf("La resistecia es de: ",mediaTotal * 1, 0);
printf("Ohms");
}
/* Si la medida esta por encima de 1000 la muestra en KOhms */
else {
printf("La resitencia es de:",mediaTotal * 0.001, 2);
printf("KOhms");
}
__delay_ms(500);
}
int main(void)
{
SYSTEM_Initialize();
while (1)
{
void BintoBCDIntlectura_voltios(float unidad, int decimales);
void BintoBCDIntlectura_amperios(float unidad, int decimales);
void BintoBCDIntlectura_ohmios();
}
return 1;
}
Lo adapte de arduino a pic