Está en la página 1de 8

Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 1

“Diseño de un Multímetro digital basado en el


procesador DSPIC33F”
Microcontroladores y Sistemas Embebidos
ACOSTA OLIVO EDUARDO JESUS ANTONIO

BALLENA FALEN, CRISTHIAN ELMER

MARCELO CHAVARRIA JOSUE EMIR

PALOMINO CONDE JEAN CARLOS


Fecha de presentación: 7 de agosto de 2020
Profesor: Astocondor Villar Jacob II. MARCO TEORICO
RESUMEN: A lo largo de los años, en el área 1. COMPONENTES ELECTRONICOS
electrónica y eléctrica principalmente, se ha
Termistor NTC: Son resistencias de coeficiente
necesitado de varios instrumentos, ya sean
de temperatura negativo, constituidas por un
analógicos o digitales, tales como, voltímetro de
cuerpo semiconductor cuyo coeficiente de
corriente alterna o para corriente directa, para medir
temperatura sea elevado, es decir, su
caídas de tensión; vatímetro, usado para medir
conductividad crece muy rápidamente con la
potencia; ohmímetro, para medir la resistencia;
temperatura.
amperímetro, para medir corrientes, etc.
En este trabajo nos centraremos en la realización de
un multímetro digital, el cual contará con
instrumentos como, voltímetro Ac y Dc,
amperímetro, ohmímetro, además le agregaremos
una función, que será de medidor de temperatura.
Para la realización de este dispositivo, contaremos
con el dsPic 33FJ32MC204; el cual conoceremos
sus funciones y diversas aplicaciones; que nos DsPIC33FJ32MC204: Controlador de señal
servirá como controlador del nuestro dispositivo. digital dsPIC33F de la familia de control de
PALABRAS CLAVE: MPLAB, Proteus, Pantalla motores de 16 bits en paquetes de recuento de
LCD, Sensor – Termistor NTC, Puerto serial pines bajos con 2 generadores PWM con bases
de tiempo independientes y la nueva capacidad
I. OBJETIVOS
de selección de pines periféricos.
 Conocer el funcionamiento de los
microcontroladores DsPIC
 Observar cómo son distintos los parámetros para
la medición de voltaje, intensidad, temperatura,
etc.
 Demostrar el funcionamiento y aplicaciones a la
electrónica de este tipo de configuración de
microchips.


Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 2

Pantalla LCD: es una pantalla delgada y plana 2. SOFTWARE


formada por un número de píxeles en color o MPLAB X: es un software profesional
monocromos colocados delante de una fuente de implementado por la empresa Microchip.
luz o reflectora. A menudo se utiliza en MPLAB IDE es utilizado como un poderoso
dispositivos electrónicos de pilas, ya que utiliza auxiliar para el desarrollo de sistemas basados en
cantidades muy pequeñas de energía eléctrica. los microcontroladores PIC.

Proteus: es una aplicación para la ejecución de


Fuente de Voltaje: Es una fuente de voltaje que
proyectos de construcción de equipos
suministra voltaje constante a un circuito a pesar
electrónicos en todas sus etapas: diseño del
de cualquier otra condición en el circuito.
esquema electrónico, programación del software,
construcción de la placa de circuito impreso,
simulación de todo el conjunto, depuración de
errores, documentación y construcción.

III. MATERIALES
 DsPIC33FJ32MC204
 Capacitores
 Pantalla Lcd.16x2
 Potenciómetro 5K.
 Resistencia 220 Ω.
 Jumper’s.
 Protoboard.
 Fuente de Voltaje 100V – 1A AC
 Selector 8 posiciones
 buzzer
Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 3

IV. PROCEDIMIENTO adc3();


WriteCmdXLCD(CLEAR_XLCD);
Procedemos a mostrar el código principal encargado
XLCDgotoXY(0,0);
del funcionamiento del proyecto
putrsXLCD("VOLTIMETRO DC");
#include "config.h"
AD1CON1bits.ADON = 1;
#include "reloj.h"
AD1CON1bits.SAMP = 1;
#include <libpic30.h>
__delay_ms(10);
#include "xlcd.h"
AD1CON1bits.SAMP = 0;
#include <p33FJ32MC204.h>
while(!AD1CON1bits.DONE);
#include <stdio.h>
AD1CON1bits.DONE = 0;
#include <math.h>
result1 = ADCBUF0;
char vector[4] = "";
AD1CON1bits.ADON = 1;
int result = 0;
AD1CON1bits.SAMP = 1;
int result1 = 0;
__delay_ms(10) ;
float vm = 0;
AD1CON1bits.SAMP = 0;
float vmV = 0;
while(!AD1CON1bits.DONE);
float vmA = 0;
AD1CON1bits.DONE = 0;
int VA=0;
result = ADCBUF0;
float temp=0;
vmV = (float)result*100.0/1024.0;
float ohm=0;
sprintf(vector,"%.2f", vmV);
float rAux=10000.0;
XLCDgotoXY(1,0);
float beta=3977.0;
putrsXLCD("T: V");
float temp0=298.0;
XLCDgotoXY(1,7);
float r0=20000.0;
putrsXLCD(vector);
void adc2 (void);
__delay_ms(1000) ;
void adc3 (void);
}
void adc4 (void);
//AMPERIMETRO DC
void termometro (void);
if(PORTBbits.RB14==1){
int main(){
PORTBbits.RB8=0;
TRISC=0X0000;
PORTBbits.RB9=0;
XLCDInit();
PORTBbits.RB10=0;
WriteCmdXLCD(CLEAR_XLCD);
PORTBbits.RB11=0;
__delay_ms(10);
PORTBbits.RB12=0;
XLCDgotoXY(0,0);
PORTBbits.RB13=0;
putrsXLCD(" MULTIMETRO ");
PORTBbits.RB15=0;
XLCDgotoXY(1,0);
adc3(); //Inicia el ADC
putrsXLCD(" DIGITAL v1.0 ");
WriteCmdXLCD(CLEAR_XLCD);
__delay_ms(2000);
XLCDgotoXY(0,0);
WriteCmdXLCD(CLEAR_XLCD);
putrsXLCD("AMPERIMETRO DC");
__delay_ms(10);
AD1CON1bits.ADON = 1;
while(1){
AD1CON1bits.SAMP = 1;
//VOLTIMETRO DC
__delay_ms(10);
if(PORTBbits.RB15==1){
AD1CON1bits.SAMP = 0;
PORTBbits.RB8=0;
while(!AD1CON1bits.DONE);
PORTBbits.RB9=0;
AD1CON1bits.DONE = 0;
PORTBbits.RB10=0;
result1 = ADCBUF0;
PORTBbits.RB11=0;
AD1CON1bits.ADON = 1;
PORTBbits.RB12=0;
AD1CON1bits.SAMP = 1;
PORTBbits.RB13=0;
__delay_ms(10) ;
PORTBbits.RB14=0;
AD1CON1bits.SAMP = 0;
Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 4

while(!AD1CON1bits.DONE); putrsXLCD(vector);
AD1CON1bits.DONE = 0; __delay_ms(1000) ;
result = ADCBUF0; }
//Calculos hechos para hallar el //VOLTIMETRO AC
amperaje if(PORTBbits.RB12==1){
vmA = PORTBbits.RB8=0;
((float)result1*100/1024.0)*0.0397+0.0042; PORTBbits.RB9=0;
sprintf(vector,"%.2f", vmA); PORTBbits.RB10=0;
XLCDgotoXY(1,0); PORTBbits.RB11=0;
putrsXLCD("T: mA"); PORTBbits.RB13=0;
XLCDgotoXY(1,7); PORTBbits.RB14=0;
putrsXLCD(vector); PORTBbits.RB15=0;
__delay_ms(1000) ; adc3(); //Inicia el ADC
} WriteCmdXLCD(CLEAR_XLCD);
//WATTIMETRO DC XLCDgotoXY(0,0);
if(PORTBbits.RB13==1){ putrsXLCD("VOLTIMETRO AC");
PORTBbits.RB8=0; AD1CON1bits.ADON = 1;
PORTBbits.RB9=0; AD1CON1bits.SAMP = 1;
PORTBbits.RB10=0; __delay_ms(10);
PORTBbits.RB11=0; AD1CON1bits.SAMP = 0;
PORTBbits.RB12=0; while(!AD1CON1bits.DONE);
PORTBbits.RB14=0; AD1CON1bits.DONE = 0;
PORTBbits.RB15=0; result1 = ADCBUF0;
adc3(); AD1CON1bits.ADON = 1;
WriteCmdXLCD(CLEAR_XLCD); AD1CON1bits.SAMP = 1;
AD1CON1bits.ADON = 1; __delay_ms(10) ;
AD1CON1bits.SAMP = 1; AD1CON1bits.SAMP = 0;
__delay_ms(10); while(!AD1CON1bits.DONE);
AD1CON1bits.SAMP = 0; AD1CON1bits.DONE = 0;
while(!AD1CON1bits.DONE); result = ADCBUF0;
AD1CON1bits.DONE = 0; vmV = (float)result*104.0/1024.0;
result1 = ADCBUF0; sprintf(vector,"%.2f", vmV);
AD1CON1bits.ADON = 1; XLCDgotoXY(1,0);
AD1CON1bits.SAMP = 1; putrsXLCD("T: V");
__delay_ms(10) ; XLCDgotoXY(1,7);
AD1CON1bits.SAMP = 0; putrsXLCD(vector);
while(!AD1CON1bits.DONE); __delay_ms(1000) ;
AD1CON1bits.DONE = 0; }
result = ADCBUF0; //AMPERIMETRO AC
WriteCmdXLCD(CLEAR_XLCD); if(PORTBbits.RB11==1){
XLCDgotoXY(0,0); PORTBbits.RB8=0;
putrsXLCD("WATTIMETRO DC"); PORTBbits.RB9=0;
vmV = (float)result*100.0/1024.0; PORTBbits.RB10=0;
vmA = PORTBbits.RB12=0;
((float)result1*100/1024.0)*0.0397+0.0042; PORTBbits.RB13=0;
vm = vmV*vmA; PORTBbits.RB14=0;
sprintf(vector,"%.2f", vm); PORTBbits.RB15=0;
XLCDgotoXY(1,0); adc3();
putrsXLCD("T: mW"); WriteCmdXLCD(CLEAR_XLCD);
XLCDgotoXY(1,7); AD1CON1bits.ADON = 1;
Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 5

AD1CON1bits.SAMP = 1; WriteCmdXLCD(CLEAR_XLCD);
__delay_ms(10); XLCDgotoXY(0,0);
AD1CON1bits.SAMP = 0; putrsXLCD("WATTIMETRO AC");
while(!AD1CON1bits.DONE); vmV = (float)result*104.0/1024.0;
AD1CON1bits.DONE = 0; vmA =
result1 = ADCBUF0; ((float)result1*104/1024.0)*0.1007+1.0412;
AD1CON1bits.ADON = 1; vm = vmV*vmA;
AD1CON1bits.SAMP = 1; sprintf(vector,"%.2f", vm);
__delay_ms(10) ; XLCDgotoXY(1,0);
AD1CON1bits.SAMP = 0; putrsXLCD("T: mW");
while(!AD1CON1bits.DONE); XLCDgotoXY(1,7);
AD1CON1bits.DONE = 0; putrsXLCD(vector);
result = ADCBUF0; __delay_ms(1000) ;
WriteCmdXLCD(CLEAR_XLCD); }
XLCDgotoXY(0,0); //OHMIMETRO
putrsXLCD("AMPERIMETRO AC"); if(PORTBbits.RB9==1){
vmA = PORTBbits.RB8=0;
((float)result1*104/1024.0)*0.1007+1.0412; PORTBbits.RB10=0;
sprintf(vector,"%.2f", vmA); PORTBbits.RB11=0;
XLCDgotoXY(1,0); PORTBbits.RB12=0;
putrsXLCD("T: mA"); PORTBbits.RB13=0;
XLCDgotoXY(1,7); PORTBbits.RB14=0;
putrsXLCD(vector); PORTBbits.RB15=0;
__delay_ms(1000) ; adc2();
} WriteCmdXLCD(CLEAR_XLCD);
//WATTIMETRO AC XLCDgotoXY(0,0);
if(PORTBbits.RB10==1){ putrsXLCD("OHMIMETRO");
PORTBbits.RB8=0; AD1CON1bits.ADON = 1;
PORTBbits.RB9=0; AD1CON1bits.SAMP = 1;
PORTBbits.RB11=0; __delay_ms(10) ;
PORTBbits.RB12=0; AD1CON1bits.SAMP = 0;
PORTBbits.RB13=0; while(!AD1CON1bits.DONE);
PORTBbits.RB14=0; AD1CON1bits.DONE = 0;
PORTBbits.RB15=0; result = ADCBUF0;
adc3(); ohm = (float)(1024.0/result1-
WriteCmdXLCD(CLEAR_XLCD); 1.0)*1000.0;
AD1CON1bits.ADON = 1; if(ohm<10){
AD1CON1bits.SAMP = 1; TRISBbits.TRISB2=0;
__delay_ms(10); PORTBbits.RB2=1;
AD1CON1bits.SAMP = 0; sprintf(vector,"%.2f", ohm);
while(!AD1CON1bits.DONE); XLCDgotoXY(1,0);
AD1CON1bits.DONE = 0; putrsXLCD("T: ohm");
result1 = ADCBUF0; XLCDgotoXY(1,7);
AD1CON1bits.ADON = 1; putrsXLCD(vector);
AD1CON1bits.SAMP = 1; __delay_ms(1000) ;
__delay_ms(10) ; }else{
AD1CON1bits.SAMP = 0; if(ohm<1000){
while(!AD1CON1bits.DONE); PORTBbits.RB2=0;
AD1CON1bits.DONE = 0; sprintf(vector,"%.2f", ohm);
result = ADCBUF0; XLCDgotoXY(1,0);
Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 6

putrsXLCD("T: ohm"); AD1CON1bits.SAMP = 0;


XLCDgotoXY(1,7); while(!AD1CON1bits.DONE);
putrsXLCD(vector); AD1CON1bits.DONE = 0;
__delay_ms(1000) ; result = ADCBUF0;
}else{ termometro();
if(ohm<1000000){ sprintf(vector,"%.2f", temp);
ohm=ohm/1000.0; XLCDgotoXY(1,0);
sprintf(vector,"%.2f", ohm); putrsXLCD("T: C");
XLCDgotoXY(1,0); XLCDgotoXY(1,8);
putrsXLCD("T: Kohm"); putrsXLCD(vector);
XLCDgotoXY(1,7); __delay_ms(1000) ;
putrsXLCD(vector); }
__delay_ms(1000) ; }
}else{ }
ohm=ohm/1000000.0; void adc2 (void){
sprintf(vector,"%.2f", ohm); TRISA = 0x0002;
XLCDgotoXY(1,0); AD1PCFGL = 0xFFFF;
putrsXLCD("T: AD1CON1bits.AD12B=0;
Mohm"); AD1CON1bits.ASAM=0;
XLCDgotoXY(1,7); AD1CON1bits.SSRC=0;
putrsXLCD(vector); AD1CHS0bits.CH0NA =0;
__delay_ms(1000) ; AD1CHS0bits.CH0SA =1;
} AD1CON2bits.CSCNA =0;
} AD1CON2bits.VCFG =0;
} AD1CON2bits.BUFM =0;
} AD1CON2bits.SMPI =0;
//TERMOMETRO AD1CON2bits.ALTS =0;
if(PORTBbits.RB8==1){ AD1CON3bits.ADRC =0;
PORTBbits.RB9=0; AD1CON3bits.ADCS =21;
PORTBbits.RB10=0; }
PORTBbits.RB11=0; void adc3 (void){
PORTBbits.RB12=0; TRISB = 0x0001;
PORTBbits.RB13=0; AD1PCFGL = 0xFFFF;
PORTBbits.RB14=0; AD1CON1bits.AD12B=0;
PORTBbits.RB15=0; AD1CON1bits.ASAM=0;
adc4(); AD1CON1bits.SSRC=0;
AD1CON1bits.ADON = 1; AD1CHS0bits.CH0NB =0;
WriteCmdXLCD(CLEAR_XLCD); AD1CHS0bits.CH0SB =2;
XLCDgotoXY(0,0); AD1CON2bits.CSCNA =0;
putrsXLCD("TEMPERATURA"); AD1CON2bits.VCFG =0;
AD1CON1bits.ADON = 1; AD1CON2bits.BUFM =0;
AD1CON1bits.SAMP = 1; AD1CON2bits.SMPI =0;
__delay_ms(10); AD1CON2bits.ALTS =1;
AD1CON1bits.SAMP = 0; AD1CON3bits.ADRC =0;
while(!AD1CON1bits.DONE); AD1CON3bits.ADCS =21;
AD1CON1bits.DONE = 0; }
result1 = ADCBUF0; void adc4 (void){
AD1CON1bits.ADON = 1; TRISB = 0x0002;
AD1CON1bits.SAMP = 1; AD1PCFGL = 0xFFFF;
__delay_ms(10) ; AD1CON1bits.AD12B=0;
Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 7

AD1CON1bits.ASAM=0;  El amperímetro digital para el caso de


AD1CON1bits.SSRC=0; corriente alterna mide como mínimo 0 A y
AD1CHS0bits.CH0NB =0; como máximo 11.5 mA, en cambio, para
AD1CHS0bits.CH0SB =3; corriente continua mide como mínimo 0 A y
AD1CON2bits.CSCNA =0; como máximo 3.97 mA. Para ambos casos
AD1CON2bits.VCFG =0; tiene un margen de error de ±0.2%.
AD1CON2bits.BUFM =0;  El ohmímetro digital mide como mínimo 0Ω
AD1CON2bits.SMPI =0; y como máximo 1MΩ.
AD1CON2bits.ALTS =1;  El termómetro digital mide como mínimo
AD1CON3bits.ADRC =0; -50°C y como máximo 400°C.
AD1CON3bits.ADCS =21;  En el voltímetro, amperímetro y vatímetro
} (AC), la medición no era exacta, por eso en
void termometro (void){ la programación lo corregimos sumando la
result = ADCBUF0; caída de voltaje que había en el puente
vm = (float)result*5/1024.0; diodo.
float rntc=rAux/((5/vm)-1); VII. BIBLIOGRAFÍA
temp=beta/(log(rntc/r0)+(beta/temp0));
temp=temp-273.15; [1] MICROCHIP dsPIC33FJ3216MC202/204
} and dsPIC33FJ16MC304 Data Sheet.
[Consulta 31-07-2020]. Disponible en:
http://ww1.microchip.com/downloads/en/D
V. SIMULACIÓN eviceDoc/70283J.pdf
El circuito está simulado en la plataforma
Proteus [2] Robert Boylestad y Louis Nashelsky.
Electrónica: Teoría de Circuitos y
Dispositivos Electrónicos. 10ma Edición.
Prentice Hall, 2009.
ISBN: 9786074422924

[3] Jhon J. Fuente de 12V sin transformador.


Disponible en: https://unicrom.com/fuente-
de-12-vdc-sin-transformador/

[4] Albert Malvino y David J. Bates.


Principios de Electrónica. 7ma Edición.
Mc Graw Hill, 2007.
ISBN: 9788448156190
VI. CONCLUSIONES
 El Dspic33fj32mc204 ofrece soluciones [5] Angulo Usategui José María, Etxebarría
económicas y versátiles para el diseño y Ruiz Aritza y Trueba Parra Iván.
construcción de proyectos que requieran Microcontroladores dsPIC. Diseño práctico
adquisición de datos, además de poder de aplicaciones. 1era Edición. McGraw-
realizar operaciones de suma, resta y Hill Interamericana de España, 2006.
multiplicación y acumulación de forma ISBN: 9788448151560
rápida y eficiente, lo cual se acomoda a
nuestro proyecto. [6] TORRES, Luis. “Multímetro digital”.
 El voltímetro digital ya sea voltaje alterno o Tecnológico Nacional de México. Chiapas,
voltaje directo puede medir como mínimo 0 25 de mayo del 2016.
voltios y máximo 100 voltios, con un
margen de error de ±0.2%.
Universidad Nacional del Callao – Facultad de Ingeniería Eléctrica y Electrónica 8

[7] PAVON, Cintya; CRUZ, Oscar. “Historia, Nacional de Ingeniería. Managua,


manejo y aplicaciones de los controladores Nicaragua
digitales de señales DSPIC”. Universidad

También podría gustarte