Está en la página 1de 5

Puerto serial con Matlab y PIC 16F877A

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DEINGENIERIA ELECTRICA Y ELECTRONICA

ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

CIRCULO DE ESTUDIOS:

Autor: OBLITAS ARISTONDO FRANZUA LE RENNARD


INTRODUCCION:

Este archivo realizaremos una aplicación en la cual mostraremos el voltaje obtenido en un potenciómetro
alimentando con 5v y lo mostraremos en Matlab.

Materiales:

- 1 pic 16f877a
- 1 cristal de cuarzo de 4MHZ
- 2 condensadores de 22pF.
- 1 potenciómetro de 10k.
- 1 potenciómetro de 50k.
- 1 resistencia de 10k.
- 1 pulsador.
- 1 LCD de 16x2.
- 1 cable serial *

*: El cable puede ser serial o USB – serial.

Programas:

- CSS Compiler.
- Proteus.
- Matlab.
- Virtual Serial Port.
Programación del CSS Compiler:

1. Configuramos los pines de nuestro microcontrolador :

#fuses XT,NOWDT,NOPUT // constantes


#device adc=10 // constante para el ADC en los PIC
#use delay(clock=4M) // configurando el cristal que vamos a utilizar
#define lcd_data_port gentev("sfr:portd") // diciendole al pic que vamos a conectar el LCD por el Puerto D
#define lcd_enable_pin pin_d0 // Conecto el enable del LCD con el pin D0
#define lcd_rs_pin pin_d1 // Conecto el RS del LCD con el pin D1
#define lcd_rw_pin pin_d2 // Conecto el RW del LCD con el pin D2
#include <lcd.c> // Librería del LCD
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

El rs232 es la librería para el puerto serial el Baud= 9600 es la velocidad con la cual se transmiten los datos,
El parity es el bit de paridad le pongo N porque no lo utilizo, xmit= PIN_C6 es el pin por donde yo envió la
información, rcv=PIN_C7 es el pin por donde se recepciona la información, bits=8 es el número de bits que
va pasar por el cable por segundo.

void main(){
int16 q;

setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);

lcd_init();

while(true){

set_adc_channel(0);
delay_us(10);
q = read_adc();
printf(lcd_putc,"\f ADC = %4ld",q);
printf("%4ld \r",q);
delay_ms(100);
}

}
Programación del Matlab:

Creamos una función en el cual nos pida el número de muestras que vamos a tomar .

function Matlab_Control(numero_muestras)

close all;
clc;
y=zeros(1,1000); %Vector donde se guardan los datos

%Inicializando el puerto que utilizare


delete(instrfind(('Port'),('COM2')));
puerto_serial=serial('COM2');
puerto_serial.BaudRate=9600;
warning('off','Matlab:serial:fscanf:unsuccessfulRead');

%Abro el puerto serial


fopen(puerto_serial);

%Declaro un contador del numero de muestras ya tomadas


contador_muestras=1;

%Creo una ventana para la grafica


figure('Name','Serial Comunication: Matlab + PIC, Oblitas (CEICTEC)')
title('SERIAL COMUNICATION MATLAB + PIC ');
xlabel('Numero de muestra');
ylabel('Voltaje(V)');
grid on;
hold on;

%Bucle while para que tome la muestras que queremos


while contador_muestras<=numero_muestras
ylim([0 5.1]);
xlim([contador_muestras-20 contador_muestras+5]);
valor_potenciometro=fscanf(puerto_serial,'%d')';
y(contador_muestras)=(valor_potenciometro(1))*5/1024;
plot(contador_muestras,y(contador_muestras),'X-r');
drawnow
contador_muestras=contador_muestras+1;
end

%Corto la comunicacion serial y elimino las variables


fclose(puerto_serial);
delete(puerto_serial);
clear all;
end
Proteus:

Muestra:

También podría gustarte