Ingeniería Electrónica
Grupo 9AN
En el presente blog actualizaremos la información correspondiente al trabajo realizado en el diseño y contrucción de la tarjeta multiproposito para el microcontrolador PIC18F4550.
El software utilizado en principio para el diseño de nuestra PCB es Proteus Professional versión 7.9 SP1 ya que cuenta con los componentes necesarios para simular con precisión lo que necesitamos, adicional su interfaz es muy amigable y rapida de usar.
sábado, 11 de mayo de 2013
Exposición Comunicación PIC18F4550 - RS-232 - MATLAB
La comunicación serial entre un dispositivo 18f4550 de Microchip con Matlab es sencilla. En este artículo se ensayará el código necesario para la tx de datos desde Matlab para encender un led con el microcontrolador 18f4550. Para esta simulación, se configuran dos puertos virtuales usando el demo del programa Virtual Serial Port Driver v.6.
MATLAB
El código necesario para la inicializar el puerto serial es:
SerPIC = serial('COM2');
set(SerPIC,'BaudRate',2400);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
La función serial crea un objeto que contiene todos los parámetros correspondientes al puerto serial como baudios, bits de datos, bit de parada, etc. Estos parámetros se los modifica con la función set.
Una vez establecidos los parámetros de la comunicación, se procede a abrir el puerto con la función fopen:
fopen(SerPIC);
La función para escribir el puerto serial es fprintf:
fprintf(SerPIC,'%s','A')
En la línea precedente se escribe en el puerto la letra A en formato string. (También es posible escribir caracteres, reemplazando %s por %c y enviando los datos con la función char.)
Una vez terminada la comunicación, se procede a cerrar el puerto con el siguiente código:
fclose(SerPIC);
delete(SerPIC)
clear SerPIC
MICROCONTROLADOR
En el microcontrolador tenemos el siguiente programa:
include "modedefs.bas"
valor var byte
trisb =%00000001
portb =%00000000
inicio:
serin portb.0,T2400,valor
if valor == "E" then high portb.1 'E->Encendido
if valor == "A" then low portb.1 'A->Apagado
goto inicio
Como se trata de una transmisión serial, siempre va la librería modedefs.bas. No olvidar que la velocidad de envío debe ser la misma que la velocidad de recepción (2400 en este caso).
En este programa si el dato recibido es “E”, enciende el pin 1 del puerto B. Si recibe “A” pone a 0 ese mismo pin.
Código matlab.m
clear all;
close all;
clc;
PS=serial('COM1');
set(PS,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(PS,'StopBits',1); % se configura bit de parada a uno
set(PS,'DataBits',8); % se configura que el dato es de 8 bits, debe estar entre 5 y 8
set(PS,'Parity','none'); % se configura sin paridad
set(PS,'Terminator','CR/LF');% “c” caracter con que finaliza el envío
set(PS,'OutputBufferSize',1); % ”n” es el número de bytes a enviar
set(PS,'InputBufferSize' ,1); % ”n” es el número de bytes a recibir
set(PS,'Timeout',5); % 5 segundos de tiempo de espera
fopen(PS);
fclose(PS);
delete(PS);
clear PS;
PUERTO SERIAL CON MATLAB
Este es una forma básica de conectarse al puerto serial utilizando matlab.
%configurando puerto y dando de alta “s” como objeto asociado al “com1”
s=serial('COM1', 'BaudRate', 9600);
% abriendo el puerto
fopen(s);
%lee una linea de texto y la almacena en "datos" no incluye terminador
datos = fgetl(s);
%escribe datos en el puerto en binario
fwrite (s,datos);
% cerrando el puerto
fclose(s);
% borrando el objeto de memoria
delete(s)
clear s
%algunas instrucciones asociadas con este puerto en matlab
clear (serial)
delete (serial)
fgetl (serial)
fgets (serial)
fopen (serial)
fprintf (serial)
fread (serial)
fscanf (serial)
fwrite (serial)
get (serial)
instrcallback
instrfind
instrfindall
isvalid (serial)
length (serial)
load (serial)
readasync
record
save (serial)
serial
serialbreak
set (serial)
size (serial)
stopasync
martes, 26 de febrero de 2013
Información Principal
Laboratorio I
Diseño de la PCB - PIC18F4550
Integrantes:
Jorge Sandoval
Código: 20012270012
Correo: jorgeesand@gmail.com
Juan Solorzano
Código: 2011270070
Correo: ing.camilosolorzano@yahoo.es
Carlos Vega
Código: 2010270413
Correo: carlosgvegac@hotmail.com
Después de realizar el diseño de la PCB ahora ya tenemos nuestra tarjeta de prueba para el PIC18F4550
Recorrido leds Auto fantastico en Lenguaje C18:
Fotografía del montaje
Simulación en Proteus
Código Recorrido leds Auto fantastico en Lenguaje C18:
#include < p18f4550.h >
#include < delays.h > //libreria de retardo
#include < math.h >
//configuracion de bits
#pragma config FOSC=INTOSC_EC //CONFIGURACION DEL OSCILADOR
#pragma config WDT=OFF //configuracion de Watchdog "desabilitado"
#pragma config MCLRE=OFF //configuracion del MCLRE "desabilitado"
#pragma config LVP=OFF //configuracion del single supply "desabilitado"
#pragma config PBADEN=OFF //configuracion del puerto I/O digitales PORTB<0:4>
void main (void){
//inicio del programa
TRISB=0x00; //DEFINE EL PUERTO B COMO SALIDA
while(1){
LATB= 0x01;
//Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x02; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x04; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x08; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x10; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x20; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x40; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x80; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x40; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x20; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x10; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x08; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x04; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x02; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x01; //Prende PINB0
Delay1KTCYx(42); //Retardo
}
}
Conteo con Display 7 segmentos, ascendente y descendente
Fotografía del montaje
Simulación en Proteus
Código contador ascendente-descendente Lenguaje C18:
#include < p18f4550.h >
#include < delays.h >
//libreria de retardo #include < math.h >
//configuracion de bits
#pragma config FOSC=INTOSC_EC //CONFIGURACION DEL OSCILADOR
#pragma config WDT=OFF //configuracion de Watchdog "desabilitado"
#pragma config MCLRE=OFF //configuracion del MCLRE "desabilitado"
#pragma config LVP=OFF //configuracion del single supply "desabilitado"
#pragma config PBADEN=OFF //configuracion del puerto I/O digitales PORTB<0:4>
int u;
void main (void){
//inicio del programa
TRISB=0x00; //DEFINE EL PUERTO B COMO SALIDA
TRISC=0x00; //DEFINE EL PUERTO C COMO ENTRADA
u=0;
if(u==0){
LATC=0x10;
LATB=0x03;
goto inicio;
}
while(1){
while(1){
inicio:
if(PORTD==0x01){
u++;
Delay1KTCYx(42);
goto unidades;
}
if(PORTD==0x02){
u--;
Delay1KTCYx(42);
goto unidades;
}
}
unidades:
if(u<0){
LATC=0x10;
LATB=0x19;
u=9;
goto inicio;
}
if(u==0){
LATC=0x10;
LATB=0x03;
goto inicio;
}
if(u==1){
LATC=0x10;
LATB=0x9F;
goto inicio;
}
if(u==2){
LATC=0x10;
LATB=0x25;
goto inicio;
}
if(u==3){
LATC=0x10;
LATB=0x0D;
goto inicio;
}
if(u==4){
LATC=0x10;
LATB=0x99;
goto inicio;
}
if(u==5){
LATC=0x10;
LATB=0x49;
goto inicio;
}
if(u==6){
LATC=0x10;
LATB=0x41;
goto inicio;
}
if(u==7){
LATC=0x10;
LATB=0x1F;
goto inicio;
}
if(u==8){
LATC=0x10;
LATB=0x01;
goto inicio;
}
if(u==9){
LATC=0x10;
LATB=0x19;
goto inicio;
}
if(u==10){
u=0;
LATC=0x10;
LATB=0x03;
}
goto inicio;
}
}
Diseño de la PCB - PIC18F4550
Integrantes:
Jorge Sandoval
Código: 20012270012
Correo: jorgeesand@gmail.com
Juan Solorzano
Código: 2011270070
Correo: ing.camilosolorzano@yahoo.es
Carlos Vega
Código: 2010270413
Correo: carlosgvegac@hotmail.com
Después de realizar el diseño de la PCB ahora ya tenemos nuestra tarjeta de prueba para el PIC18F4550
Recorrido leds Auto fantastico en Lenguaje C18:
Fotografía del montaje
Simulación en Proteus
Código Recorrido leds Auto fantastico en Lenguaje C18:
#include < p18f4550.h >
#include < delays.h > //libreria de retardo
#include < math.h >
//configuracion de bits
#pragma config FOSC=INTOSC_EC //CONFIGURACION DEL OSCILADOR
#pragma config WDT=OFF //configuracion de Watchdog "desabilitado"
#pragma config MCLRE=OFF //configuracion del MCLRE "desabilitado"
#pragma config LVP=OFF //configuracion del single supply "desabilitado"
#pragma config PBADEN=OFF //configuracion del puerto I/O digitales PORTB<0:4>
void main (void){
//inicio del programa
TRISB=0x00; //DEFINE EL PUERTO B COMO SALIDA
while(1){
LATB= 0x01;
//Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x02; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x04; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x08; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x10; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x20; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x40; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x80; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x40; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x20; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x10; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x08; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x04; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x02; //Prende PINB0
Delay1KTCYx(42); //Retardo
LATB= 0x01; //Prende PINB0
Delay1KTCYx(42); //Retardo
}
}
Conteo con Display 7 segmentos, ascendente y descendente
Fotografía del montaje
Simulación en Proteus
Código contador ascendente-descendente Lenguaje C18:
#include < p18f4550.h >
#include < delays.h >
//libreria de retardo #include < math.h >
//configuracion de bits
#pragma config FOSC=INTOSC_EC //CONFIGURACION DEL OSCILADOR
#pragma config WDT=OFF //configuracion de Watchdog "desabilitado"
#pragma config MCLRE=OFF //configuracion del MCLRE "desabilitado"
#pragma config LVP=OFF //configuracion del single supply "desabilitado"
#pragma config PBADEN=OFF //configuracion del puerto I/O digitales PORTB<0:4>
int u;
void main (void){
//inicio del programa
TRISB=0x00; //DEFINE EL PUERTO B COMO SALIDA
TRISC=0x00; //DEFINE EL PUERTO C COMO ENTRADA
u=0;
if(u==0){
LATC=0x10;
LATB=0x03;
goto inicio;
}
while(1){
while(1){
inicio:
if(PORTD==0x01){
u++;
Delay1KTCYx(42);
goto unidades;
}
if(PORTD==0x02){
u--;
Delay1KTCYx(42);
goto unidades;
}
}
unidades:
if(u<0){
LATC=0x10;
LATB=0x19;
u=9;
goto inicio;
}
if(u==0){
LATC=0x10;
LATB=0x03;
goto inicio;
}
if(u==1){
LATC=0x10;
LATB=0x9F;
goto inicio;
}
if(u==2){
LATC=0x10;
LATB=0x25;
goto inicio;
}
if(u==3){
LATC=0x10;
LATB=0x0D;
goto inicio;
}
if(u==4){
LATC=0x10;
LATB=0x99;
goto inicio;
}
if(u==5){
LATC=0x10;
LATB=0x49;
goto inicio;
}
if(u==6){
LATC=0x10;
LATB=0x41;
goto inicio;
}
if(u==7){
LATC=0x10;
LATB=0x1F;
goto inicio;
}
if(u==8){
LATC=0x10;
LATB=0x01;
goto inicio;
}
if(u==9){
LATC=0x10;
LATB=0x19;
goto inicio;
}
if(u==10){
u=0;
LATC=0x10;
LATB=0x03;
}
goto inicio;
}
}
Suscribirse a:
Entradas (Atom)