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

Puerto Serial Con Matlab y PIC 16F877A

Embed Size (px)

Citation preview

Page 1: Puerto Serial Con Matlab y PIC 16F877A

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

Page 2: Puerto Serial Con Matlab y PIC 16F877A

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.

Page 3: Puerto Serial Con Matlab y PIC 16F877A

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);

}

}

Page 4: Puerto Serial Con Matlab y PIC 16F877A

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

Page 5: Puerto Serial Con Matlab y PIC 16F877A

Proteus:

Muestra: