Escolar Documentos
Profissional Documentos
Cultura Documentos
comprender intuitivamente
el desarrollo de software
DIGO
para aplicaciones
embebidas, debido a que
el código está escrito
UJO CÓ
utilizando objetos
1
gráficos, en lugar de los
lenguajes de
programación
curso FL
tradicionales como C y
ensamblador. Primer
episodio.
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
D
dotado con millones de procesos de inteligencia de
ahora se produjo en información por segundo vida, semplificandoci. Detrás
En 1947, la electrónica se ha convertido en parte de estos dispositivos, servidores incansables reales e
parte integral de nuestras vidas, y sería impensable invisibles de nuestros días, que todavía se esconden la
ahora, creen que pueden prescindir de esta pieza mano dell'uo- mo: alguien ha diseñado características,
esencial de la historia de la evolución humana. Una de ellos diseñados por vía electrónica, y se ha desarrollado
las derivaciones más comunes de esta disciplina es sin la lógica. El desarrollo de sistemas embebidos ha
duda representados por el mundo de los dispositivos experimentado su desarrollo en los últimos años, y se
integrados. Cuando hacemos una llamada telefónica, o ha pasado de dispositivos totalmente análogas a los
navegar por Internet usando nuestros teléfonos sistemas de microcontroladores, para hacer el
inteligentes, cuando conducimos nuestro coche, cuando Formance per- en el punto, ser opportunamen- lo
vamos de compras y pagar con nuestra tarjeta de planeado, usando un lenguaje apropiado la
crédito, en cada una de estas circunstancias, varios programación. La programación, el corazón real de
dispositivos electrónicos desarrollo, ha sido
La Fig. 3
Matriz de sitio
multimedia para
descargar
Flowcode.
Instalación y configuración de
Flowcode V5
Como primer argumento illustria- mo sobre cómo instalar
y configurar el IDE. El paquete de instalación Flowcode
se puede descargar desde el sitio web de Matrix ( www.
matrixmultimedia.com) y, como se mencionó
de instalación Flowcode.
anteriormente pre- actualmente soporta varios objetivos,
que corresponden Varias versiones maestras del
software. Como una versión básica del curso fue elegido
la versión para microcontroladores PIC de Microchip
Technology. Después de haber sido vinculado a la página
web de la Matriz, accedemos a la sección de descargas y
descargar la versión de PIC.
Fig. 8 Inicio de
A continuación, entramos en nuestro nombre y el nombre
instalación del
de la organización (en este caso nos hemos referido
controlador de
como "ElettronicaIn"), como se muestra en La Fig. 6, anco- pantalla para
ra y pulse el botón una vez Siguiente. Seleccionamos la E-EB006 bloque.
La Fig. 9
Interface
Flowcode.
pantalla que indica que la instalación se ha realizado la gestión del dispositivo. Por último, a través de un
correctamente. Para finalizar la instalación pulse el apropiado mago configuración, es posible establecer la
botón "Finalizar". configuración básica del microcontrolador, tales como
la frecuencia del reloj interno, cualquier protección, la
Conectamos ahora placa de desarrollo EB006 con el configuración de la memoria, etc. La interfaz Flowcode
cable USB (suministrado) a la computadora. El sistema se divide principalmente en bares y paneles, sin ognu-
opera- vo será instalar controladores adicionales y uno de los cuales tiene una tarea específica que ahora
de los dos LED en las luces de mesa, BE landoci vamos a analizar. Si se muestran no todos los bares,
informó que depurador Es activo. puede añadirlos al menú " pantallas "Simplemente
añadiendo una marca de verificación junto al nombre
que los identifica. en Fig. 9 Se muestra la pantalla prin-
Interfaz de Flowcode Flowcode Cipale. En el centro de la mo blindado es
En este punto también nuestro desarrollo de hardware una pestaña (que en nuestro caso se llama " principal "),
está configurado y listo para ser utilizado, a Que llamaremos" área del proyecto "¿Qué va a ser
continuación, pasamos a la descripción de la interfaz implementado en el diagrama de flujo. En la parte
IDE programa- ción. Como ya se ha mencionado en la izquierda de la pantalla en su lugar se presenta la
parte introductoria de este episodio, Flowcode es un barra de iconos, desde el que se puede insertar Asesor
entorno de desarrollo gráfico: esto significa que el esce- que bloquean dentro del programa.
programa no se muestra, como es el caso de los
lenguajes de programación tradicionales, a partir de
un código textual, pero estará compuesto, haciendo
uso únicamente de objetos gráficos. En el caso de la
representación elección Flowcode es el de los Fig. 10
diagramas de flujo (o diagrama de flujo). Los Barras de
herramientas.
elementos básicos del diagrama de flujo deben poner
en práctica las estructuras de control fundamentales
del programa, tales como bloques de decisión, ciclos,
retrasos, múltiples selecciones, las operaciones
lógicas y matemáticas y más.
Fig.
11 Contiene todos los bloques posibles que se 18F4550, como se muestra en Fig. 12. Ahora para la Descripción del
pueden agregar en el diagrama de flujo. Para colocar ficha " Descripción del proyecto "Y insertamos una proyecto 13
una cerradura de seguridad simplemente arrastre descripción significativa. Desde el punto de la Inserción.
dentro del diagrama: una flecha amarilla nos mostrará funcionalidad del programa no cambia nada si dejamos
el lugar exacto en el que se inserta y el icono del estos campos en blanco pero con el fin de entender
ratón cambia pren- Dendo forma del objeto que mejor lo que lleva a nuestro proyecto, que sería una
queremos insertar en nuestro diagrama de flujo. buena idea para insertar al menos una breve
descripción. En nuestro caso hemos incluido el título y
la descripción del proyecto que se realizará al final de
este episodio: un sencillo programa que parpadea un
curso FL
Vamos a describir en los próximos episodios de los LED. Dentro de la pestaña " Operaciones generales "Visible
otros bares y paneles que no hemos discutido en La Fig. 14, configuramos el proyecto para reflejar la
esta sección. implementación de hardware del sistema. El cuadro " de
la velocidad de reloj PIC "Debe ser ajustado a 48 MHz y
Crear un proyecto la caja" Configurar compo- nente "Usted debe estar
UJO
Para crear un proyecto Flowcode abierta y pulse el seleccionado. Ahora vamos a configurar los ajustes
botón " nuevo proyecto "En la barra de herramientas. específicos del microcontrolador haciendo clic en el
botón
CÓDIGO
elección, que todavía puede ser la lectura completa ficha microcontrolador, arrastrando dentro dell ' área del proyecto el
técnica específicamente el microcontrolador utilizado. icono de salida, (siente pre- en la barra de iconos) entre los
Después de rellenado correctamente todos los campos bloques de inicio y de fin, que ya están presentes de forma
pulsamos el botón Aceptar para volver a la pantalla predeterminada dentro del diagrama. Al hacer clic en el
guración proyectará de nuevo y pulse OK para iniciar la botón derecho del ratón sobre el bloque que hemos entrado
realización del diagrama de flujo. aparece la ventana emergente de Windows. Elegimos la
opción " propiedad "Y examinar la ventana que se abre, se
muestra por conveniencia de Fig. 16.
Fig. Árbol
18 decisión
binaria y la
comparación
del panel de
configuración. curso FL
CÓDIGO UJO
Decisión binaria
A través de la ' icono de decisión puede implementar la
curso FL
Selección múltiple
Mediante el uso de la ' selección del icono es posible poner
La Fig. 20
en práctica la capacidad de selección múltiple. El flujo del
Ciclo
programa se desvía a través de la rama para el que la La estructura por defecto implemente el bloque " hasta " Pero para
"mientras
ecuación comparación satisface el valor indicado en el lograr los otros dos construcciones simplemente modifican sus que"
caso específico. Donde ninguno de los casos indicados propiedades como se ha visto por los otros bloques en las (Siempre y cuando es cier
satisface la ecuación ción de la selección, el programa secciones anteriores. Vamos a explorar las tres opciones que se
llevará a cabo las instrucciones de la rama de por defecto. ofrecen:
Icono de ciclo
L ' icono de bucle Que permite alcanzar tres dife- rentes
controles de flujo:
- Hasta Ciclo "Correr hasta que ..."
- Correr hasta que se ... Al establecer las propiedades del bloque " Te- es el ciclo: "El
- Repetir valor" fecha tope "Al igual que en
La Fig. 21, lo hacemos equivalente al bloque escrito en C en la configuración de la celda de la izquierda " Nu meros
con las instrucciones " Mientras que hacer ". En este caso, la ciclos: ". El bloque es fundamental cuan- do necesitamos
instrucción de comparación se realiza al final de cada tener una porción de nuestro diagrama de flujo se lleva a
ejecución de las instrucciones contenidas dentro del bucle. cabo para un número predefinido de veces.
El código interno se ejecuta entonces al menos una vez.
La Fig. 23
Junta EB006 la
izquierda y la
pestaña E-Blocks
EB004 derecha. curso FL
CÓDIGO UJO
25.
Conectamos ahora la tarjeta EB006 con el EB004 E-
bloques usando el puerto A, como se ilustra en Fig. 26.
curso FL
Puente programador
selección
La Fig. 27
Diagrama de flujo para el
parpadeo del LED conectado g
Un pasador al puerto 0.
Multimedia. Flowcode le
permite desarrollar fácilmente
UJO CÓ
2
integradas debido a que el
código está escrito utilizando
objetos gráficos, en lugar de
curso FL
los lenguajes de
programación tradicionales
como C y ensamblador.
Segundo episodio.
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
N
LED por medio del módulo de teclado, utilizando sus respectivos
empezó a familiarizarse con el entorno de desarrollo componentes de software.
gráfico Flowcode, desarrollado por Matrix Multime-
dia. Fue presentado en el entorno gráfico, se Las variables en Flowcode
describe en detalle la interfaz, presentado las En el episodio anterior nos zato ser utilizado
estructuras de control y se ha demostrado un primer dispositivos de salida solamente y nunca hicimos uso
ejemplo de programación. En este episodio remo de variables, que son una parte muy importante de la
spieghe- el uso de variables, constantes y describir planificación, ya que nos permiten almacenar datos y
los bloques de entrada y cálculo. Más adelante realizar cálculos. A través del menú principal de
discutiremos dos características muy potentes de Flowcode " Ver-> Explorador de proyectos "Abrimos
Flowcode: macros y componentes. Con el panel adicional donde podemos ver todas las
conocimiento adquirido será lograr el segundo constantes y variables globales disponibles dentro de
proyecto práctico: la gestión del módulo de E-bloque nuestro proyecto, como se muestra en Fig. 1.
en el menú desplegable la opción " claro la selección que nos puede ayudar a
no utilizada ". elegir qué variables a utilizar, como se
muestra en
bloque de entrada y cálculo Fig. 6. Podemos elegir entre las
El último episodio que examinó el bloque variables locales y globales o entre
de salida y la zona de demora. Por lo los que, si aún no se habían creado,
tanto, somos capaces de imponer el valor podemos crearlos directamente
de un alfiler puerta / salida y esperar un desde la ventana como lo hemos
período predeterminado de tiempo entre hecho anteriormente por el panel " explora
dos operaciones. Aprendemos ahora a proyecto ". Haciendo doble clic en una
utilizar el bloque de entrada y cálculo. variable en esta lista, que puede
Fig. 6 - Ventana de Selección
entrar directamente en el panel de
variable.
configuraciones ción cuadro de texto.
Del mismo modo que las opciones
del panel de configuración de salida
Bloque de entrada "están disponibles de un solo bit "Y
El bloque de entrada es el bloqueo dual del bloque de enmascaramiento. en el ejemplo Fig.
salida que se utilizó en el episodio anterior para controlar 7 el valor Ra variables assume- de
la salida de los pines del microcontrolador. Para insertar PORTA, pero sólo para el 2º y 4º
el bloque, arrastre el " barra de iconos "El icono trozos
correspondiente en el diagrama de flujo. En cuanto a los
Fig. 7 - Ejemplo de enmascarar
otros bloques, mediante la realización de un doble clic
el puerto de entrada.
sobre el icono, es posible abrir la ventana de
configuración, que se muestra en Fig. 5.
ya que sólo los pines 1 y 3 tienen el cheque. Tomemos un
ejemplo. Supongamos que PORTA tiene un valor igual a
9, que en binario es equivalente a 0b00001001. En VA-
riabile " VariabileIngresso "Tendremos el valor 8
Al seleccionar de la lista desplegable " puerto: "Hemos enmascarado con 0b00001010 que tiene como resultado
establecido la puerta ¿hacia dónde queremos hacer la 0b00001001 Y 0b00001010 = 0b00001000, es decir, 8.
lectura y, en el cuadro de texto" variable: ", Insertamos el
nombre de la variable en la que queremos cargar el
valor leído. Pulsando la flecha a la derecha del cuadro
de texto para abrir la ventana bloque de cálculo
Otro bloque fundamental
Fig. 9 Ejemplo de
Menor que, menor que o igual a, mayor que, mayor que o
<, <=,>,> = cálculo para la
es igual
conversión de
> > << Moviéndose hacia la derecha, desplazará hacia la izquierda.
unidades de medida de
~, &, | , ^ NO, Y, O, O-exclusiva, poco a poco pulgadas a
NO, AND, OR, XOR NO, Y, O, O-exclusiva, poco a poco centímetros.
barra de componentes.
nuestro diagrama de flujo y, aunque no es obligatorio, componentes fueron hechas por Matrix Multimedia sean
DIGO
se recomienda encarecidamente que incluya los útiles en el desa- rrollo de proyectos complejos. La
comentarios dentro de la CA-silla " Descripción nuevo biblioteca de componentes se divide según tipolo- ya.
macro "Para facilitar la comprensión de futuro es Podemos encontrar los siguientes grupos principales:
UJO CÓ
funcionalistas que se desarrollan en el interior. Una Municipios, entradas, salidas, sistemas de transmisión de
macro puede comunicar con el programa de dia- que datos, inalámbricas, periféricos, electromecánicos,
instancia haciendo uso de parámetros, valores de Módulos MIAC y Varios. Por ahora, los grupos y los
retorno y variables globales, exactamente como sucede componentes disponibles son las que vamos a mostrar
curso FL
para una función clásica en C. Se utilizan los durante el curso, pero en versiones posteriores de esta
parámetros cuando es necesario para pasar valores de biblioteca que seguramente será más amplia y completa
la diagrama de llamar a la macro. El valor de retorno se de nuevas características.
utiliza cuando se desea volver a la persona que llama
diagrama de la pena mientras que las variables
globales se pueden utilizar en todos los demás casos.
Cuando una macro utiliza las variables globales que La bandeja de componentes
buo- NA conforme a indicar, en la descripción de la La biblioteca de componentes Flowcode está disponible a
macro, el tipo y el nombre de las variables globales de través " bar ts componen- "Se muestra en Fig. 10. Los
una manera tal que, si tuviera que volver macro bloques disponibles están organizados por áreas
reutilizable en otros diagramas, puede volver a crear temáticas con el fin de facilitar a nosotros en la búsqueda.
todas las variables en forma corret - a. Una vez creado, Los componentes se pueden utilizar para ayudar en la
el macro puede ser instanciado en el diagrama de flujo implementación de sistemas, también plexo muy com-, lo
mediante el icono "macro" y mejorar adecuadamente que nos permite pasar por alto la aplicación real de la
ningún parámetro. Durante la explicación del proyecto depilación con cera conductor com-, dejando que se
práctico de este episodio, veremos un ejemplo que nos centren en
ayudará a comprender cómo configurar y utilizar una
macro dentro de un proyecto Flowcode.
componentes Fig. 11
La capacidad de crear macros es muy importante, tan componentes
importante es la capacidad de utilizar los principales
disponibles en
componentes. la
Flowcode.
características que queremos implementar. Para ser en el panel en la parte inferior, el componente que
utilizado correctamente, un componente - después de elegimos.
haber sido insertada Ahora es el componente activo dentro de nuestro
- Se debe configurar el uso de su propia interfaz proyecto, pero, para que funcione correctamente, debe
específica. En las siguientes secciones vamos a ver haber conexiones configurado adecuadamente. Haga
algunos ejemplos. clic en el componente con el botón derecho del ratón,
como en Fig. 13. En este punto se abre un menú
Añadir un componente de software desplegable: pulse sobre " conexiones "De tal manera
Para añadir una pieza de software basta con hacer que se abre la configuración de Dow-ganar como se
clic en la barra de Biblioteca (en nuestro caso muestra en Fig. 14.
insertamos un LED, como represen- tantes en Fig.
13) y veremos Podremos configurar las conexiones para conectar
Fig. 13
conexiones
de menú para
el
componente.
curso FL
CÓDIGO UJO
Fig. 14
curso FL
Ejemplo de
nection con-
para el
componente el componente de LED a la clavija 0 de Porta. Ahora el confianza con los primeros componentes de Flowcode. Lo
LED.
componente de software se configura y se puede añadir, que pretendemos es lograr un sistema de control que
en caso necesario, dentro del flujo de nuestro programa. gestiona los datos de entrada desde un teclado con 12
Para ello, basta con introducir el icono " macro oeste teclas (el clásico teclado del teléfono) y utiliza la
com- "Selección desde" barra de iconos "Y arrastrarlo a la información leída para gestionar un grupo de tres LED.
posición correcta dentro de nuestro diagrama. Más Las especificaciones de nuestro sistema son los
DIRECCIÓN que puede utilizar el mismo nente que para siguientes:
llevar a cabo una o más actividades dentro del diagrama
de flujo. Para que funcione correctamente, la cerradura • la presión de la tecla correspondiente del teclado 1 Ac- encender y
de seguridad debe estar configurado. Para ello basta apagar LED1 y fuera de los otros LEDs;
con entrar en él con un doble clic en la ventana " Propiedades:
• la presión de la tecla correspondiente del teclado 2 Ac- encender y
Componente macro "Selezionia- y Mo en el lado apagar el LED2 y apagar los demás LEDs;
izquierdo el componente al que se debe hacer referencia • la presión de la tecla correspondiente del teclado 3 Ac- encender y
el bloque, en nuestro caso LED (0). Ahora vamos a ver apagar el LED3 y apagar los demás LEDs;
en las macros del lado derecho que se puede llamar, • cuando se pulsa la tecla de almohadilla del teclado para
como se muestra en Fig. apagar todos los LED.
Proyecto práctica:
3 gestión de LED a través del teclado
Pasemos ahora a la realización de un proyecto que
nos permitirá poner en práctica algunos de los
conceptos en esta entrega, y que nos ayuda a tomar Fig. 16 - propiedad adicional relacionada
mayores el componente de LED.
Para este proyecto necesitamos los siguientes En este nuevo proyecto vamos a hacer uso del primer
componentes: componente, a continuación, la barra de componentes
insertar un componente en nuestro proyecto " teclado "Tres
- EB006 "Tablero PICmicromultiprogrammer- USB" ( PIC18F4550
y cuarzo 12MHz) componentes" LED ", Que son dispositivos que dovre- mo
- EB004 "LED Board" manejar. Como se explicó anteriormente, para insertar
- EB014 "Keypadboard" un componente debe sele-zionarlo de la bandeja de
componentes. Cuando se selecciona, el componente
Conectamos ahora las tarjetas con el fin de tener los Aparecerá en el panel debajo de la zona del proyecto.
LED del teclado de Porta y PORTB, como se muestra Luego configuramos las conexiones de los
en Fig. 17. componentes, comenzando desde el teclado.
Ahora abra el proyecto vacío que tenido- mo crea Realizamos un clic con el botón derecho del ratón en el
con el nombre " ConfigurazioneBase. FCF "Y teclado apareció componente pannel- sobre él y
guardarlo como" SwitchLed.fcf ". De esta manera, el seleccione la opción " conexiones ". Se verá la pantalla Fig.
microcontrolador ya está configurado para trabajar 18.
con el hardware a nuestra disposición: por lo que
podemos dedicar a la realización del diagrama de
control del sistema. Como se muestra en la figura, conectar las tres
columnas y cuatro filas a puerto B (las tres columnas a
los pines 0, 1 y 2 y los cuatro curso FL
Fig. 18 Fig. 19
Conexiones de Ventana
la ventana com-
componente conexiones
teclado. LED oeste.
CÓDIGO UJO
La Fig. 21 Creación
DIGO
de la variable
LetturaKeypad.
UJO CÓ
curso FL
La Fig. 24 LED
Propiedades de
componente.
Fig. 26 Diagrama de
bloques general. curso FL
CÓDIGO UJO
descubrimiento de Flowcode, el
desarrollo gráfico innovador
UJO CÓ
para microcontroladores
ofrecidos por Matrix Multimedia.
3
En este episodio nos ocupamos
de la aplicación de las
curso FL
interrupciones en Flowcode y
comenzamos a analizar los
componentes. En tercer
episodio.
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
N
co más evolucionado que el anterior: un termómetro
de desarrollo en detalle, describiendo la estructura y el con pantalla LCD. Para los proyectos de este episodio
análisis de los elementos básicos que las estructuras de va a cambiar microcontrolador, desde el PIC18F4550
control y estructuras de datos. En este episodio vamos a PIC18F4580. Veremos cómo es simple, así, la
completar el análisis de las estructuras de control, que ejecución del proyecto con Flowcode, los objetivos de
describe la gestión de interrupciones, y continuar con el cambio de configuración sin sufrir proble- mática y
análisis de los componentes (que son uno de los vamos a experimentar con un PIC diferente. Para
principales valores añadidos de Flowcode) que describe ayudar a los lectores en sperimentazio- hemos creado
el componente de ADC y el componente LCD. un archivos de configuraciones básicas ción para el
Posteriormente pasamos a la descripción de la gestión PIC18F4580, tal como lo había hecho anteriormente.
rie memo- no volátil, analizando el componente
EEPROM. Aprovechando el nuevo conocimiento
adquirido se dará cuenta de un proyecto prati-
interrupciones
Como todos los entornos de desarrollo
del bloque de
interrupción.
diferentes interrupciones en temporizadores en entradas
puerto B, al recibir el puerto UART y más. Una vez que
seleccione la fuente de interrupción debe cado también
indicación de su ISR. Flowcode nutos gesti- este aspecto,
proporcionando la capacidad de llamar a una macro
apropiado creado anteriormente. Esto no es diferente a lo
que ocurre con otros sistemas de desarrollo basados en
microcontroladores, incluso Flowcode proporciona lenguas clásicas, tales como, por ejemplo, C: en ese caso
manejo de interrupciones. En un sistema embebido el ISR es ge- neralmente una función común escrito en
una interrupción (o interrupción) es una señal lenguaje C, que, sin embargo, tiene la particularidad que
asíncrona con respecto a la ejecución del programa se llamará cuando se genera la interrupción
principal que, procedente de un dispositivo específico, correspondiente. El concepto de interrupción es lo
lo que indica una situación particular que requiere un suficientemente suave como en el campo del desarrollo
manejo diferente en comparación con el resto del embebido, ya que las interrupciones son ampliamente
programa. Una interrupción puede prove- ne de un utilizados en la gestión del hardware y son de una
puerto de comunicación, por un recurso interno, por importancia fundamental, ya que los sistemas
un temporizador, y así sucesivamente. Normalmente, desarrollados se vuelven más complejas. Tratamos de
cuando se genera una interrupción, la gestión del solucionar este concepto con un ejemplo, proponiendo
programa se detiene, la posición actual del contador proyecto práctico visto en el primer episodio con un
de programa y el contexto de ejecución se guardan en manejo de interrupciones. En el primer episodio que
la pila y el programa salta a una ubicación específica, habíamos parpadeo de un LED a 1 Hz, utilizando los
que es una función misma interrupción y la retrasos de software. Ahora vamos a tratar de hacer lo
especificación de la arquitectura del microcontrolador. mismo, pero en lugar de la generación de los ciclos de
En este punto, según el caso, software lagunas de retardo, que intenta crear la
organización empleos temporizada con un recurso de
hardware interno al microcontrolador. Para ello se utiliza
el temporizador 2, que puede generar una rupt inter
cuando su valor corresponde a la de un registro de
comparación. Dimientos de modo que vamos a crear un
nuevo proyecto Flowcode, a partir de la plantilla
configurador razioneBase2, suministrada con el material
relacionado con este episodio, y cambiar el nombre del
proyecto en Interrupt.fcf. En primer lugar, se crea una
macro que utilizará como ISR, nombrando LED. Llevamos
a cabo las medidas necesarias, como hemos visto en el
episodio anterior, y también generar una variable que
llamaremos LEDStatus (leana boo-, valor inicial falso) y
En Flowcode existe un bloque especial, presente en el otro que llamaremos Contador (byte, el valor inicial
interior de la barra de iconos y precisamente llamado
"bloque de interrupción", que sirve para poner en práctica
curso FL
la gestión de interrupciones dentro de un programado pero
Flowcode. Si insertamos este bloque dentro de un
esquema de Flowcode y haga doble clic en el botón
izquierdo del ratón, se puede acceder a las propiedades
de la ventana del bloque, como se muestra en Fig. 1.
CÓDIGO UJO
Fig. 2
curso FL
temporizador
Propiedades de
interrupción 2.
Como se puede ver - ajustes de los iconos por 6 que nos permite configurar las conexiones entre la
curso FL
separado - alcu- disponibles pantalla. Desde esta ventana
LeggiComeByte El valor del canal seleccionado se adquiere, y el resultado se suministra con formato numérico y la resolución de 8 bits.
El valor del canal seleccionado se adquiere, y el resultado se suministra con formato numérico y 10 bits o 12 bits
LeggiComeIntero
CÓDIGO
El valor del canal seleccionado se adquiere y el resultado se suministra con un formato de tensión (el valor debe
LeggiComeTensione
ser almacenado en una variable de tipo float).
el valor del canal seleccionado se adquiere y el resultado se proporciona como una cadena de caracteres (el valor debe
LeggiComeStringa
ser almacenados en una matriz de caracteres).
vamos a echar un vistazo a Dispo- macro nibili para este lectura); esto puede ser utilizado para el
componente, para entender cómo gestionar eficazmente almacenamiento de datos que no se debe perder
la no- después de un apagado del sistema. Una EEPROM a
bordo puede ser una ventaja grande en el caso de que
sea necesario el desarrollo de un sistema integrado que
tiene requisitos de almacenamiento permanente de
determinados datos, porque en este caso no es
necesario recurrir a la utilización de una I2C memoria
externa o SPI. El PIC18F4580 tiene 256 bytes de
EEPROM a bordo, garantizados para aproximadamente
un millón de ciclos de escritura y con una retención de
más de 40 años.
La Fig. 6
Conexiones
componente
LCD.
El componente de EEPROM
Flowcode tiene un componente especial para la gestión
de la memoria EEPROM in- tríada. Tal componente
puede ser insertado desde la bandeja de componentes,
mediante la selección bajo el título "varios" componente
Fig. 7
"EE- PROM". Una vez insertado el componente verá
propiedad
adicional del aparecer en un panel matriz bidimensional que muestra
componente la ubicación de la memoria y su contenido. Para el
LCD. componente de EEPROM no están presentes en las
conexiones, ya que este componente no está conectado
externamente como el autobús a la gestión de memoria
es interno al chip. En cambio, tiene la opción
cursor Coloque el cursor en la posición indicada por los dos argumentos x e Y (coordenadas del cursor).
Scrivi_RAM Él escribe en los datos del controlador de memoria RAM pasado como argumento.
Tabla 3
Nombre de la macro descripción El único cuidado que se utilizará es dejar un intervalo
Lee la posición de memoria especificada con la dirección de para- de al menos 200 microsegundos entre un escrito y Siva
leer metros y devuelve el valor leído en la variable siguientes que, para garantizar el tiempo necesario
regresar.
para la finalización de la operación. Para probar la
Escribe la variable especificada con el parámetro dado dentro de la
escribir ubicación especificada con el parámetro
EEPROM un diagrama de flujo de ensayo que escribe
dirección. en todas las 256 posiciones de memoria se ha
realizado un número creciente de 0 a 256. La fuente
Flowcode EepromTest.fcf está disponible dentro del
material de soporte.
curso FL
UJO
Fig. LM335 10 de
conexión.
curso FL
La Fig. 14
Inicialización Macro.
Fig. 17 La
conversión de la
Partimos de la inicialización macro, que tiene el meTensione "componente de la ADC, que permite
tensión de datos en
objetivo de inicializar la pantalla y las variables y adquirir un canal analógico que depende directamente el valor de
escribir la primera línea de texto para informar al dada en la tensión (en voltios), asociable a una variable temperatura
usuario. El diagrama de flujo de la inicialización macro de (coma flotante) de tipo flotador. Asociamos el valor correspondiente.
se informa en Fig. 14. de retorno a va- riabile "tensión", que habíamos creado
anteriormente. en La Fig. 16 muestra la ventana de
Como puede verse, el uso de tres bloques "Call propiedades del bloque "Componente Macro de
componente macro", un bloque "Cálculo" y un bloque de llamadas" que realiza la operación. Ahora usted tiene
"retardo". En la secuencia de operaciones realizadas son que convertir los datos leídos a una temperatura dada.
las siguientes: inicialización de la pantalla, puli- nutos, se El LM335 tiene una señal de salida proporcional a la
muestra la cadena "sistema de inicio ...", inicializa las temperatura con un factor de proporcionalidad de 10
variables y genera una mV / Kelvin. Invertimos la fórmula, escalar el valor de
tensión V a 273 mV y restar el fin de obtener la
temperatura en grados Celsius. Para introducir esta
formula en el código se utiliza un bloque de cálculo,
La Fig. 16 como se informa en Fig. 17.
propiedades
de bloque
ventana
"Call
Componente
macro".
Los datos almacenados dentro de la "temperatura"
variable de ya se convierte correctamente en grados
Celsius, y luego simplemente la convierten en la
codificación ASCII para obtener la correcta visualización.
Ahora se ha completado la segunda macro. Pasamos el
último de lograr la macro, el punto de vista macro, que
llamaremos "VisualizzaTemperatura", cuyo diagrama de
flujo se muestra en la Fig. 18.
1 segundo de retardo. Muy simple. Ahora pasamos En este diagrama de flujo que sólo llama a componeti
a la lectura macro del sensor de temperatura, que macro, ya que los datos están listos y lo único que
hemos denominado "AcquisisciLM335", cuyo tenemos que hacer es escribir correctamente en la
diagrama de flujo se muestra en la Fig. 15. pantalla, usando la pantalla LCD suministrado
funciones com- occidentales y cadenas turísticos con-.
Esta macro es el corazón del programa, sin embargo, Por un lado, la limpieza de la pantalla, por lo que no
el poder de Flowcode nos permite reducir a sólo dos hay partes de aprieta escritos con anterioridad.
bloques. La tarea a realizar es la adquisición de los Después de que muestra la cadena "Temperatura", ya
datos de tensión y hacer que la temperatura de que la cadena de encabezado. En este punto, usando
conversión, de modo que se pueden visualizar la función de "Cursor" para desplazarse en la segunda
fácilmente en la pantalla. En primer lugar, se utiliza la línea, que será EE.UU.-
macro "LeggiCo-
ta para mostrar los datos. Aquí podemos utilizar la macro retardo de software se insertó un segundo.
"Número de pantalla" para mostrar en pantalla el valor
imma- almacenado en la "temperatura" variable que, Ahora podemos proceder a la compilación ción y
como hemos visto anteriormente, contiene el valor de la ejecución del programa. Una vez programado el
temperatura en grados CEL Sius. Ahora no hay nada que micro, si hemos realizado todo correctamente, vamos
hacer sino para mostrar el carácter "C" para indicar que a ver el valor de la temperatura leída por el sensor en
la temperatura está en grados Celsius y vuelva a mover la pantalla. Si la lectura es correcta, podemos actuar
el cursor a la base de la posición za: nuestro tercer sobre poten- ziometro el circuito de calibración para
macro ya está listo. Ahora tenemos los tres macro listo ajustarlo.
para su uso, el último que hay que hacer es ponerlos
juntos en el diagrama de flujo principal y empezar a
construir. El diagrama de flujo principal se muestra en la Fig. En este episodio empezamos a familiarizarse con los
19. componentes de Flowcode, realizando un primer
programado, pero de un peso determinado (un dispositivo
curso FL
que tiene una función real), y comin- Ciato para darse
cuenta de cómo, mediante la inserción de los componentes
Como se puede ver que ha sido llamado el primer apropiados y conectar un par de bloques, puede ser
macro "inicialización". Entonces, en un bucle while, se implementado en un corto período de tiempo también
incluyeron las dos llamadas a la macro funciones de una cierta complejidad. En la próxima entrega
UJO
"AcquisisciLM335" y "VisualizzaTempera- tura." La con- Vamos a seguir este camino, examinando en detalle
primera macro adquiere el valor de voltaje del sensor las interfaces de comunicación que nos permiten crear
CÓDIGO
de temperatura y pasa los datos a la segunda, que los sistemas más complejos, interconectados con los
muestra en la pantalla LCD. Para evitar la excesiva dispositivos periféricos de ésteres más inteligente.
efecto de "Actualizar" en la pantalla
descubrimiento de Flowcode, el
sistema de desarrollo gráfico
UJO CÓ
para microcontroladores
ofrecidos por Matrix
4
Multimedia, en el que el código
está escrito utilizando objetos
curso FL
gráficos.
Cuarto episodio.
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
N
No podían interactuar con plataformas externas.
interrupción en el manejo de Flowcode y les enseña a Vamos a discutir ahora los otros componentes clave de
utilizar los componentes ADC, LCD y memoria interna EE un microcontrolador, que son las interfaces de
PROM. En este episodio hablamos de las principales comunicación. Los buses de comunicación están en
interfaces de comunicación en serie a disposición de los constante evolución y hoy en día hay muchos tipos.
microcontroladores de gama baja: la UART (o RS232), la Vamos a dar un pequeño paso atrás y analizar
I²C, SPI y el OneWire. Vamos a concluir con un proyecto brevemente las interfaces de comunicación que se han
práctico en el que vamos a desarrollar un control de un utilizado en las últimas décadas. Con el advenimiento
relé de la batería controlado por puerto serie. de la era digital, el sistema comuni- más ampliamente
utilizado ha sido el de "paralelo", donde los datos se
intercambian en paquetes, por lo general de 8 bits, y
una o más señales que llevan la información de reloj.
Los datos de transporte en paralelo no es
Los dispositivos de comunicación básicas
Los sistemas que hemos cubierto hasta ahora eran capaces de
manejar sólo los sistemas cerrados, es decir,
de tres enlaces:
• SDO / MOSI (Serial salida de datos) desde la que
se envían los datos;
• SDI / MISO (Serial Data Input) de la que se reciben
los datos;
Se representa la tasa de transmisión de datos. Debe ser menor que el apoyo de la componente más lento conectado al bus de
comunicación. Tomemos un ejemplo sencillo, si se asume que el componente esclavo soporta una velocidad máxima de 300
kHz comunicación y el microcontrolador
tiene una frecuencia de oscilación igual a 4 MHz.
UJO CÓ
SPI Reloj
La división de la frecuencia máxima de la comunicación para la frecuencia de oscilación del microcontrolador, se obtiene la relación máxima
que puede haber entre las dos magnitudes y elegir el valor más grande, incluyendo
los que están disponibles en el menú desplegable, que es menos el resultado de la posesión.
curso FL
SPI polaridad del reloj Se utiliza para definir el estado de la inactividad de la señal de reloj (inactivo).
SPI Reloj Edge Sirve para seleccionar si los datos se escriben en el flanco ascendente o descendente de la señal de reloj.
Se indica cuando los datos deben tomarse muestras con el fin de realizar una correcta transmisión / recepción de la
bit de muestra SPI
datos de todos los dispositivos conectados. En la práctica, el cambio del punto de muestra dada.
transmisión / recepción de datos en el bus de Si se quiere utilizar la tarjeta EB013, que contiene en
comunicación, pero sólo mostrarlos en el componente su interior una memoria FRAM (reemplazable con una
en el pannel- de Flowcode. memoria EEPROM) y un convertidor digital de ana- /
lógica, tanto de bus SPI. Para utilizar estos
Después de la configuración puede insertar macros componentes también es necesario configurar las
componente administrado desde el menú de iconos, como conexiones externas de los pasadores de apoyo. SER
se hizo para el componente del teclado y el ADC UTILIZADO Zando estos simples macro es entonces
examinado en episodios anteriores. En este caso los polos posi- ble utilizar una EEPROM / FRAM o un DAC de
principales macro disponibles para nosotros son los manera muy simple e intuitiva. Si el componente
enumerados en el Tabla 2. seleccionado no pertenece a esta lista o no
Se utiliza para eliminar las inicializaciones de la conexión SPI y puede entonces utilizar el pasador
SPI_Unint
microcontrolador como bits normales del puerto I / O.
Permite la memoria FRAM / EEPROM. Antes de cada control hacia la memoria, debe
EnableFRAM
de lo contrario serían permiten ignoran todos los comandos.
Desactiva la memoria FRAM / EEPROM para que pueda comunicarse con otros dispositivos
DisableFRAM
conectadas en el mismo bus SPI.
Era compatible, simplemente use el macro genérico una respuesta. Luego se envían, en secuencia, los La Fig. 4 del
componente i
a fin de lograr el protocolo correcto. datos en sí, siempre a partir del bit más significativo.
Propiedades 2 C
Dentro de los componentes de la barra podemos maestro.
seleccionar el controlador del bus I²C e insertarlo
El puerto I²C dentro del panel Flowcode. El panel se parece Fig. 3
Vamos ahora a describir el bus de comunicación I²C,
cuyo protocolo requiere únicamente dos líneas de
comunicación: y nos permite ver las las comunicaciones presentes en el
• SDA (Serial Line Datos) para trasmissio- / bus y ser capaces de interactuar mediante la adición de
recepción de datos I; bytes en la comunicación con el fin de hacer que la
• SCL (Serial Line Reloj) para trasmissio- que el simulación interactiva. Para utilizar el componente, debe
reloj de sincronización. configurarlo como lo hicimos preceden- temiendo el bus
SPI, pero los parámetros que se establecen son diferentes;
En el mismo bus se pueden conectar hasta 112 en el caso del bus I²C, ellos son los que figuran en el Tabla
dispositivos diferentes. A diferencia de SPI, tanto los datos 4.
en la transmisión y recepción en los que viajan en la
misma nection con- física. El bus SPI es de tipo medio-duplexEn lugar macros disponibles se resumen en Tabla
5.
porque sólo un componente a la vez puede transmitir Continuando nuestra ruta que describe ción del bus
datos; Por otra parte, la comunicación sólo puede ser de comunicación, vamos al autobús con el menor
iniciado por el maestro, que-mediana una cadena que número de conexiones posibles: una conexión única
contiene un bit de inicio, la dirección del esclavo con el que para la transmisión / recepción de señal de datos y la
quiere comunicarse y un bit que indica si se requiere sincronización: el bus OneWire. curso FL
control de la frecuencia Enableslew Active el control sobre la velocidad de respuesta (velocidad de los frentes) de la señal transmitida en el bus.
UJO
Habilitar SMBus Entradas Habilitar el uso de SMBus en conexión I²C (modo de compatibilidad).
Establecer la frecuencia con la que los datos se transmiten en el bus de comunicación. Debe obligatoriamente, como se ve para el bus SPI,
para ser menor que la velocidad máxima soportada por el componente más lento conectado al bus. valores preconfigurados pueden ser
CÓDIGO
velocidad de transmisión
utilizados (predefinidos), o de los valores personalizados
seleccionado utilizando la barra de desplazamiento.
Seleccione el dispositivo que, puestos a disposición por el microcontrolador, que está implicado en la transmisión de datos. Si hubiera
hardware de IC2 más de una disponible, como se muestra en La Fig. 4, Se pueden insertar dos componentes I²C, cada uno en un canal diferente de
manera que tenga dos bus de comunicación distinta.
Inicializa la comunicación I²C periférica interior. Debe ser llamado una vez más antes
MI2C_Init
realizar otra macro de otro modo no puede transmitir / recibir los bytes.
Se recibe un byte desde el bus de comunicación. Se requiere la mejora del parámetro que, si
MI2C_Receive_Byte
lugar para uno, indica que los bytes a recibir es el último.
MI2C_Send_Byte_Transaction Enviar a un dispositivo específico se indica el valor que se debe colocar en la dirección.
MI2C_Receive_Byte_Transaction Se recibe desde un dispositivo específico el valor cargado en el banco de memoria seleccionado.
dos o más dispositivos a través de un solo cable de valor uno lógico 1 ÷ 15 s línea a 0
interconexión. Como hay un cable dedicado para la lógico valor cero 60 mS Línea 0
Enviar una orden de reinicio y devuelve uno si no hay ningún dispositivo se reinicia o hay
oo_BusReset
dispositivos conectados al bus.
Se devuelve los datos leídos desde el dispositivo identificado por el parámetro pasado a la macro; Los dispositivos camas son
oo_GetPadByte como máximo 9 y el parámetro puede variar de 0 a 8 si un dispositivo se restablece
o no hay dispositivos conectados al bus.
Se realiza una exploración de bus para identificar el número de dispositivos. Devuelve 1 si había
oo_ScanBus
problemas durante la exploración.
oo_Get_DeviceCount Devuelve el número de dispositivos detectados en el bus después de un comando de exploración de bus.
Iniciar la conversión de los datos del dispositivo DS1820. Devuelve uno si se introduce el dispositivo en
DS1820_Start_Conversion
tiempo de espera sin terminar la conversión.
Lee valores desde el dispositivo DS1820. Sólo se puede utilizar si hay una
DS1820_Read_Scratchpad
dispositivo conectado al bus de lo contrario es necesario utilizar el oo_ReadDevice macro.
Debe configurar la pierna que se utilizará para bus de comunicación interno, pasamos a describir el
transmitir / recibir datos, como se muestra en Fig. 6. puerto RS-232, que es una de las interfaces en serie
más utilizados y simples.
Un ejemplo sencillo de un diagrama de flujo para
controlar el bus OneWire para la gestión de componente El puerto RS232
DS1820 está refinando gurado en Fig. 7: con el uso de El RS232 es una línea de comunicación asíncrona,
sólo cuatro bloques puede comunicarse con el ya que la autorización temporal no es de salida,
componente olvidando por completo todos los pero nerato ge- independientemente por los dos
problemas relacionados con la capa física y el protocolo dispositivos conectados. La conexión es de tipo
de comunicación. Ahora que hemos analizado tres punto a punto, y luego le permite comunicarse con
ejemplos de uno a sólo dos dispositivos.
Él recibe un personaje en la serie. La macro acepta como parámetro el valor del tiempo máximo de espera de los datos y si no se
ReceiveRS232Char
recibe dentro del tiempo máximo indicado INVALID_RETURN devuelve el valor (255).
Nosotros no detenerse en los detalles de cada Nuestro sistema tiene las siguientes características.
configuración, ya que nuestro objetivo es dar a todos los
aspectos básicos de la utilización de componentes • Se comunica a través de RS232 bidireccional entre el PC y la
tratados de forma rápida y eficaz; si se quería tarjeta de control del relé.
profundizar en algunas de las características y lidad • Debe ser compatible con los siguientes comandos:
funcional, siempre se puede utilizar la ayuda Flowcode, - " la "Activar relé;
se recomienda que siempre tenga a mano, ya que - " D "Relé Disable;
podría, al principio, sobre todo, garantizar que se - " R "Leer estado del relé.
aprende mucho. • La sintaxis del comando es < XP>, donde x
identifica el código de comando (que puede ser uno de
los tres comandos que se muestran en el punto
Este tipo de conexión es muy simple de usar y permite anterior), mientras p Identifica el relé controlado, y está
las comunicaciones con incluso dispositivos muy representado por un número con codificación ASCII.
complejos, tales como los receptores GPS o Así, por ejemplo, para activar el relé 3 enviar el
visualización de gráficos. Para entender mejor el comando "<A3>", para apagar el puesto relé 2 "<D2>",
potencial, pasamos ahora a realizza- ción de un mientras que para leer el estado del relé 1 enviar el
proyecto simple práctica, lo que nos permitirá comando "<R1>".
gestionar una batería de relé a través del puerto serie
de PC.
• La sintaxis de las respuestas a los comandos es
curso FL
CÓDIGO UJO
Fig. 11 - programa
de control principal.
Enlace a ellos con el fin de tener la tarjeta en el Ahora que todo está listo, podemos dedicarnos a la
EB038 y EB015 puerta En la puerta elaboración del diagrama de flujo. Para OT timizzare el
C, como se muestra en Fig. 8. uso de Flowcode puede Pen- división Sare, el uso de
Las juntas deben ser alimentados con el fin de funcionar macros, todo el programa en tres partes principales:
correctamente, porque a través del conector DB9 pasar sólo
conexiones de datos y la referencia de tierra, por lo tanto, el • = inicialización inicializa todo lo que tiene que ser
uso de los cables de prototipazio- que, conectar todos los pre-establecido antes de que los principales comience el
terminales indicados con "+ V" al correspondiente terminal bucle;
de SChE - como EB006. Vamos posición, por otra parte, los • principales = llama a la inicialización del stema Si-, lee
conectores de datos de parches Re en C y 2 EB038 posición los caracteres recibidos de serie y los agrega en una
de la tarjeta, y en la posición baja de la pestaña EB015. Las sola cadena con el fin de examinarlo mediante un
otras configuraciones de la tarjeta sencillo control de la corrección;
La Fig. 12
Macro
Compruebe Comando.
La Fig. 13 Macro de
inicialización.
principal
macro; al final
Tiempo de Reproducción [ms] El relé 1 Estado El relé 2 Estado El relé 3 Estado Retransmisión del Estado de 4
Fig. 14 - Sección "Control Manual" sw interfaz. Fig. 15 - Sección "Control Automático" sw interfaz.
Interfaz de software Como se puede ver, el primer campo indica el tiempo (en
Para el uso de la placa de relés de nueva creación, ms) a la que se le enviará las instrucciones presentes en 4
se ha desarrollado una interfaz de software especial, campos sucesivos, que representan el estado del relé 4 (0 ó
escrito en Labview 1). Un ejemplo de un archivo .csv se muestra en la Fig. 16.
2010. La interfaz permite tanto el control manual del relé 4,
tanto la ejecución de frecuencias automatizados SE-. Con este modo, es posible ser secuencias impuestas de control
Inmediatamente después del inicio de la interfaz podemos que pueden ES- tardes empleadas para las más variadas
elegir entre dos modos, a través de un botón en la parte necesidades, desde la automatización para la automatización del
inferior, en el panel derecho. una desacreditada hogar, para el control de maquinaria.
g
microcontroladores ofrecidos
por Matrix Multimedia. En
este episodio de empezar a
UJO CÓ
5
avanzados de comunicación,
empezando por el que ha
curso FL
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
el último mes hemos ilustrado el uso de las ciudades en comparación con soluciones similares y
la
dispositivos de comunicación básicas, aprender a
puertas de funcionamiento de la comunicación UART,
I²C, SPI y OneWire. En este episodio de la equidad en
reducción de los costos de los componentes. Como se ha hecho
en episodios anteriores, enriquecemos todos con un proyecto
práctico se dará cuenta de un prototipo de sensor de
nuestro trabajo hemos introducido un dispositivo de aparcamiento para vehículos.
comunicaciones mucho más avanzado, que le permite
crear bastante compleja incluso redes y gamente LAR
utiliza hoy en día, las mentes Special- en el sector del Controller Area Network (CAN)
automóvil: que son puerta lando par- CAN (Controller El protocolo CAN nació en los años 80 del siglo
Area Network) , que hoy es el estándar pasado por Robert Bosch GmbH, que tenía la
necesidad de desarrollar un estándar para las
comunicaciones en serie entre diferentes unidades de
de hecho para redes de comunicación de control electrónico de corto alcance, de multidifusión,
automóviles y se está expandiendo a aplicaciones con una alta inmunidad al ruido, bajo costo y alta
industriales y personalizados, gracias a su robustez, fiabilidad. El estándar Im-
la sim- relativa
125 500
250 250
500 100
traggio, manejo de errores, cies de poli retransmisión, zioniamo el componente de la bandeja de componentes, al
etc. El controlador también tiene una memoria intermedia hacer clic en el elemento CAN extendido. Una vez
de transmisión, recepción y máscaras, que le permiten introducido, en relación con el icono del componente
configurar el conjunto de mensajes para la transmisión y aparecerá en el panel, y en este punto se puede configurar
recepción, lo que reduce la sobrecarga de la CPU del para que se ajuste a las necesidades del proyecto
microcontrolador en los que es facciato inter. Incluso específico.
para los controladores, hay varios fabricantes en el
mundo; en nuestro caso vamos a utilizar el controlador Para analizar la primera ni cosa nection, que en el
MCP2515 de Microchip. caso de este componente se reduce a la clavija de CS
del controlador CAN (que es un esclavo SPI).
Podemos acceder a la conexión haciendo clic en el
botón del icono stro de- del componente y nando
El componente de la CAN en Flowcode seleccionado el "Conexiones". Verá la ventana
Analicemos ahora el componente Flowcode que nos mostrada en Fig. 1.
permite simplificar la gestión de la interfaz CAN en
nuestras aplicaciones. Flowcode CAN tiene dos Por defecto, el pin CS es el pin 6 de la puerta C; si
componentes, uno para la gestión de formato de trama existe la sity nece- de cambio (por ejemplo, en el caso
básica ( llamada simple- mente CAN) y uno para la en que se usa el E-bloque CAN) se puede mantener
gestión de ' formato extendido ( llama extendido CAN) también. Para configurar el componente hacemos clic
por lo que si decidimos desarrollar una aplicación en el botón derecho sobre el icono y seleccionar
puede, en la primera opción de hacerlo será para el "Propiedades adicionales". La ventana de Fig. 2. Desde
tipo de formación a. En la versión actual del medio la primera pestaña de esta ventana FI puede
ambiente, el controlador interno están solamente seleccionar las principales opciones de configuración
soportado por el componente que soporta el formato de bus, tales como velocidad de transmisión, el punto
básico, por lo que si se utiliza el componente extendido de muestreo y otros. Estos parámetros, a su vez
estará ligada a la utilización de un controlador de SPI dependen de las características específicas de la red,
externo. En este episodio Remo occupe- CAN tal como su tamaño, el número de nodos, la carga del
extendido componente, y luego vamos a utilizar el bus, etc. permetto- posteriores ninguna ficha para
controlador MCP2515 en nuestras aplicaciones. configurar los diversos recep- búfer y transmitirlo. En
proyecto práctico, vamos a ver un ejemplo de la
configuración de memoria intermedia.
búfer de envío Enviar el mensaje contenido dentro de la memoria intermedia de transmisión (pasado como parámetro)
CheckRx Compruebe si hay mensajes recibidos en un búfer de recepción en particular (se pasa como parámetro).
GetRxDataCount Él recibe el número de bytes del mensaje contenido en un tampón dado (se pasa como parámetro).
Extrae un byte dado en este mensaje en una memoria intermedia de recepción especificado. Recibe como parámetro es el buffer que el índice de
GetRxData
byte.
SetTxStdID Cambio de la ID estándar de una memoria intermedia de transmisión en particular (pasado como parámetro).
Editar el ID extendida de un tampón particular de transmisión (pasado como parámetro) como la ID estándar y extendida ID.
SetTxExtID
SetTxExtAsFull Editar el ID extendida de una memoria intermedia de transmisión en particular (pasado como parámetro).
Extrae una bytes especificado de un mensaje dado con ID estándar. todos los tampones se comprueban y el índice de byte se pasa como
GetRxStdID
un parámetro.
Extrae un byte dado de un ID de mensaje particular con extendida, visto como una combinación de un identificador de nivel y un ID se
GetRxExtID
comprueban .. Extended todo el tampón y el índice de byte se pasa como un parámetro.
Extrae un byte dado de un ID de mensaje particular con extendida .. son controlados todo el tampón y el índice de byte se pasa
GetRxExtIDAsFull
como un parámetro.
Ahora, como de costumbre, se procede con el análisis • El envío de datos sobre la distancia en cm;
de la macro proporcionada por este componente, que • Auto-diagnóstico de estado de la batería y el estado de E enlace 2
• J4 en A;
• J5 inserta;
• J6 y J7 fuera.
Tx Nodo_Sensore Rx Nodo_Display
período 250 ms
Tx Nodo_Display Rx Nodo_Sensore
período NA
0 = modo de suspensión 1 =
Modo Despierto
La configuración de hardware de los dos nodos se muestra que las características de los dos puestos. Ahora,
en la La Fig. 3a y Fig. 3b. para la descripción del software Menting imple-, con
la premisa de que, dada la complejidad del
mapa Mensajes proyecto, la descripción de algunas partes no
Antes de pasar a los detalles de software ana- lizziamo fundamentales se omite o se tratará sólo de forma
un punto fundamental de cualquier red basada en el marginal.
protocolo CAN, que es el mapa de mensajes: en un bus
CAN, que es el documento que describe los principales
mensajes que CA- ratteristiche intercambiador no es nodo sensor
diferente los nodos dentro de la red. Este documento De acuerdo con las especificaciones, este nodo debe
indica los tipos de mensajes, sus direcciones, el adquirir los datos relativos a la distancia del sensor
significado de los bytes que las componen, qué nodos ultrasónico, realizar un autodiagnóstico en el nivel de la
de transmisión y cuáles son los de-ates de cada batería y el estado del bus I²C y comunicar esta
mensaje individual. En nuestro caso, tenemos un total información al nodo principal a través de mensaje CAN.
de dos mensajes, uno transmitido desde el nodo rey
sentido- y recibidos desde el nodo de visualización, y
uno que pasa en la dirección opuesta. en Tabla 3a y Tabla
3b son riporta-
curso FL
Tabla 4 - Periodicidad y la descripción de la tarea de
software nodo sensor.
0x56 La ejecución de una falsa van - resultado en pulgadas. la interfaz de serie que el I 2 C. En nuestro caso, como
0x57 La ejecución de una falsa van - Resultados en centímetros. una interfaz de comunicación que eligió el I 2 C.
La ejecución de una falsa van - resultado en
0x58
microsegundos.
Sensor_SendCommand Enviar al dispositivo con el comando de la dirección 0x51 0xE0 por escrito.
Sensor_ReadResult Lee el byte de la dirección 2 (alto rango de bytes) y 3 (rango bajo Byte) y cierra la transacción.
En el caso de la interfaz de tipo I 2 C, el SRF02 se buscado con el resultado de que van en cm);
comporta muy similar a una memoria EEPROM de la 2) el envío del registro de dirección contenida nente el
familia 24xx: el dispositivo se parece a un conjunto resultado en la lectura;
de registros con acceso de lectura o escritura, tal 3) que recibe los dos bytes del registro que
como lo resume Tabla 5. contiene el resultado.
El acceso de escritura al arriendo 0 permite llevar a Para lograr estas tres operaciones se escribieron tres
cabo una de las operaciones de Tabla 6 ( Sólo se macros, publicado en
muestran los comandos principales). Tabla 7.
Estas macros son utilizados por el
En nuestro caso usamos los comandos que van, SensorRangingStateMachine macro, que es llamada
realizando tanto la operación de envío de la ráfaga por el programador principal y proporciona como
ultrasónica que la posterior detección del tiempo de salida para el resto del sistema, la variable global
vuelo de eco y el posterior cálculo de la distancia. En SensorResult información alguna conexión I²C más de
este caso el resultado de que van se almacena en los diagnóstico. en Fig. 8 Se muestra el diagrama de
registros 2 y 3 (alto rango Byte y gama de byte bajo), bloques de Flowcode macro
de la que posteriormente se puede recuperar rato con SensorRangingStateMachine. Este diagrama de flujo
una operación de lectura. Además de la orden, el bus que implementa un estado má- quina que se ejecuta
debe ser enviada a la in- la dirección del dispositivo (el en secuencia y con los tiempos correctos tres macros
valor por defecto en caso de interfaz de E 2 C es 0xE0) y muestran en Tabla 6, con el fin de obtener el resultado
la lectura de bits / escritura. Así, un total de dos bytes de que van. Para ello, los SensorMedics contador
se envían para cada trans- misión. El procedimiento RangingCounter, que se incrementa en cada ciclo
para obtener la información de la distancia es la (recordar que la macro se utiliza se llama
siguiente: directamente desde el planificador principal, así que
tiene un tiempo de 10 ms llamada).
Fig 9a -. Tab general de la ventana de Fig 9b -. Tampón Tab tx 0 de la ventana de Fig 9C -. Tampón Tab rx 0 de la ventana de
configuración de componentes CAN. configuración de componentes CAN. configuración de componentes CAN.
tarea
SwitchTask 200 Se lee el estado del botón y envía un mensaje correspondiente al evento CAN para el nodo sensor.
enviar (DLC) y los 8 bytes del men- saje. Los datos a dencia, controla la ejecución de todas las tareas (con la
curso FL
enviar son las siguientes variables globales: excepción de la propia tarea CanRx). El fragmento de
código gráfico que se da cuenta de lo que se ha descrito
- SensorResultHighByte → Byte 0; se informa en Fig. 12.
- SensorResultLowByte → Byte 1;
- SensorDiagStatus → 2 bytes.
Pantalla nodo
Las dos primeras variables se obtienen de La descripción del software del nodo sensor se ha
SensorRangingStateMachine macro, mientras que se completado; pasamos ahora al nodo de visualización,
calcula la variable SensorDiagStatus (y codificado que hereda muchos de los conceptos nodo sensor,
como se indica en el mapa de mensajes) desde el como el programador (que es prácticamente idéntica).
diag- macro sticTask. en La Fig. 10 Muestra las La función de nodo de pantalla es para recibir mensajes
propiedades de la ventana componente llamado periódicos enviados por el nodo sensor y ver su informa-
macro. ción en la pantalla LCD. Además es el nodo que puede
enviar en el sueño o despertar al sistema interno,
Una vez lleno el men- saje transmitir correctamente, mediante la detección de la presión de una tecla en el
para enviar el men- saje simplemente llamar a la EB018. El software del nodo pantalla se compone de
macro búfer de envío y pasar el buffer de tres tareas cipali cipio, que figuran en Tabla 8.
transmisión. en La Fig. 11 Se muestra el fragmento
de código gráfico, tal como aparece después de la
inserción de la macro a las llamadas de
componentes CAN. La filosofía de gestión del sistema es muy similar a lo
que vimos para el nodo anterior. A modo de ejemplo,
En este punto, nuestra aplicación nodo sensor lateral que describe cómo se implementa viamo CanRxTask
está casi completo; Queda para gestionar la entrada la tarea; Esta tarea tiene la tarea de recibir y
/ salida controlada por el modo de espera del decodificar el mensaje con ID 0xC40A5, procedente
mensaje CAN enviado desde el nodo de del nodo SEN- dolor. Por un lado se ha configurado
visualización. Mediante el análisis del mapa de el componente de CAN en una manera similar a lo
mensajes, se ve que el parámetro que determina el que se hizo para el nodo sensor, con la diferencia de
estado del sistema (sueño o despierto) se ha que el ID de mensaje de la transmisión en este caso
impuesto por el byte 0 del mensaje con ID 0xC40A4. es 0xC40A4, mientras que el filtro de recepción se
Por lo tanto, es necesario gestionar una tarea impone en la identificación fue 0xC40A5 . El AV
recibirá dentro de la cual se lee este byte se recepción es de una manera similar a lo que se
actualiza y una variable que se utiliza para identificar observó en el caso anterior; en particular, se llama la
el estado del sistema. Nuestro planificador ya nos CheckRx y tres veces la Ge- tRxData, para adquirir
ofrece un punto de entrada para la recepción de 50 los dos bytes de datos que componen la información
ms; para completar el código, introducción ciamo dos de la distancia y el byte que contiene los diagnósticos
llamadas de componentes de macro, y en particular ciones informales. Por último,
un CheckRx y una GetRxData, tanto en el tampón de
0. El GetRxData el resultado se guarda dentro de la
variable SystemStatus, que,
conclusiones
SensorData = ((SensorDataHigh << 8) | SensorDataLow) Para concluir esta entrega, podemos decir que el
enfoque de la CAN con Flowco- de le permite
El diagrama de bloques que implementa como se gestionar diferentes tipos de componentes y
describe anteriormente es riporta- en Fig. 13. periféricos con relati- va simplicidad, además de
generar extremadamente código sea más fácil de
Las tareas de gestión de la visualización y la lectura entender y mantener.
del botón de suspensión no tiene peculiaridades
implementative de alivio y no serán tratados en En los próximos episodios examinaremos otros
detalle en el episodio del que-; le invitamos, como un dispositivos complejos, tales como USB, ZigBee y
ejercicio, puerto Ethernet.
g
curso FL
CÓDIGO UJO
Fig. 14 - sistema CAN durante el seguimiento en funcionamiento hasta la recepción de una solicitud de sueño.
teclado numérico y un
6
analizador lógico, también en
USB. Sexto episodio.
curso FL
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
elle episodios anteriores hemos hablado de la Las computadoras personales y periféricos del bus USB. Se
Fig. 1
hay más dispositivos, esta corriente debe dividir),
Estructura de
una
deben tener una pieza de conexión de potencia. 3.0 La norma prevé la duplicación de las conexiones de
paquete datos con el fin de tener dos líneas para la recepción de
transmitido a El estándar USB 1.0 nació en 1996 y permitió una datos a otros tantos dedicada exclusivamente a la
través del bus
velocidad de conexión de 1,5 Mbit / s; versiones transmisión. Los datos se transmiten en un ential
USB.
posteriores ofrecen una mayor velocidad de pseudo-diferen- porque la línea D- tiene como valor
comunicación: por ejemplo, el 1,1 hace que sea posible opuesto de la línea D +, pero esto no es cierto en el caso
llegar a 12 Mbit / s), el 2.0 480 Mbit / s y la más reciente del identificador del paquete plazo.
A, B, mini y micro. Desde 2011, el conector micro-USB se ha • Comience paquete: Se envía a la secuencia de
convertido en el puerto de comunicaciones serie con todos sincronización 00000001. En el caso de paquetes más
los sistemas móviles, pero con el advenimiento de los grandes de la secuencia de sincronización es de 32 bits;
teléfonos inteligentes ha surgido una necesidad de
desarrollar un protocolo para decidir nection cuando con- • los datos del paquete: La longitud depende del tipo
qué dispositivo se convierte en el maestro y que el esclavo. de conexión, de 1 a 1024 bytes, y el bit primero
La solución al problema se llama USB-On-The-Go y le transmitido es el bit menos significativo;
permite establecer en el momento de la conexión, cuál de los
dos dispositivos es el maestro y el esclavo, que. Esta • Detener paquete: Se transmite una secuencia en la que
disposición se asegura, por ejemplo, que un teléfono no diferencial variabilidad señales OU se mantienen en
inteligente puede ser visto como un dispositivo esclavo el valor lógico bajo para dos ciclos y luego los D + señal
cuando está conectado a un PC o como un maestro en el vuelve al valor lógico alto.
caso está conectado a un dispositivo de almacenamiento
masivo, como un disco duro. Veamos lo que la interconexión
curso FL
relacionada disponibles en un conector micro / mini-USB: en Fig. 1 se muestra un ejemplo de datos en el bus USB
transmi- sión en la cual podemos identificar tres partes
principales en los que se divide, la codificación NRZ y el
marco de parada.
UJO
• VBUS; Se permite alimentar la peri- Feriche El estándar USB proporciona para la clasificación de
entrega de 5V estabilizado y una corriente dispositivos en "clases" con el fin de faci- litate la gestión y la
máxima de 500 mA;
CÓDIGO
El chip de FT232BL
curso FL
Fig. 3 Conexiones
proyecto convertido de
serie a USB.
Se utiliza para inicializar el controlador USB para comunicarse y activa el servicio periférica merazione explícitamente
RetVal Initialise_HID = ()
enumer-. Devuelve cero si el procedimiento termina sin un error.
Se utiliza para escribir un byte específico en el soporte, que será enviado a través de USB. En entrada
DIGO
SetDataByte (idx, valor) requiere índice de bytes a ser escrito y el valor a escribir. Esta macro no envía los datos físicamente los
almacena en la memoria de transmisión sin salir.
Cuando se llama en el bus USB transmite los datos que se ha cargado en la memoria intermedia de la función SetDataByte.
SendData ()
UJO CÓ
SendDataDirect (String) Enviar los datos contenidos en la cadena pasada como parámetro en el bus USB.
Actualización que se recibió del canal USB. Devolver la longitud de los datos en el búfer.
NumBytes CheckRx = ()
curso FL
Se utiliza para leer un índice denotado byte que se pasa como un parámetro de la memoria intermedia de lectura de los datos recibidos. El
Valor = ReceiveByte (IDX)
primer elemento de datos se identifica índice de cero.
Se utiliza para leer toda la cadena recibida en el bus USB. Requiere que se pasa como parámetro el número
String = ReceiveString (numBytes)
de bytes a leer y cargar la cadena devuelta por la función.
la cuota de socio al consorcio USB. Los que producen en en Fig. 6 ver otras configuraciones específicas para el
grandes cantidades dispositivos USB tienen su VID, dispositivo que tenemos la intención de volver a alizzare. Los
mientras que las pequeñas empresas y los aficionados principales parámetros se establecen mo dobbia-:
pueden uti- lizzare el VID del fabricante de chips, que en
nuestro caso es el de Microchip. Para el uso personal del • La corriente máxima; corriente máxima que el
dispositivo para realizza-, usted no necesita tener un VID dispositivo está habilitado para absorción a través del
válida. El parámetro PID es el identificador del dispositivo rey de tensión de alimentación USB;
de desarrollado. Ante compra dell'ac- de un VID por lo
que puede tener disponibles 65.535 productos diferentes. • Transmitpacketsize; tamaño de chetti PAC transmitidos al
Si quisiéramos vender cantidades pequeñas / medianas ordenador por las disposiciones tivos durante la interrupción
de los dispositivos USB que podríamos pedir al en el bus;
microchip, utilizando una aplicación especial escrita • Transmitpacketperiod; número de
disponible en el sitio www. microchip.com, autorización milisegundos entre dos transmisiones de
para utilizzar- uno. datos;
• Receivepacketsize; tamaño de los paquetes recibidos
por el dispositivo durante el bus de interrupción;
• Receivepacketperiod; número de
En el campo Nombre, y RER Manufactu- podemos milisegundos entre dos recepciones de datos;
introducir el nombre de nuestra aplicación y nuestro
nombre, mientras que indicamos como la versión 1.0. • subclase; Es una subclase de dispositivos USB y
es válido sólo para ratón y
Fig. 5 Fig. 6
y cuarzo 12 MHz);
• EB014 "Keypadboard";
• EB055 "interfaceboard USB".
los caracteres que han de transmitirse porque no siguen escanear el teclado y de transmisión tere periódicamente,
la tabla ASCII estándar. El lori numérico VA- 9 de uno a por medio de la macro de actualización de dispositivos
salen del valor hexadecimal 0x1E mientras cero 0x27 ha HID, la información en la información de tecla pulsada. Si
codificación. En este sencillo ejemplo teremo transmitir no se pulsa ninguna tecla, el dispositivo transmite el valor
sólo un carácter a la vez y por lo tanto no serán posibles 0x00 de lo contrario el botón a su código. Para evitar la
combinaciones de teclas pulsadas simultáneamente. Para sobrecarga del bus de datos no es útil, si la tecla pulsada
lo cual es simplemente única razón por la que el valor del puede ser siempre el mismo, los datos se transmiten sólo
byte 2, dejando a los otros a predefi- valor 0x00 Ned. como resultado de una variación de la prensa y el mínimo
de tiempo retardado hacer clave entre una transmisión y
el otro es 10 ms. Para superar los problemas de
inicialización se añadió un retardo de inicialización igual a
Ahora que tenemos toda la información necesaria se 100 ms.
puede arrastrar en el componente del panel del teclado
y el componente USB-HID. El componente de teclado
requiere una configuración correcta de las conexiones.
En nuestro caso se establecerá como se muestra en Fig. Las variables utilizadas son como sigue:
11. • DatiUSB [8]: es un vector de 8 bytes en los datos de
cuarenta de transmisión tere en el bus se almacenan;
Con respecto a la configuración del componente de HID, es
necesario elegir HID página nel- descriptores de la opción • EsitoInizializzazione: variable de bytes que sirve
ard Keybo- durante la configuración de la pestaña de para almacenar el resultado dell'inizia- ción del
opciones HID como se muestra en Fig. 12. dispositivo USB;
• Teclado: almacena el valor leído del teclado en
La aplicación puede parecer com- pleja, por el hecho de una variable de tipo byte;
que utiliza el bus USB, pero el diagrama de control es • Keypad_precedente: se utiliza para almacenar la
simple y no requiere ni siquiera darse cuenta de las cama estado anterior en el teclado y es de tipo
macros de apoyo. Como un primer paso, es necesario byte.
inicializar los dispositivos HID y posteriormente, por
medio de un bucle sin fin, El flujo del programa se muestra en su totalidad Fig. 13.
Fig. 14
Ventana de las
propiedades del
para enviar la cadena "<000015-236>. El tiempo máximo es tere que identifica cero, mientras que el secundario
componente USB de 99999.9 segundos (27,7 días) después de lo cual, usted cobramos dentro del valor de retorno el valor convertido
serie. tiene la repetición de la marca de tiempo. a través de la función de longitud $ con alineación a la
derecha como se muestra en Fig. 17.
Generar una cadena de longitud fija, es decir, con la
adición de cero para mantener la longitud fija, es Ahora que nuestra macro está listo podemos continuar
probablemente la parte más difícil del proyecto porque con la programación principal de la misma. Primero
el comando para la conversión de número a cadena insertamos dentro del panel del componente de serie
encaja solamente las cifras signifi- cativas. Por esta USB y configurarlo como en la sección anterior. Cómo
razón, nos damos cuenta de una macro que tendrá la dividir el programa en dos partes principales: la rutina
tarea de convertir un número y llevarlo a una longitud de inicialización del sistema y el bucle principal. En la
fija. La macro se llama "ConvertiInStringaFissa" y inicialización de variables insertamos el
requiere los siguientes parámetros: restablecimiento y la macro "Intitialize_Serial ()" para la
con- nection USB. El bucle principal es pa ocu- lugar
de la secuencia de lectura de Portab, la conversión de
• NumericValue: es el mo valor voglia- convertido; la cama y el valor de marca de tiempo, la generación
de la cadena que se transmite, y finalmente la
• LunghezzaFissa: es la longitud de la cadena de transmisión de los datos en el bus USB. Para asegurar
salida. que las lecturas son
Se utiliza para inicializar la comunicación USB al arrancar el servicio de enumeración para que el PC puede identificar
Initialise_Serial () el dispositivo. Devuelve como valor de retorno 0 si bien se lleva a cabo mientras 255 en caso de error.
Send_Byte (Byte) Transmite bytes pasa como un parámetro mediante su inserción en el buffer de escritura.
UJO
Enviar la cadena pasada como parámetro "String". El parámetro "Longitud" debe contener la longitud de caracteres que
Send_String (String, longitud)
se transmite en la cadena.
Ley del tampón de lectura de un byte y lo devuelve como valor de retorno. El "TIMEOUT_MS" ser- parámetro ve para establecer un tiempo de
CÓDIGO
espera máximo, en milisegundos, para la cual la macro debe esperar a la espera de un dado. Se debe establecer en el valor 255 de la espera
Read_Byte (TIMEOUT_MS)
no termina hasta que una figura no está disponi- ble en el búfer de recepción. En caso de que los datos no se recibe dentro del tiempo de
espera, el valor de retorno es 255.
Ley de la memoria intermedia de lectura una secuencia de caracteres cuya longitud está determinada por el parámetro "th Leng-" y lo
devuelve como el valor de retorno de función. En cuanto a la macro Read_Byte parámetro "TIMEOUT_MS" se utiliza para permitir la
Read_String (TIMEOUT_MS, String, longitud)
macro para devolver el control a la función de llamada sin que se haya recibido ningún dato.
Fig. 17 - Macro
UJO CÓ
ConvertiInStringaFissa
utilizado dentro
analizador lógico.
curso FL
Flowcode, el innovador
desarrollo del
microcontrolador del gráfico
UJO CÓ
7
Multimedia. En este episodio
vamos a analizar un
curso FL
dispositivo inalámbrico:
ZigBee. Séptimo episodio.
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
elle entregas anteriores con las que tratamos La tecnología basada en ella) libera la especificación
ZigBee 802.15.4 ™ 802.15.1 Bluetooth ™ 802.11b Wi-Fi ™ GPRS / 1XRTT GSM / CDMA
Enfoque de aplicaciones Monitoreo y Control reemplazo del cable Web, vídeo, correo electrónico WAN, de voz, de datos
especificaciones de la norma IEEE 802.15.4 con el Los dispositivos que forman parte de un ZigBee PAN se
estándar ZigBee: con el primero se refiere a un denominan nodos; los nodos no son todos iguales, pero
conjunto de especificaciones de bajo nivel en que se el estándar ZigBee hay tres tipos:
basa el segundo para la definición de una norma más
compleja. En las especificaciones indicadas por el • coordinador; es el nodo central de la red y es
estándar ZigBee se basan constructores para la responsable de las funciones más importantes,
realización del silicio. Que a su vez compra los chips tales como la creación de la misma red, la
de los fabricantes, que los incorpora en un sistema adjudicación de las direcciones, la elección de la
más complejo, lo que añade otra capa a la capa de Cana- RF y más; puede existir en más uno para la
aplicación, la última característica de la propia red y puede actuar como un puente entre diferentes
aplicación. Como ya se ha mencionado en la redes (que también se llama Gateway);
introducción con el protocolo ZigBee es un protocolo
inalámbrico caracterizado por un bajo consumo de
energía, ción simplicidad nell'implementa- del código • Router; actúa como un dios intermedio router,
(generalmente referido programa consumo ria memo- pasar datos hacia y desde otros dispositivos;
como aproximado para la realización de un nodo) y un
alto número de nodos de costo-tuenti la red; la • Extremo del dispositivo; Incluye una funcionalidad
velocidad de comuni- cación es relativamente bajo. suficiente para hablar con su nodo padre
(coordinador o un router), no puede transferir
datos desde otros dispositivos.
Fig. 1
Logotipo de la
ZigBee
Alliance. la Tabla 1 En él se compara estándar ZigBee con algunas de
las más extendidas tecnologías inalámbricas existentes. La
velocidad de datos típico indicado en la radio Cana- es de
250 kbps, mientras que la tasa de datos de interfaz puede
tener valores que van desde 1.200 a 115.200; Este medidor
para- no siempre se encuentra en las hojas de datos de los
dispositivos, como el ZigBee no se ha estudiado
específicamente para el inter- cambio de grandes
cantidades de datos, como podría ser en cambio para la
Fig. 2 - Comparación entre tecnologías conexión Wi-Fi. El caudal depende de la con- péutico
curso FL
inalámbrico en función de flujo
dispositivo, desde la antena y la potencia radiada en la
transmisión y datos de velocidad.
transmisión: Los valores típicos se encuentran entre
decenas y cientos de metros. en Fig. 2 es un gráfico que
compara diferentes tecnologías inalámbricas dependiendo
de la gama de transmisión y velocidad de datos (en Mbps).
UJO
cambiar.
En cambio, el corto es un código de identificación de 16
bits (2 bytes) que permite la atención identificado
UJO CÓ
Monitoreo estructural túneles de monitoreo, supervisión de puentes, presas de vigilancia, el seguimiento a los edificios importancia histórica o artística
Recibe actual 50 mA 55 mA
Inicializar el módulo XBee y tratar de ejecutar la instalación de la red (coordinador) o llevar a cabo la unión de un eseistente red (router o
Init_Network
dispositivo final).
Establece el modo de suspensión del nodo (sólo aplicable a dispositivo final). Toma como entrada dos parámetros, el modo de suspensión (1 = Hibernate, 2 = Doze, 4 =
Node_Configure_Sleep
Sleep cíclico, 5 = cíclica Doze) y el tiempo de espera en ms.
curso FL
CÓDIGO UJO
RxTask 1 (activo), 1000 (resto) Se recibe y decodifica datos sobre el canal inalámbrico.
RelayTask 500 Implementa el estado del relé establecido por el control inalámbrico.
DIGO
también requieren que el poder de la mente de Al no ser capaz de analizar todas las tareas
enlace. en Fig. 8 Muestran las conexiones de plementati Im- como un único episodio no sería
hardware de los distintos E-bloque. suficiente, nos centramos
Implementación de software
En este punto podemos comenzar a examinar los
detalles de implementación del software del nodo
esclavo. Según que espe- CIFIC proporcionado, el
nodo esclavo debe ser capaz de gestionar el relé 4,
para proporcionar una gestión de memoria no volátil,
administrar el "trabajo" LED (LED que indica que el
nodo está conectado a la red y operativo ) y, por
supuesto, manejar la aplicación de protocolo que se
ha descrito anteriormente. La arquitectura utilizada
para el tazione nodo imple- implica el uso de un
programador a 1 ms, y un total de 4 tareas, informado
por la totalidad en mesa
a disposición por el componente de ZigBee. Después de recibir cuando el paquete se recibe de forma gratuita restablece los
los bytes de un tampón de servicio, se mueve a la memoria contadores y banderas, y se llama la función de decodificación
CÓDIGO
funciones de forma adecuada. El diagrama de bloques parte del paquete, la que contiene la dirección del nodo. El
de RxDe- codeFn se informa en Fig. 11. effettua- de controlar es la siguiente:
siva. Específicamente, un bloque de cálculo que Si la prueba tiene éxito, gue prose-, de lo contrario el
realiza las siguientes asignaciones se utiliza: paquete se descarta. Después de haber realizado esta
comprobación preliminar se pasa a la decodificación
educa- ción verdadera del paquete. Antes de hacer
NodeType = RxBuffer [.DEC_NODE_TYPE] = esto, puede controlar si una Eco está activado (=
Packet_IDMajor RxBuffer [.DEC_ID_ MAJ] EEP_Conf_EcoEnabled ECO_ENABLED?) Y, si es así,
transmite el eco del paquete recibido. Posteriormente,
Packet_IDMinor = RxBuffer [.DEC_ID_ MIN] un bloque de selección múltiple decodificar el campo
de datos Efectos- vo del paquete, ajustando
Function_MainFunction = RxBuffer [.DEC_ adecuadamente las variables globales utilizado por
MAIN_FUNCT]
Function_Parameter1 = RxBuffer [.DEC_ PAR_1]
otra tarea para la ejecución de acciones para actualizar, utilizando una variable global. Así, por
específicas. ejemplo, para actualizar el eco relativa permitiendo
En particular, la sección relativa a la con- trol del relé, parámetro de configuración, los relativos conjuntos de
una vez comprobado que el byte bloque de cálculo:
Function_MainFunction se corresponde con el valor
ASCII "R", lleva a cabo las siguientes tareas:
EEP_Conf_EcoEnabled = Function_Parame- ter2 curso FL
RelayNumber = Function_Parameter1 EepUpdateRequest = UPDATE_EEP_RE- QUEST
RelayStatus = Function_Parameter2
Esta información se utilizará entonces Zate de tarea EEP_Conf_EcoEnabled contiene el valor del
RelayTask para el control efectivo de los relés. Una parámetro, mientras que la bandera EepUpdate-
UJO
palabra aparte Me- Rita la gestión de los parámetros Solicitar señales a EepromTask tarea que hay una
de almacenamiento en la EEPROM (este respecto, actualización de los parámetros en la memoria para
por ejemplo, todas las opciones de con- figuración).
CÓDIGO
8
este octavo y último
episodio vamos a explicar
cómo conectar a Ethernet
curso FL
curso de programación
Flowcode
Francesco y Daniele Ficili Defilippi
ella último episodio que introdujo el dispositivo lanzar un servidor web incorporado que puede enviar datos
N
inalámbrico que permite la comunicación de acuerdo
con el estándar ZigBee, y se ilustra su aplicación en
Flowcode. Ahora, a la conclusión del curso, vamos a
en tiempo real en la red.
Al llamar a esta macro, se crea un socket capaz de recibir datos transmitidos por la red Ethernet. Mediante el establecimiento de un valor del parámetro:
DIGO
- El modo promiscuo para leer todo el tráfico que circula por la red sin tener en cuenta la dirección MAC;
Create_MAC_Socket
- El modo de difusión que sea capaz de leer los paquetes de difusión;
- modo de error para también recibir paquetes que contienen errores.
El valor de retorno, si es diferente de cero, indica que la operación de configuración era final exitoso.
UJO CÓ
La macro crea un socket para la transmisión y recepción de datos utilizando el protocolo UDP. Es necesario
indicar los parámetros:
- Channel, es decir, el canal elegido para la comunicación (de 0 a 3); es posible utilizar simultáneamente los canales de configuraciones gurado de una manera diferente a
Create_UDP_Socket
partir de un máximo de cuatro;
- la dirección de la divide en src_port_hi y puerto de origen src_port_lo. El valor de retorno, si es diferente de cero, indica que
curso FL
Crear un socket para la recepción y transmisión de datos a través del protocolo IP.
Create_IP_Socket Es necesario indicar el canal seleccionado (canal), y el protocolo que pretendemos realizar mediante el conjunto de la ni dos inter- a los parámetros de macro. El valor de
retorno, si es diferente de cero, indica que la operación de configuración era final exitoso.
Create_TCP_Socket Crear un tipo de socket TCP. Necesidades de las mismas configuraciones que se utilizan con el Create_UDP_Socket macro.
Se utiliza con sockets IP y UDP, y se utiliza para establecer la dirección IP y el puerto al que desea transmitir datos. Se toma como parámetros el canal, la
Set_Destination dirección IP y el puerto de destino. Para las conexiones basadas en IP que no es necesario indicar la puerta.
Esta macro se utiliza para cambiar, durante la ejecución, la dirección IP del dispositivo; No es necesario si desea conservar la dirección IP introducida
Set_My_IP
en la ventana de Configuración de componentes.
La macro devuelve el estado actual de la toma de corriente. Los valores posibles son diecinueve, pero los principales son:
- 0 (SOCK_CLOSED) = el socket está cerrado (se transmiten o reciben datos ni);
GetSocketStatus - 6 (SOCK_ESTABLISHED) = el zócalo esté listo y la comunicación es activo en el modo pasivo;
- 7 (SOCK_CLOSE_WAIT) = el socket está en la fase de cierre;
- 14 (SOCK_INIT) = el socket está en la fase de inicialización.
TCP_Listen Establece el canal elegido (indicado como un parámetro) en modo pasivo de manera que pueda estar listo para recibir datos.
Establece el canal elegido (indicado como un parámetro) en el modo activo de manera que pueda estar listo para transmitir datos en el canal de
comunicación. Se necesita como parámetros el valor del canal, la dirección IP y el puerto de destino. Si el valor devuelto es distinto de cero significa
tcp_connect
que la comunicación se ha establecido con éxito y que luego se puede transmitir datos.
TCP_Close Se cierra la conexión TCP a través de una operación activa y el puerto de socket a la espera de la terminación.
Iniciar la transmisión de datos en el canal especificado por los parámetros, pero para que funcione correctamente requiere macro posterior (Tx_sendbyte,
Tx_sendmymac, Tx_sendmymac y Tx_end). La secuencia correcta comienza con un comando de Tx_start, continúa con secuencias Tx_sendbyte, Tx_sendmymac,
Tx_start
Tx_sendmymac en el orden elegido (que puede también ser sólo ta utilizza- uno de los tres macro) y termina con Tx_end para realizar el envío de datos en el canal
la comunicación.
(Continuación)
Dependiendo del tipo de red que configurar la dirección mundo; la mejor manera de hacerlo es tomar la
IP, la cual debe ser de co estadístico tipo y la máscara dirección de un no utilizado actualmente tarjeta de red,
de subred. La dirección de la pasarela se debe por lo que está seguro de que su IP no está activo. Un
establecer el mismo que el "enrutador" o el módem al paso adicional es la configuración de las conexiones;
que intenta AC cede a Internet, al menos si queremos con el fin de funcionar correctamente, debe configurar
enviar paquetes fuera de la LAN; si esta dirección los pines en los cuarenta que se asignan al pin de
estaba mal, sareb- no sea posible comunicarse con los interrupción y el PCB Esta configuración puede variar
ordenadores no conectados directamente a la intranet. dependiendo de cómo se conecta la tarjeta a nuestra
La configuración de la dirección MAC (dirección de plataforma o cómo realiz- ziamo el PCB en el caso de
hardware) es la parte más delicada: este valor debe ser proyectos personalizada . Examinemos ahora la macro
único en toda la Internet. Para realizar las pruebas Flowcode que pone a disposición para manejar este tipo
dentro de la LAN pueden fijar a cualquier valor: de comunicaciones a través de Ethernet. en
simplemente que difiere de la de todas las demás
tarjetas de red inalámbrica y Ethernet lo pasan por alto.
Enviar los datos a la memoria intermedia de transmisión para el canal específico. Además del canal se debe indicar el parámetro dado. Como cuestión también puede ser
Tx_sendbyte
cadenas usadas.
Tx_sendmymac Enviar en el buffer de transmisión, el canal seleccionado, la dirección MAC actual de la tarjeta.
Tx_sendmyip Enviar en el buffer de transmisión, el canal seleccionado, la dirección IP establecida en la ventana de configuración del adaptador.
Compruebe si hay datos disponibles en el canal de recepción de amortiguamiento. El valor de retorno, si es diferente de cero, lo que indica que hay datos
Rx_data_available disponibles. Esta macro se utiliza para inicializar la memoria intermedia para recibir datos si que ya era. En la práctica restablece el índice con la que el tampón
se escanea con el Rx_data_size macro.
Rx_data_size Macro se utiliza para saber cuántos bytes están disponibles en el buffer de recepción.
Rx_readbyte Lee un byte desde el canal elegido búfer de recepción que se devuelve como un valor de retorno.
Rx_match2bytes
Ley 2/4/6 byte del buffer de recepción y los compara con los indicados en los parámetros con los que se le llama. Restitui- SCE un valor diferente de cero si
Rx_match4bytes
los valores coinciden.
Rx_match6bytes
Ley 6 bytes desde el buffer de recepción y compararlos con la dirección MAC con la que la tarjeta ha sido configurado. Se devuelve un valor distinto de cero si
Rx_match_mymac
los valores coinciden.
Lee 4 bytes desde el buffer de recepción y los compara con la dirección IP con la que la tarjeta ha sido configurado. Se devuelve un valor distinto de cero si los
Rx_match_myip
valores coinciden.
Restablece e inicializa el dispositivo Ethernet. Esta macro debe llamarse antes de cualquier otro macros para cualquier gestión de servidor Web.
inicializar
DIGO
La macro crea un socket para recibir y transmitir datos al servidor Web. Es necesario
indicar los parámetros:
- Canalizar el canal elegido para la comunicación (de 0 a 3); es posible utilizar simultáneamente los canales configurados de una manera diferente a partir de un
CreateServerSocket
máximo de cuatro;
UJO CÓ
- la dirección del puerto desde el que transmitir y recibir los datos divididos en src_port_hi y src_port_lo. El valor de retorno, si
es diferente de cero, indica que la operación de configuración era final exitoso.
CheckSocketActivity Toma como entrada el canal en el que desea realizar el control de la actividad.
Que periódicamente se debe invocar el fin de permitir la gestión de las solicitudes entrantes.
curso FL
nos vemos en La Fig. 3, la ventana de la con- figuración de forma remota. El código debe ser compatible con el
componente es sencilla e intuitiva va: tenga en cuenta que es estándar HTML, pero esto no impide que introduzca
exactamente idéntico al componente TCP / IP y por lo tanto comandos JavaScript u otro len- ya interpretado por el
pueden ser configurados de la misma manera. Esto se debe navegador remoto. La característica clave del
al hecho de que el componente de servidor Web componente servidor web es la posibilidad, oferta, para
incluir en el valor mico Dyna fuente HTML de algunas
variables; de esta manera es las variables deseadas
(como máximo cuatro) se pueden monitorizar de forma
remota. Con el fin de BA ver, dentro del código HTML, el
nombre de la variable, incluyendo el inserendo-%. Los
nombres de variables son, por tanto, B001 utilizable,
B002, B003 y B004. Hay algunas limitaciones en el tipo
de las variables seleccionadas porque no pueden ser de
tipo cadena o punto flotante. En el ejemplo práctico
vamos a utilizar este simple estratagema con el propósito
de Reac- lizzare una unidad de control para controlar la
temperatura.
Fig. 5 la conexión
función funGraph (ctx, ejes, func, color, espesor) {var xx, yy, dx = 1, x0 = axes.x0, y0 de las tarjetas para
= axes.y0, escala = axes.scale; var Imáx = Math.round ((ctx.canvas.width-x0) / dx); lograr la unidad de
var = Imin axes.doNegativeX? Math.round (-x0 / dx): 0; ctx.beginPath (); supervisión de
ctx.lineWidth = espesor; ctx.strokeStyle = color; for (var i = Imin; i <= Imax; i ++) temperatura.
{xx = dx * i;
ctx.strokeStyle = "rgb (128,128,128)"; for (var i = -20; i <= Tabla 3 - Configuración del componente de datos WebServer
50; i = i + 10) {
yy = i * escaleras;
GatewayAddress 192.168.0.10
ctx.moveTo (xmin-5, y0-yy); ctx.lineTo (w, y0-yy); ctx.font = "15px
Georgia"; Máscara de subred 255.255.255.0
ctx.strokeText (i + "° C", xmin-50, y0-yy + 5); Dirección IP 192.168.0.5
curso FL
HardwareAddress 0: 8: 220: 0: 0: 0
(Continuación)
número máximo de páginas web 1
apuesta para la realización del metro dedicar a escribir el diagrama de control. Insertamos a
termo-LCD, y conectar la salida al puerto de un continuación, en la barra de los miembros del
número de PIN 2 con el fin de estimular el canal componente de servidor web y el ADC componente
UJO
analógico del microcontrolador An2. configurado para que se lea la entrada An2 conectado al
dolor de SEN- de temperatura LM35. Ahora vamos a
CÓDIGO
Configuramos el proyecto a fin de mantener OT- una configurar el servidor web de componente: se indican los
frecuencia del PIC igual a 19.660.800 reloj Hz, ajuste siguientes valores dentro de los parámetros ( Tabla 3).
de los parámetros como se muestra en Fig. 6.
Ahora que el hardware está listo podemos El código HTML que se muestra en
(); ctx.lineWidth = 3;
sorteo function () {
curso FL
(ctx, ejes);
funGraph (ctx, ejes, Temp, "rgb (66,44,255)", 4); }
página debe ser mostrado en la pestaña página Web 1 con - ContatoreTimer Tipo Grande + inicializa a -1 para
el título index.htm. El texto de código html que nos forzar la lectura de la temperatura de ignición del
permite ver las últimas cuatro temperaturas y gráfica sistema.
plottarne está contenida en Listado 1; poter- para el uso
simplemente añadimos (utilizando copiar / pegar) dentro - ADC_Temp de tipo float con el fin de leer el
de la ventana de configuración de página. Puesto que voltaje del sensor LM35.
tenemos que jugar dos tarea principal, podemos dividir
el programa en dos el flujo principal. La primera, en su - Temperatura_1 / Temperatura_4 número entero
mayor parte La Fig. 8, inicializará el sistema y para almacenar temperaturas.
compruebe las demandas de la toma de corriente que
está conectado al servidor web, mientras que la - B001 / B004 número entero para su visualización en
segunda macro en la página HTML de los valores de temperatura.