Está en la página 1de 4

PRACTICA CALIFICADA

02-CICLO 2021N
MICROCONTROLADORES y SISTEMAS EMBEBIDOS

DOCENTES: Dr. Ing. Jacob Astocondor villar


ALUMNO: QUESADA BEJARANO; Daniel
CODIGO: 1713220431
PREGUNTA 1
Leer los datos de dos sensores y realizar la transmisión de datos en serie desde el UART del
dsPIC33FJ12MC y presentarlo en la PC (computadora personal). El pin de transmisión debe
realizarse por el pin RB15
Este programa lee repetidamente lecturas analógicas de 10 bits de AN0 y luego imprime los
resultados en la salida en serie.
Se pide:

a) Realizar los cálculos para obtener el valor a cargar en el registro UxBRG, en modo de
baja velocidad, la frecuencia del cristal es de 8Mhz, La velocidad de comunicación es
de 9600 baudios
Fp
UXBRG= −1
16∗( Baud Rate )
8∗106
UXBRG= −1
16∗( 9600 )
UXBRG=51.083

b) Realizar el programa comentando cada función

#include <stdio.h>
#include <stdlib.h>
#include "config.h"
#define FCY 4000000UL
#include <libpic30.h>
#define BRGVAL(BAUDRATE) ((FCY/BAUDRATE)/16)-1 //PARA
calcular el BaudRate

void UART_Init(uint16_t BaudRate);


void UART_PutChar(char Ch);
void UART_PutString(char *str);
double AnalogRead(uint8_t ADC_canal);
void ADC_Init(uint8_t ADC_Resolucion);

char cadena[20];
double sensor1;

int main(int argc, char** argv) {


AD1PCFGL=0xFFFF;
RPOR7bits.RP15R = 3; //rb15->tx
ADPCFGbits.PCFG0=0;
ADPCFGbits.PCFG1=0;
TRISAbits.TRISA0=1;
TRISAbits.TRISA1=1;
TRISB=0;
ADC_Init(0);
UART_Init(9600);

while(1){
sensor1=AnalogRead(0)*3.3/1023;

sprintf(cadena,"SENSOR 1 :%.2f\nV ",sensor1);


UART_PutString(cadena);
__delay_ms(200);

return (EXIT_SUCCESS);
}

void UART_Init(uint16_t BaudRate){

U1MODE = 0; //Limpio el registro


U1STA = 0; //Limpio el registro
U1BRG = BRGVAL(BaudRate); //Config para 9600
baudios
IPC2bits.U1RXIP = 1; //Prioridad de 1
IFS0bits.U1RXIF = 0; //Se borra el flag
IEC0bits.U1RXIE = 1; //Activamos la interrupcion
U1MODEbits.PDSEL = 0; //Transmision sin paridad
U1MODEbits.STSEL = 0; //Bit de parada=1
U1MODEbits.UARTEN = 1; //Se habilita el modulo uart
U1STAbits.UTXEN = 1; //Se habilita la transmision de
datos

void UART_PutChar(char Ch){


while (U1STAbits.UTXBF == 1);
U1TXREG =Ch;
}
void UART_PutString(char *str){

while (*str)
UART_PutChar(*str++);

double AnalogRead(uint8_t ADC_canal){

AD1CHS0bits.CH0SA=ADC_canal;//pin analogico
AD1CON1bits.SAMP=1;//Inicia el muestreo
__delay_ms(0.9);
AD1CON1bits.SAMP=0;//Acaba el muestreo
while(!AD1CON1bits.DONE);//Conversion
double adc_buffer=0;
AD1CON1bits.DONE=0;//Conversion no iniciada o en
progreso
adc_buffer=ADC1BUF0;
return adc_buffer;

void ADC_Init(uint8_t ADC_Resolucion){

AD1CON1bits.AD12B = ADC_Resolucion; //Resolucion 12


bits
AD1CON2bits.VCFG=0; // voltaje de referencia
AD1CHS0bits.CH0NA=0;//VREFL
AD1CON3bits.ADCS=21;
AD1CON1bits.ASAM=0;//El muestro inicia cuando SAMP=1
AD1CON1bits.SSRC=0;//Conversion
AD1CON1bits.ADON=1;

}
c) Realizar el circuito

También podría gustarte