Está en la página 1de 3

Se pide

a) Realizar el diagrama de bloques o circuito para enviar los datos del medidor realizado
(P2) vía serial a una computadora , para registrar los datos
LCD1
LM016L

R1
10k

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
U1 +5v

E
1 4
MCLR RB0/CN4/RP0/C2IN-/AN2/EMUD1/PGD1

1
2
3

4
5
6

7
8
9
10
11
12
13
14
20 5
VCAP/VDDCORE RB1/CN5/RP1/C2IN+/AN3/EMUC1/PGC1
6
RB2/CN6/RP2/AN4
2 7
RA0/CN2/VREF+/AN0 RB3/CN7/RP3/AN5
3 11
RA1/CN3/VREF-/AN1 RB4/CN1/RP4/SOSCI
9 14
1

RA2/CN30/CLKI/OSCI RB5/CN27/RP5/ASDA1/EMUD3/PGD3
10 15
RA3/CN29/CLKO/OSCO RB6/CN24/RP6/ASCL1/EMUC3/PGC3
X1 12
RA4/CN0/T1CK/SOSCO RB7/CN23/RP7/INT0
16
CRYSTAL RB8/CN22/RP8/SCL1/PWM2H1/TCK
17 RV1
18 10k

15%
RB9/CN21/RP9/SDA1/PWM2L1/TDO
2

21
RB10/CN16/RP10/PWM1H3/TDI/EMUD2/PGD2
22
RB11/CN15/RP11/PWM1L3/TMS/EMUC2/PGC2
23
+5v RB12/CN14/RP12/PWM1H2
24
RB13/CN13/RP13/PWM1L2
28 25
AVDD RB14/CN12/RP14/PWM1H1
27 26
AVSS RB15/CN11/RP15/PWM1L1
DSPIC33FJ32MC202

BR1 R2
RXD

RV3 TXD
43K
RTS
C1
100%

2200uF CTS

R7
2W08G 1k C3 1k C2
2200uF 47uF

VISUALIZACION DEL PUERTO SERIAL:


b) Realizar los cambios en el programa de la P2 para comunicar la PC con el medidor
realizado

#include "config.h"
#include "reloj.h"
#include <libpic30.h>
#include "xlcd.h"
#include <p33FJ32MC202.h>
#include <stdio.h>
#include <math.h>
char vector[4] = ""; //Caracter usado en la visualizacion de valores del LCD
int result = 0; //Valor medido en bruto de AN0/RA0-AN1/RA1
int result1 = 0; //Valor medido en bruto de AN2/RB0
float vm = 0; //Valor medido como float
char trama[28];
char Salto[] = " Voltios-AC \r\n";
//Variables usadas en el calculo del programa
float temp = 0;
void adc0(void); //Lectura del puerto AN0
int main() {
Configurar_UART();

XLCDInit(); //Inicializacion de la pantalla LCD


WriteCmdXLCD(CLEAR_XLCD); //Limpia la pantalla LCD al reinicio
__delay_ms(10);
adc0(); //Inicia el ADC
while (1) {
WriteCmdXLCD(CLEAR_XLCD); //Limpia la pantalla LCD al reinicio
XLCDgotoXY(0, 0);
putrsXLCD("VOLTIMETRO AC");
AD1CON1bits.ADON = 1; // Habilita ADC
AD1CON1bits.SAMP = 1; // Bit para habilitar muestreo
__delay_ms(10);
AD1CON1bits.SAMP = 0; // Retiene el muestreo
while (!AD1CON1bits.DONE); // Esperar a que se haya realizado la convercion
AD1CON1bits.DONE = 0;
result = ADCBUF0;

//Calculos hechos para hallar el voltaje


vm = (float) result * (220.0 + 2.0) / 4096.0; //Se le agrega 2v por caida de tension
del puente de diodos
XLCDgotoXY(1, 0);
putrsXLCD("V: V");
XLCDgotoXY(1, 7);
putrsXLCD(trama);
sprintf(trama, "%.2f", (double)vm);
Serial_SendString(trama);
Serial_SendString(Salto);
__delay_ms(100);

}
}

void adc0(void) {
TRISA = 0x0001; // Entrada analógica RA0
AD1PCFGL = 0xFFFF; // Todas entradas analógicas
AD1CON1bits.AD12B = 1; // Resolucion de 12 bits y muestreo secuencial de los
canales
AD1CON1bits.ASAM = 0; // El muestreo inicia cuando bit SAMP=1 *muestreo
manual
AD1CON1bits.SSRC = 0; // Termina el muestreo e inicia la conversión
AD1CHS0bits.CH0NA = 0; // La entrada negativa será Vss
AD1CHS0bits.CH0SA = 0; // Entrada positiva será AN0
AD1CON2bits.CSCNA = 0; // Muestreo secuencial (scan) deshabilitado
AD1CON2bits.VCFG = 0; // Referencia para la conversión: Referencia
positiva=AVdd, Negativa=AVss
AD1CON2bits.BUFM = 0; // Configurado como buffer de 16 palabras
AD1CON2bits.SMPI = 0; // Después de la conversión se genera la interrupción
AD1CON2bits.ALTS = 0; // Muestra 1 canal: AN0
AD1CON3bits.ADRC = 0; // Reloj del ADC es derivado del sistema
AD1CON3bits.ADCS = 21; // Tiempo de conversión.
}
void Configurar_UART() {
RPOR7bits.RP15R=3;// USAMOS LOS PPS COLOCAMOS TX al pin RP15
U1MODEbits.STSEL = 0; // 1 Stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8 data bits
U1MODEbits.ABAUD = 0; // Auto-Baud Disabled
U1BRG = BRGVAL; // BAUD Rate Setting for 9600
U1STAbits.URXISEL = 0; // Interrupt after one RX character is received
U1MODEbits.UARTEN = 1; // Enable UART
U1STAbits.UTXEN = 1; // Enable UART TX
}

void Serial_SendString(char *str) {


char * p;
p = str;
while (*p)
Serial_PutChar(*p++);
}
// Send a character out to the serial interface.
void Serial_PutChar(char Ch) { // wait for empty buffer
while (U1STAbits.UTXBF == 1);
U1TXREG = Ch;
}

También podría gustarte