SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
www.aquihayapuntes.com
Implementación de
una Máquina de
Estados Finita en un
PIC
Ejemplo de cómo implementar una máquina de estados
en un Microcontrolador PIC utilizando Qfsm una
herramienta gráfica de diseño de Maquinas de Estados
Finitas.
Biblioman
03/09/2011
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 2
Introducción
En este pequeño tutorial vamos a ver lo fácil que es crear una Máquina de Estados
Finita e implementar el código resultante en un Microcontrolador. La teoría de lo que
es una máquina de estados y como implementarla a través del DTE (Diagrama de
Transiciones de Estados) ya se explico en este artículo, por lo que si no lo habéis leído
todavía recomiendo su lectura antes de empezar a leer este.
Para ayudarnos en el diseño de la Máquina de Estados y la posterior codificación en C
nos vamos a ayudar de una herramienta gráfica concretamente Qfsm, un proyecto
Multiplataforma de software libre realizado con Qt .
Como ejemplo vamos hacer el del movimiento del robot visto en el primer artículo (así
sirve de comparación). Por lo que el diagrama de estados será el mismo, lo que vamos
a ver ahora es como crearlo con este IDE.
Creación del Diagrama de Estados
Para crear una nueva máquina de estados hacemos clic en File ->New
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 3
Lo más importante en la ventana que nos aparece es lo que está dentro de los
recuadros Moore y Mealy. En el recuadro Moore pondremos el número de salidas y el
nombre de estas que tendrá el Autómata y en definitiva nuestro PIC. Las entradas las
pondremos en el apartado para Mealy, las salidas aquí no hace falta ponerlas porque
al final lo que vamos a implementar es un Autómata de Moore.
Una vez que tengamos creada la Máquina de Estados deberemos incluir los diferentes
estados que tendrá el autómata, para ello hacemos clic en State-> New o pinchando
directamente en el icono que hay en la barra de herramientas.
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 4
En esta ventana pondremos: en la caja de texto identificada como Name el nombre
con el que queremos identificar el estado (es solo una etiqueta) el estado se identifica
realmente por el número en binario que hay en la caja de texto Code, (al crear el
estado ya se asigna un número por defecto). En Moore Outpts pondremos la salida de
Moore que queremos asociar al estado que acabamos de crear.
Una vez hecho esto el siguiente paso es unir los estados por medio de transiciones,
para ello hacemos clic en Add Transition en la barra de herramientas, después
hacemos clic en el estado donde queremos iniciar la transición y arrastramos la flecha
al estado de destino.
Repetimos el proceso con cada uno de los estados y transiciones que tenga nuestro
autómata.
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 5
En el caso de nuestro ejemplo (el movimiento del robot) quedaría así:
Una vez creado muestro diagrama de estados podemos chequearlo, para ello hacemos
clic en Machine-> Integrity Check, nos aparecerá la siguiente ventana:
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 6
Donde sí nuestro autómata es correcto aparecerán con una aspa verde los diferentes
chequeos realizados. Este tipo de test nos sirve para saber si nuestro autómata es
determinista, es decir, que no tenga estados y condiciones ambiguas, el diseño lógico
es responsabilidad nuestra y la aplicación no funcionará correctamente si está mal
diseñado, realmente está es la única complicación que hay, todo lo demás es un
proceso mecánico e igual para cualquier programa que queramos hacer.
Simulando el diagrama de Estados
Una vez creado el diagrama de estados podemos simularlo desde el propio IDE, para
ello hacemos clic en Machine-> Simulate… o directamente desde el botón Simulate
que hay en la barra de herramientas, nos aparecerá la siguiente ventana:
La simulación empezará en el estado de inicio o reset, representándose por medio de
un cuadrado de color rojo el estado en el que nos encontramos, a partir de aquí
meteremos las entradas en la caja de texto que pone Inputs y podremos ver la
evolución de los estados.
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 7
Creación del programa en C
Una vez comprobado que nuestra máquina de estados funciona correctamente
exportaremos el código, el IDE permite la exportación directa a diferentes lenguajes de
descripción hardware como: AHDL, VHDL, Verilog HDL, etc. pero no tiene la opción (de
momento) de exportar el código a un lenguaje de alto nivel como el C que pueda ser
compilado para un microcontrolador, pero no importa mucho ya que el hacer la
portabilidad manualmente resulta fácil.
Para ello seleccionaremos exportar a AHDL que es un lenguaje de Descripción
Hardware propietario de Altera usado para la programación de CPLDs y FPGAs, el por
qué seleccionar AHDL y no otro es porque este tiene la ventaja de que su sintaxis es
parecida al lenguaje C.
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 8
El código AHDL generado por el IDE para nuestro ejemplo es el siguiente:
% This file was generated by %
% Qfsm Version 0.52 %
% (C) Stefan Duffner, Rainer Strobel %
SUBDESIGN Ejemplo_robot
(clock, reset :INPUT;
I1,I0 :INPUT;
:OUTPUT;
M1,M2 :OUTPUT;)
VARIABLE
fsm : MACHINE OF BITS(s0, s1)
WITH STATES (
Para = B"00",
Adel. = B"01",
Atras = B"10");
reset_async : NODE;
_asyncM1, _asyncM2 : NODE;
BEGIN
reset_sync = DFF(reset,clock,VCC,VCC);
fsm.reset = reset_sync;
fsm.clk = clock;
M1 = DFF(M1_async,clock,VCC,VCC);
M2 = DFF(M2_async,clock,VCC,VCC);
CASE fsm IS
WHEN Para =>
IF (I1,I0) == B"10" THEN
END IF;
IF (I1,I0) == B"01" THEN
fsm = Adel.;
(_asyncM1, _asyncM2) = B"01";
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 9
END IF;
IF (I1,I0) == B"11" THEN
fsm = Atras;
(_asyncM1, _asyncM2) = B"10";
END IF;
IF (I1,I0) == B"00" THEN
END IF;
WHEN Adel. =>
IF (I1,I0) == B"00" THEN
END IF;
IF (I1,I0) == B"01" THEN
END IF;
IF (I1,I0) == B"10" THEN
fsm = Para;
(_asyncM1, _asyncM2) = B"00";
END IF;
IF (I1,I0) == B"11" THEN
fsm = Atras;
(_asyncM1, _asyncM2) = B"10";
END IF;
WHEN Atras =>
IF (I1,I0) == B"10" THEN
fsm = Para;
(_asyncM1, _asyncM2) = B"00";
END IF;
IF (I1,I0) == B"00" THEN
END IF;
IF (I1,I0) == B"11" THEN
END IF;
IF (I1,I0) == B"01" THEN
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 10
fsm = Adel.;
(_asyncM1, _asyncM2) = B"01";
END IF;
END CASE;
END;
Y el código resultante una vez portado a C para el compilador de CCS será el siguiente:
//////////////////////////////////////////////////////////////////////
//Ejemplo de Autómata de MOORE. Implementado en un PIC
//
//Basado en el código generado por Qsfm.
//
//WWW.AQUIHAYAPUNTES.COM
//////////////////////////////////////////////////////////////////////
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, PROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT,
NODEBUG
#use delay(clock=20000000)
//Definición de registros
#byte PORTA=0x05
#byte PORTB=0x06
#bit RB0=PORTB.0
#bit RB1=PORTB.1
//Definición de los tres estados posibles.
#DEFINE PARA 0
#DEFINE ADELANTE 1
#DEFINE ATRAS 2
//Función principal.
void main()
{
//Inicialización de registros.
set_tris_b (0x00);//RB0 como salida
RB0=0;
RB1=0;
//Declaración de variables de la Máquina de estados.
int ESTADO=0;
while(true){
switch(ESTADO)
{
case PARA:
{
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 11
// if (PORTA==2);
if (PORTA==1){
ESTADO=ADELANTE;
RB0=1;
RB1=0;
}
if (PORTA==3){
ESTADO=ATRAS;
RB0=0;
RB1=1;
}
//if (PORTA==0);
break;
}
case ADELANTE:
{
// if (PORTA==0);
// if (PORTA==1);
if (PORTA==2){
ESTADO=PARA;
RB0=0;
RB1=0;
}
if (PORTA==3){
ESTADO=ATRAS;
RB0=0;
RB1=1;
}
break;
}
case ATRAS:
{
if (PORTA==2){
ESTADO=PARA;
RB0=0;
RB1=0;
}
// if (PORTA==0);
// if (PORTA==3);
if (PORTA==1){
ESTADO=ADELANTE;
RB0=1;
RB1=0;
}
break;
}
default: break;
}
}
}
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 12
La parte del código comentado son sentencias if que genera el IDE y que se pueden
eliminar una vez optimizado un poco el código generado.
Circuito final
Una vez compilado el código con CCS tendremos como siempre un .HEX que podremos
programar en el PIC y probar en un circuito real o simularlo en Proteus.
Fuentes de Información
qfsm
Qt
CCS Custom Computer Services
En el foro tenéis el .DTE y .DNS del ejemplo y más ejemplos de usuarios del foro que
han realizado su propia máquina de estados, como el proyecto de la lavadora del
amigo UbunPIC.
Como siempre espero vuestras sugerencias al respecto en el foro.
Un saludo
Implementación de una Máquina de Estados Finita en un PIC
Biblioman www.aquihayapuntes.com Página 13
Marcas registradas
Las marcas citadas en este artículo así como los programas mostrados en las imágenes
procedentes de capturas de pantallas pertenecen a sus respectivos propietarios, su
utilización en este artículo es con fines educativos y sin ánimo de lucro.
Licencia
Autor de este artículo: Biblioman
Versión: 1.01
Página Web: http:www.aquihayapuntes.com
Email: email.Biblioman@gmail.com
Este artículo esta bajo una licencia Creative Commons: Reconocimiento-No Comercial-
Compartir bajo la misma licencia.

Más contenido relacionado

La actualidad más candente

Primer programa en 1
Primer programa en 1Primer programa en 1
Primer programa en 1fehrhuichapa
 
Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2karlalopezbello
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc X
 
Instrucciones de control de salto
Instrucciones de control de saltoInstrucciones de control de salto
Instrucciones de control de saltoAbrirllave
 
Practicas 2016
Practicas 2016Practicas 2016
Practicas 2016Tensor
 
Estructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje CEstructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje CMarvin Romero
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivasAbrirllave
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNAnyeni Garay
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc X
 
Estructuras de repetición en programacion
Estructuras de repetición en programacionEstructuras de repetición en programacion
Estructuras de repetición en programacionSERCOMPFAST
 
Clase 2 Estructuras de Control
Clase 2 Estructuras de ControlClase 2 Estructuras de Control
Clase 2 Estructuras de ControlDesireé mart?ez
 

La actualidad más candente (19)

Primer programa en 1
Primer programa en 1Primer programa en 1
Primer programa en 1
 
Manual
ManualManual
Manual
 
Monitores
MonitoresMonitores
Monitores
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2
 
Introduccion actionscript
Introduccion actionscriptIntroduccion actionscript
Introduccion actionscript
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcaciones
 
Manual pseint
Manual pseintManual pseint
Manual pseint
 
Instrucciones de control de salto
Instrucciones de control de saltoInstrucciones de control de salto
Instrucciones de control de salto
 
Practicas 2016
Practicas 2016Practicas 2016
Practicas 2016
 
Estructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje CEstructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje C
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivas
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
 
Guía interfaz inicial
Guía  interfaz  inicialGuía  interfaz  inicial
Guía interfaz inicial
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujo
 
Estructuras de repetición en programacion
Estructuras de repetición en programacionEstructuras de repetición en programacion
Estructuras de repetición en programacion
 
Sentencias de control
Sentencias de controlSentencias de control
Sentencias de control
 
Clase 2 Estructuras de Control
Clase 2 Estructuras de ControlClase 2 Estructuras de Control
Clase 2 Estructuras de Control
 

Similar a Microcontroladores PIC: Implementación de una maquina de estados en un PIC

Similar a Microcontroladores PIC: Implementación de una maquina de estados en un PIC (20)

Dfd
DfdDfd
Dfd
 
Computacion 3808
Computacion 3808Computacion 3808
Computacion 3808
 
Actividad no18 2do_parcial
Actividad no18 2do_parcialActividad no18 2do_parcial
Actividad no18 2do_parcial
 
PLC Alternativo
PLC AlternativoPLC Alternativo
PLC Alternativo
 
Mplab
Mplab Mplab
Mplab
 
Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus
 
Arduino: Maquinas de estado con Arduino
Arduino: Maquinas de estado con ArduinoArduino: Maquinas de estado con Arduino
Arduino: Maquinas de estado con Arduino
 
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Ejemplo j internalframe_gine
Ejemplo j internalframe_gineEjemplo j internalframe_gine
Ejemplo j internalframe_gine
 
Programación i
Programación iProgramación i
Programación i
 
Examen programación
Examen programaciónExamen programación
Examen programación
 
Reglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows VistaReglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows Vista
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Curso MPLAB pic 4 compilando y simulando el programa 10p
Curso MPLAB pic 4 compilando y simulando el programa 10pCurso MPLAB pic 4 compilando y simulando el programa 10p
Curso MPLAB pic 4 compilando y simulando el programa 10p
 
simatic estaciones fms
 simatic estaciones fms simatic estaciones fms
simatic estaciones fms
 
Programación Basada en Autómatas
Programación Basada en AutómatasProgramación Basada en Autómatas
Programación Basada en Autómatas
 
Proyecto final MODELADO DE ROBOTS UPC TABASCO
Proyecto final MODELADO DE ROBOTS UPC TABASCOProyecto final MODELADO DE ROBOTS UPC TABASCO
Proyecto final MODELADO DE ROBOTS UPC TABASCO
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 

Más de SANTIAGO PABLO ALBERTO

Manual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzadaManual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzadaSANTIAGO PABLO ALBERTO
 
Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez SANTIAGO PABLO ALBERTO
 
Programación de microcontroladores PIC en C con Fabio Pereira
Programación de microcontroladores PIC en  C con Fabio PereiraProgramación de microcontroladores PIC en  C con Fabio Pereira
Programación de microcontroladores PIC en C con Fabio PereiraSANTIAGO PABLO ALBERTO
 
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...SANTIAGO PABLO ALBERTO
 
Programación de autómatas PLC OMRON CJ/CP1
Programación de  autómatas PLC OMRON CJ/CP1Programación de  autómatas PLC OMRON CJ/CP1
Programación de autómatas PLC OMRON CJ/CP1SANTIAGO PABLO ALBERTO
 
Manual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMARTManual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMARTSANTIAGO PABLO ALBERTO
 
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...SANTIAGO PABLO ALBERTO
 
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...SANTIAGO PABLO ALBERTO
 
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...SANTIAGO PABLO ALBERTO
 
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...SANTIAGO PABLO ALBERTO
 
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...SANTIAGO PABLO ALBERTO
 

Más de SANTIAGO PABLO ALBERTO (20)

secuencia electroneumática parte 1
secuencia electroneumática parte 1secuencia electroneumática parte 1
secuencia electroneumática parte 1
 
secuencia electroneumática parte 2
secuencia electroneumática parte 2secuencia electroneumática parte 2
secuencia electroneumática parte 2
 
Manual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzadaManual de teoría y practica electroneumática avanzada
Manual de teoría y practica electroneumática avanzada
 
Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez Programacion de PLC basado en Rslogix 500 por Roni Domínguez
Programacion de PLC basado en Rslogix 500 por Roni Domínguez
 
Programación de microcontroladores PIC en C con Fabio Pereira
Programación de microcontroladores PIC en  C con Fabio PereiraProgramación de microcontroladores PIC en  C con Fabio Pereira
Programación de microcontroladores PIC en C con Fabio Pereira
 
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
Análisis y Diseño de Sistemas de Control Digital por Ricardo Fernandez del Bu...
 
Arduino: Arduino de cero a experto
Arduino: Arduino de cero a expertoArduino: Arduino de cero a experto
Arduino: Arduino de cero a experto
 
Fisica I
Fisica IFisica I
Fisica I
 
Quimica.pdf
Quimica.pdfQuimica.pdf
Quimica.pdf
 
Manual básico PLC OMRON
Manual básico PLC OMRON Manual básico PLC OMRON
Manual básico PLC OMRON
 
Programación de autómatas PLC OMRON CJ/CP1
Programación de  autómatas PLC OMRON CJ/CP1Programación de  autómatas PLC OMRON CJ/CP1
Programación de autómatas PLC OMRON CJ/CP1
 
Manual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMARTManual del sistema del controlador programable S7-200 SMART
Manual del sistema del controlador programable S7-200 SMART
 
Catálogo de PLC S7-200 SMART
Catálogo de PLC S7-200 SMART Catálogo de PLC S7-200 SMART
Catálogo de PLC S7-200 SMART
 
PLC: Automatismos industriales
PLC: Automatismos industrialesPLC: Automatismos industriales
PLC: Automatismos industriales
 
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
PLC: Buses industriales y de campo practicas de laboratorio por Jose Miguel R...
 
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...PLC y Electroneumática: Electricidad y Automatismo eléctrico por  Luis Miguel...
PLC y Electroneumática: Electricidad y Automatismo eléctrico por Luis Miguel...
 
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
Electrónica: Diseño y desarrollo de circuitos impresos con Kicad por Miguel P...
 
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
PLC: Diseño, construcción y control de un motor doble Dahlander(cuatro veloci...
 
PLC: Motor Dahlander
PLC: Motor DahlanderPLC: Motor Dahlander
PLC: Motor Dahlander
 
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...Electrónica digital:  Introducción a la Lógica Digital - Teoría, Problemas y ...
Electrónica digital: Introducción a la Lógica Digital - Teoría, Problemas y ...
 

Último

RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADESRECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADESyanicsapernia5g
 
UNIDAD 2.- SENSORES.TIPOS DE SENSORES Y SU CLASIFICAIÓN
UNIDAD 2.- SENSORES.TIPOS DE SENSORES  Y SU CLASIFICAIÓNUNIDAD 2.- SENSORES.TIPOS DE SENSORES  Y SU CLASIFICAIÓN
UNIDAD 2.- SENSORES.TIPOS DE SENSORES Y SU CLASIFICAIÓNLuisLobatoingaruca
 
INFORME de actividades para pago de servicio
INFORME de actividades para pago de servicioINFORME de actividades para pago de servicio
INFORME de actividades para pago de servicioNelsonSabinoTtitoMur1
 
Trabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfTrabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfLimbergleoMamaniIsit
 
auditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridadauditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridadNELSON QUINTANA
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfrefrielectriccarlyz
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxJulio Lovon
 
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdfMirkaCBauer
 
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxholferpandiacondori
 
Sistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuhSistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuhFoxy963
 
Instalacion de un Sistema contra incendio
Instalacion de un Sistema contra incendioInstalacion de un Sistema contra incendio
Instalacion de un Sistema contra incendioPardoGasca
 
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdfTECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdfEddieEDM
 
1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf
1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf
1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdfJlnParada
 
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfslideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfWaldo Eber Melendez Garro
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de GestiónYanet Caldas
 
Métodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfMétodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfJuvenalriv
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricasurAN077
 
IG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendacionesIG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendacionesPardoGasca
 
Presentacion Feria Cientifica Proyecto.pptx
Presentacion Feria Cientifica Proyecto.pptxPresentacion Feria Cientifica Proyecto.pptx
Presentacion Feria Cientifica Proyecto.pptxInstitutoTeodoroKint
 
Matematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosMatematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosSALVADOR ALTEZ PALOMINO
 

Último (20)

RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADESRECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
RECONOCIMIENTO DE LIPIDOS Y ALGUNAS PROPIEDADES
 
UNIDAD 2.- SENSORES.TIPOS DE SENSORES Y SU CLASIFICAIÓN
UNIDAD 2.- SENSORES.TIPOS DE SENSORES  Y SU CLASIFICAIÓNUNIDAD 2.- SENSORES.TIPOS DE SENSORES  Y SU CLASIFICAIÓN
UNIDAD 2.- SENSORES.TIPOS DE SENSORES Y SU CLASIFICAIÓN
 
INFORME de actividades para pago de servicio
INFORME de actividades para pago de servicioINFORME de actividades para pago de servicio
INFORME de actividades para pago de servicio
 
Trabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfTrabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdf
 
auditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridadauditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridad
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptx
 
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
 
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
 
Sistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuhSistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuh
 
Instalacion de un Sistema contra incendio
Instalacion de un Sistema contra incendioInstalacion de un Sistema contra incendio
Instalacion de un Sistema contra incendio
 
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdfTECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
 
1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf
1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf
1 CENTROIDES 2°Computohhhhhhhhhhhhhhhh.pdf
 
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfslideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de Gestión
 
Métodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfMétodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdf
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas
 
IG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendacionesIG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendaciones
 
Presentacion Feria Cientifica Proyecto.pptx
Presentacion Feria Cientifica Proyecto.pptxPresentacion Feria Cientifica Proyecto.pptx
Presentacion Feria Cientifica Proyecto.pptx
 
Matematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosMatematica Basica Limites indeterminados
Matematica Basica Limites indeterminados
 

Microcontroladores PIC: Implementación de una maquina de estados en un PIC

  • 1. www.aquihayapuntes.com Implementación de una Máquina de Estados Finita en un PIC Ejemplo de cómo implementar una máquina de estados en un Microcontrolador PIC utilizando Qfsm una herramienta gráfica de diseño de Maquinas de Estados Finitas. Biblioman 03/09/2011
  • 2. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 2 Introducción En este pequeño tutorial vamos a ver lo fácil que es crear una Máquina de Estados Finita e implementar el código resultante en un Microcontrolador. La teoría de lo que es una máquina de estados y como implementarla a través del DTE (Diagrama de Transiciones de Estados) ya se explico en este artículo, por lo que si no lo habéis leído todavía recomiendo su lectura antes de empezar a leer este. Para ayudarnos en el diseño de la Máquina de Estados y la posterior codificación en C nos vamos a ayudar de una herramienta gráfica concretamente Qfsm, un proyecto Multiplataforma de software libre realizado con Qt . Como ejemplo vamos hacer el del movimiento del robot visto en el primer artículo (así sirve de comparación). Por lo que el diagrama de estados será el mismo, lo que vamos a ver ahora es como crearlo con este IDE. Creación del Diagrama de Estados Para crear una nueva máquina de estados hacemos clic en File ->New
  • 3. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 3 Lo más importante en la ventana que nos aparece es lo que está dentro de los recuadros Moore y Mealy. En el recuadro Moore pondremos el número de salidas y el nombre de estas que tendrá el Autómata y en definitiva nuestro PIC. Las entradas las pondremos en el apartado para Mealy, las salidas aquí no hace falta ponerlas porque al final lo que vamos a implementar es un Autómata de Moore. Una vez que tengamos creada la Máquina de Estados deberemos incluir los diferentes estados que tendrá el autómata, para ello hacemos clic en State-> New o pinchando directamente en el icono que hay en la barra de herramientas.
  • 4. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 4 En esta ventana pondremos: en la caja de texto identificada como Name el nombre con el que queremos identificar el estado (es solo una etiqueta) el estado se identifica realmente por el número en binario que hay en la caja de texto Code, (al crear el estado ya se asigna un número por defecto). En Moore Outpts pondremos la salida de Moore que queremos asociar al estado que acabamos de crear. Una vez hecho esto el siguiente paso es unir los estados por medio de transiciones, para ello hacemos clic en Add Transition en la barra de herramientas, después hacemos clic en el estado donde queremos iniciar la transición y arrastramos la flecha al estado de destino. Repetimos el proceso con cada uno de los estados y transiciones que tenga nuestro autómata.
  • 5. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 5 En el caso de nuestro ejemplo (el movimiento del robot) quedaría así: Una vez creado muestro diagrama de estados podemos chequearlo, para ello hacemos clic en Machine-> Integrity Check, nos aparecerá la siguiente ventana:
  • 6. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 6 Donde sí nuestro autómata es correcto aparecerán con una aspa verde los diferentes chequeos realizados. Este tipo de test nos sirve para saber si nuestro autómata es determinista, es decir, que no tenga estados y condiciones ambiguas, el diseño lógico es responsabilidad nuestra y la aplicación no funcionará correctamente si está mal diseñado, realmente está es la única complicación que hay, todo lo demás es un proceso mecánico e igual para cualquier programa que queramos hacer. Simulando el diagrama de Estados Una vez creado el diagrama de estados podemos simularlo desde el propio IDE, para ello hacemos clic en Machine-> Simulate… o directamente desde el botón Simulate que hay en la barra de herramientas, nos aparecerá la siguiente ventana: La simulación empezará en el estado de inicio o reset, representándose por medio de un cuadrado de color rojo el estado en el que nos encontramos, a partir de aquí meteremos las entradas en la caja de texto que pone Inputs y podremos ver la evolución de los estados.
  • 7. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 7 Creación del programa en C Una vez comprobado que nuestra máquina de estados funciona correctamente exportaremos el código, el IDE permite la exportación directa a diferentes lenguajes de descripción hardware como: AHDL, VHDL, Verilog HDL, etc. pero no tiene la opción (de momento) de exportar el código a un lenguaje de alto nivel como el C que pueda ser compilado para un microcontrolador, pero no importa mucho ya que el hacer la portabilidad manualmente resulta fácil. Para ello seleccionaremos exportar a AHDL que es un lenguaje de Descripción Hardware propietario de Altera usado para la programación de CPLDs y FPGAs, el por qué seleccionar AHDL y no otro es porque este tiene la ventaja de que su sintaxis es parecida al lenguaje C.
  • 8. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 8 El código AHDL generado por el IDE para nuestro ejemplo es el siguiente: % This file was generated by % % Qfsm Version 0.52 % % (C) Stefan Duffner, Rainer Strobel % SUBDESIGN Ejemplo_robot (clock, reset :INPUT; I1,I0 :INPUT; :OUTPUT; M1,M2 :OUTPUT;) VARIABLE fsm : MACHINE OF BITS(s0, s1) WITH STATES ( Para = B"00", Adel. = B"01", Atras = B"10"); reset_async : NODE; _asyncM1, _asyncM2 : NODE; BEGIN reset_sync = DFF(reset,clock,VCC,VCC); fsm.reset = reset_sync; fsm.clk = clock; M1 = DFF(M1_async,clock,VCC,VCC); M2 = DFF(M2_async,clock,VCC,VCC); CASE fsm IS WHEN Para => IF (I1,I0) == B"10" THEN END IF; IF (I1,I0) == B"01" THEN fsm = Adel.; (_asyncM1, _asyncM2) = B"01";
  • 9. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 9 END IF; IF (I1,I0) == B"11" THEN fsm = Atras; (_asyncM1, _asyncM2) = B"10"; END IF; IF (I1,I0) == B"00" THEN END IF; WHEN Adel. => IF (I1,I0) == B"00" THEN END IF; IF (I1,I0) == B"01" THEN END IF; IF (I1,I0) == B"10" THEN fsm = Para; (_asyncM1, _asyncM2) = B"00"; END IF; IF (I1,I0) == B"11" THEN fsm = Atras; (_asyncM1, _asyncM2) = B"10"; END IF; WHEN Atras => IF (I1,I0) == B"10" THEN fsm = Para; (_asyncM1, _asyncM2) = B"00"; END IF; IF (I1,I0) == B"00" THEN END IF; IF (I1,I0) == B"11" THEN END IF; IF (I1,I0) == B"01" THEN
  • 10. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 10 fsm = Adel.; (_asyncM1, _asyncM2) = B"01"; END IF; END CASE; END; Y el código resultante una vez portado a C para el compilador de CCS será el siguiente: ////////////////////////////////////////////////////////////////////// //Ejemplo de Autómata de MOORE. Implementado en un PIC // //Basado en el código generado por Qsfm. // //WWW.AQUIHAYAPUNTES.COM ////////////////////////////////////////////////////////////////////// #include <16F877.h> #FUSES NOWDT, XT, NOPUT, PROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG #use delay(clock=20000000) //Definición de registros #byte PORTA=0x05 #byte PORTB=0x06 #bit RB0=PORTB.0 #bit RB1=PORTB.1 //Definición de los tres estados posibles. #DEFINE PARA 0 #DEFINE ADELANTE 1 #DEFINE ATRAS 2 //Función principal. void main() { //Inicialización de registros. set_tris_b (0x00);//RB0 como salida RB0=0; RB1=0; //Declaración de variables de la Máquina de estados. int ESTADO=0; while(true){ switch(ESTADO) { case PARA: {
  • 11. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 11 // if (PORTA==2); if (PORTA==1){ ESTADO=ADELANTE; RB0=1; RB1=0; } if (PORTA==3){ ESTADO=ATRAS; RB0=0; RB1=1; } //if (PORTA==0); break; } case ADELANTE: { // if (PORTA==0); // if (PORTA==1); if (PORTA==2){ ESTADO=PARA; RB0=0; RB1=0; } if (PORTA==3){ ESTADO=ATRAS; RB0=0; RB1=1; } break; } case ATRAS: { if (PORTA==2){ ESTADO=PARA; RB0=0; RB1=0; } // if (PORTA==0); // if (PORTA==3); if (PORTA==1){ ESTADO=ADELANTE; RB0=1; RB1=0; } break; } default: break; } } }
  • 12. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 12 La parte del código comentado son sentencias if que genera el IDE y que se pueden eliminar una vez optimizado un poco el código generado. Circuito final Una vez compilado el código con CCS tendremos como siempre un .HEX que podremos programar en el PIC y probar en un circuito real o simularlo en Proteus. Fuentes de Información qfsm Qt CCS Custom Computer Services En el foro tenéis el .DTE y .DNS del ejemplo y más ejemplos de usuarios del foro que han realizado su propia máquina de estados, como el proyecto de la lavadora del amigo UbunPIC. Como siempre espero vuestras sugerencias al respecto en el foro. Un saludo
  • 13. Implementación de una Máquina de Estados Finita en un PIC Biblioman www.aquihayapuntes.com Página 13 Marcas registradas Las marcas citadas en este artículo así como los programas mostrados en las imágenes procedentes de capturas de pantallas pertenecen a sus respectivos propietarios, su utilización en este artículo es con fines educativos y sin ánimo de lucro. Licencia Autor de este artículo: Biblioman Versión: 1.01 Página Web: http:www.aquihayapuntes.com Email: email.Biblioman@gmail.com Este artículo esta bajo una licencia Creative Commons: Reconocimiento-No Comercial- Compartir bajo la misma licencia.