Vous êtes sur la page 1sur 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 aplicacin en la cual mostraremos el voltaje obtenido en un potencimetro alimentando con 5v y lo mostraremos en Matlab.

Materiales:

1 pic 16f877a 1 cristal de cuarzo de 4MHZ 2 condensadores de 22pF. 1 potencimetro de 10k. 1 potencimetro 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.

Programacin 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> // Librera del LCD #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) El rs232 es la librera 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 informacin, rcv=PIN_C7 es el pin por donde se recepciona la informacin, bits=8 es el nmero 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); } }

Programacin del Matlab:


Creamos una funcin en el cual nos pida el nmero 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:

Vous aimerez peut-être aussi