61696142 control de puertos de atmega con labview

24
APRENDA DESDE CERO COMUNICACIÓN SERIAL CON EL MICROCONTROLADOR ATMEGA48 Y LABVIEW Por Arnoldo Ulises Villalobos Guerra Instituto Tecnológico Superior de Zamora Este tutorial está dedicado a la comunidad atmel con el objetivo de que usted se familiarize con el software LabVIEW y realize la comunicación serial entre el microcontrolador ATMEGA48 y LabVIEW. Antes que nada si el lector está familiarizado con LabVIEW no es indispensable que lea este apartado puede saltarse al siguiente tema 1.2. y si usted ya ha hecho una comunicación serial de cualquier tipo entonces puede ir directamente al tema 1.3 Por otro lado, tratare de ser breve con el motivo de no hacer este tutorial muy extenso. 1.1 INTRODUCCIÓN A LabVIEW LabVIEW de National Instruments, es un software de programación gráfica (programación G) y difiere de otros lenguajes de programación como C o Basic, en que éstos están basados en texto, mientras que G es una programación gráfica y es el corazón de LabVIEW. Los programas en G, o VIs (“Virtual Instruments”) constan de una interfaz interactiva de usuario (PANEL FRONTAL) y un diagrama de flujo de datos que hace las funciones de código fuente (DIAGRAMA DE BLOQUES). LabVIEW no es gratuito pero existe una versión de evaluación que se puede bajar de la siguiente pagina http://www.ni.com/trylabview/ Hay que recordar que este tutorial es para realizar una comunicación serial, por lo que es indispensable que cuando comience a instalar LabVIEW indique que instale los drivers, pues al instalar los drivers instala los del puerto serie. Aun cuando su computadora no tenga puerto serial, es necesario indicarle que instale los drivers, de lo contario no se podrá lograr la comunicación serial utilizando USB. 1.1.1 PANEL FRONTAL Y DIAGRAMA DE BLOQUES Una vez instalado Labview para hacer un programa nuevo sólo tiene que ejecutarlo y seleccionar Blank VI. Se abrirán dos ventanas: el Panel Frontal y el Diagrama de Bloques. El panel frontal es la interfaz interactiva de usuario de un programa (VI), debido a que simula el panel de un instrumento físico. Es aquí en donde pondrá los controles y/o indicadores de su programa. Para colocar los controles o indicadores sólo es necesario colocar el puntero del

Upload: geovanny-ashqui

Post on 13-Aug-2015

145 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 61696142 Control de Puertos de ATMEGA Con Labview

APRENDA DESDE CERO COMUNICACIÓN SERIAL CON EL MICROCONTROLADOR

ATMEGA48 Y LABVIEW

Por Arnoldo Ulises Villalobos Guerra

Instituto Tecnológico Superior de Zamora

Este tutorial está dedicado a la comunidad atmel con el objetivo de que usted se familiarize

con el software LabVIEW y realize la comunicación serial entre el microcontrolador ATMEGA48

y LabVIEW.

Antes que nada si el lector está familiarizado con LabVIEW no es indispensable que lea este

apartado puede saltarse al siguiente tema 1.2. y si usted ya ha hecho una comunicación serial

de cualquier tipo entonces puede ir directamente al tema 1.3 Por otro lado, tratare de ser breve

con el motivo de no hacer este tutorial muy extenso.

1.1 INTRODUCCIÓN A LabVIEW

LabVIEW de National Instruments, es un software de programación gráfica (programación G) y

difiere de otros lenguajes de programación como C o Basic, en que éstos están basados en

texto, mientras que G es una programación gráfica y es el corazón de LabVIEW.

Los programas en G, o VIs (“Virtual Instruments”) constan de una interfaz interactiva de usuario

(PANEL FRONTAL) y un diagrama de flujo de datos que hace las funciones de código fuente

(DIAGRAMA DE BLOQUES).

LabVIEW no es gratuito pero existe una versión de evaluación que se puede bajar de la

siguiente pagina http://www.ni.com/trylabview/

Hay que recordar que este tutorial es para realizar una comunicación serial, por lo que es

indispensable que cuando comience a instalar LabVIEW indique que instale los drivers, pues

al instalar los drivers instala los del puerto serie. Aun cuando su computadora no tenga puerto

serial, es necesario indicarle que instale los drivers, de lo contario no se podrá lograr la

comunicación serial utilizando USB.

1.1.1 PANEL FRONTAL Y DIAGRAMA DE BLOQUES

Una vez instalado Labview para hacer un programa nuevo sólo tiene que ejecutarlo y

seleccionar Blank VI.

Se abrirán dos ventanas: el Panel Frontal y el Diagrama de Bloques.

El panel frontal es la interfaz interactiva de usuario de un programa (VI), debido a que simula el

panel de un instrumento físico. Es aquí en donde pondrá los controles y/o indicadores de su

programa. Para colocar los controles o indicadores sólo es necesario colocar el puntero del

Page 2: 61696142 Control de Puertos de ATMEGA Con Labview

mouse dentro del panel frontal y presionar el botón derecho del mouse y elegir el que quiera.

Existen varios tipos de controles. Los hay booleanos, numéricos, matriciales, gráficos, etc.

El diagrama de bloques es el código fuente del programa o VI. Es donde se realizan los

programas dando solución gráfica a un determinado problema. Es pues, en éste donde hará los

programas. En él se encuentran todas las funciones. Las hay numéricas, booleanas, de

estructuras, de comparación, de tiempo, de arreglo, de cadena, etc.

Para sacar la ventana donde están las funciones sólo tiene que presionar el botón derecho del

mouse y seleccionar lo que necesite.

Fig. 1 Paleta de Funciones.

1.1.2 MIS PRIMEROS PROGRAMAS

CONVERSION DE °C A °F

OBJETIVO: Realizar un programa que convierta grados Celsius a grados Fahrenheit.

Primero tiene que crear un control numérico en el panel

frontal, éste control le servirá para introducir y modificar

el valor que se desea convertir a grados Fahrenheit.

Para crear el control en el panel frontal solo hay que

hacer click derecho del mouse y seleccionar el control

numérico que está en:

numeric control>>numeric control. (ver figura 2).

Fig. 2 control numérico

El control lo colocara en cualquier lugar de su panel

frontal.

Page 3: 61696142 Control de Puertos de ATMEGA Con Labview

Al colocar un control o un indicador en el panel frontal crea al mismo tiempo un icono en el

diagrama de bloques.

Vaya el diagrama de bloques y observe el icono creado (ver figura 3). Un acceso rápido para

cambiar de la ventana del panel frontal al diagrama de bloques y viceversa es el uso de Ctrl+E.

Fig. 3 control numérico en el diagrama de bloques.

Ahora bien, es necesario colocar un indicador numérico en el panel frontal para observar el

resultado de la conversión. Entonces en el panel frontal seleccione el indicador numérico que

está en: numeric indicators>>numeric indicators (ver fig. 4).

Fig. 4 indicador numérico.

Es recomendable poner los nombres de las variables correspondientes en el programa. Se

puede hacer desde el panel frontal o desde el diagrama de bloques. Para ello solo tiene que

hacer doble click en el nombre que quiera modificar y escribir el nuevo nombre (ver fig. 5) .

Fig. 5 Variables correspondientes.

Para modificar el tamaño, tipo y estilo de letra se selecciona el texto y se modifica en la pestaña

“Application Font”.

Vaya al diagrama de bloques para hacer el programa.

Se sabe que °F = ((9/5)°C) +32. Para realizar esta fórmula haga uso de las funciones

numéricas de suma y de multiplicación, que se encuentran en: Programming>>numeric>>

Page 4: 61696142 Control de Puertos de ATMEGA Con Labview

Fig. 6 Funciones numéricas.

Cuando se acerque con el puntero del mouse a una entrada o salida de cualquier icono

(función) el puntero cambia a un carrete de hilo, éste sirve para hacer las conexiones entre

iconos. Haga las siguientes conexiones como se muestra en la figura 7.

Fig. 7 conexiones entre iconos.

Acerque el puntero del mouse a la entrada de la función de multiplicación que no está

conectada (hasta que aparezca el carrete de hilo) y de click al botón derecho del mouse. Cree

una constante (ver fig. 8). Lo mismo haga con la entrada de la función suma que no está

conectada.

Fig. 8 Crear constante.

Cambie las constantes de cero por 1,8(1.8) y 32 como aparece en la figura 9. Recuerde que la

formula es °F = ((9/5)°C) +32, pero 9/5=1.8 (ó 1,8 depende la configuración de idioma).

Fig. 9 Conversión terminada.

Page 5: 61696142 Control de Puertos de ATMEGA Con Labview

Está terminado el programa, sólo falta correrlo, vaya al panel frontal, introduzca un valor en el

control y de click en “run”. Al correr el programa en “run” sólo hará la conversión y se detendrá.

Para que continuamente esté convirtiendo valores hay que hacer click en “Run Continuously”

Si quiere detener el programa haga click en “Stop”.

Mientras esté corriendo el programa de forma continua y se desee convertir un nuevo valor,

sólo introdúzcalo y presione Enter o introdúzcalo y de click en icono de la “palomita”

Fig. 10 Corriendo el programa

Modificara el programa con el fin de familiarizarse un poco más con LabVIEW. Recuerde que

no se pretende en este tutorial que usted sea un experto solo que tenga las bases para hacer

la transmisión serial.

En el Panel Frontal vaya a Numeric control>>Vertical Pointer Slider. Ahora coloque un indicador

de termómetro, éste se encuentra en: Numeric indicators>>Thermometer. Ver fig. Siguiente.

.

Fig. 11 Control deslizante e indicador tipo termómetro.

Seleccione el control numérico (el que está arriba del control deslizante en la figura anterior) y

presione la tecla suprimir para eliminarlo. Vaya al Diagrama de bloques y observará que se

crearon los iconos (funciones) correspondientes al control deslizante y al indicador tipo

termómetro, también se observa que hay conexión nula. Esto es porque eliminó el control

numérico. Las conexiones nulas o quebradas se generan cuando se elimina un control,

indicador o función previamente conectados. En algunas ocasiones al querer unir (hilar) las

funciones (iconos) en el programa, no es posible debido a la incompatibilidad de tipo de datos

y entonces también se ganarán las conexiones nulas o rotas. Para quitar o limpiar la

conexiones nulas utilice CTRL+B.

Page 6: 61696142 Control de Puertos de ATMEGA Con Labview

Realice las conexiones como se muestran en la figura siguiente.

Fig. 12 Conexiones del control deslizante e indicador tipo termómetro.

En el panel frontal corra el programa de forma continua (Run Continuously) y deslice el puntero

del control deslizante.

Se puede cambiar los rangos tanto del control deslizante como del indicador tipo termómetro

(el programa no debe de estar corriendo), sólo haga doble click en el valor extremo (superior o

inferior) que quiera modificar e introduzca el nuevo valor y presione Enter o en su defecto haga

click en el icono de la “palomita”. Observe en la figura siguiente como he modificado los rangos.

Fig. 13 Modificación de rangos.

Un programa se puede hacer de varias maneras obteniendo el mismo resultado. Se explicará

otra manera de hacer éste programa con el propósito de comprender la estructura “fórmula”.

Esta estructura de fórmula sirve para escribir una o varias fórmulas. Se usa cuando es más fácil

escribirla(s) que hacerla(s) por medio de “funciones numéricas”. (Generalmente cuando hay

muchas variables o es muy grande la expresión matemática).

Diríjase al Diagrama de Bloques y elimine las funciones numéricas (Ver fig. 14).

Fig. 14 Eliminación de las funciones numéricas.

Seleccione la estructura de fórmula que está en Programming>>Structures>>Formula node.

Una vez colocada la estructura “Formula node” en el Diagrama de Bloques haga click derecho

del mouse sobre el marco del lado izquierdo y seleccione “add input”, y a continuación escriba

Page 7: 61696142 Control de Puertos de ATMEGA Con Labview

el nombre como desee que se llame su variable (de preferencia una sola letra). En el marco del

lado derecho haga lo mismo pero ahora seleccione “add output”. En realidad se puede adherir

variables de entradas y salidas en cualquier parte del marco, pero lo anterior es para llevar un

orden. Dentro de la estructura “fórmula” escriba la expresión F = ((9/5)*C) +32 tal como lo haría

en el lenguaje C (ver fig. 15).

Fig. 15 Estructura Formula.

Por último corra su programa. (no olvide guardar los programas).

LLENADO DE UN TANQUE MODO MANUAL O RANDOM

OBJETIVO: Realizar un programa que simule el llenado de un tanque con la opción de permitir

al usuario seleccionar el tipo de llenado (MANUAL O RANDOM).

En el panel frontal coloque lo siguiente:

• Un indicador tipo tanque ubicado en Numeric indicators>>Tank.

• Un switch ubicado en Buttons>>Toggle switch (Horizontal). Aunque puede ser el que

usted quiera pero que sea switch.

• Un control deslizante ubicado en Numeric control>>Vertical Pointer Slider

En el diagrama de bloques coloque las siguientes funciones:

• Programming>>Numeric>>Random Number

• Programming>>Numeric>>Multiply

• Programming>>Comparison>>Select

Cree una constante con valor de 10 en una entrada de la función numérica de multiplicación y

conecte los iconos como aparecen en la siguiente figura.

Fig. 16 Conexiónes.

El Switch es un control booleano y estrega dos estados, Falso o Verdadero según sea su

estado en el panel Frontal. El selector seleccionará qué entrada es la que saldrá por su terminal

Page 8: 61696142 Control de Puertos de ATMEGA Con Labview

de salida. Si el selector recibe un estado de Verdadero entonces él seleccionará la entrada

superior que en este caso es el control el valor del control deslizante. Y si recibe un estado de

Falso entonces seleccionará la entrada inferior que es el valor del random multiplicado por 10.

La función random genera un número aleatorio del 0 al 1, como estamos multiplicando por un

factor de 10 entonces generáremos números aleatorios de 0 a 10.

Corra su programa en forma continua y pruébelo. Mueva el Switch, cuando no seleccione la

forma random mueva el control.

Recuerde que al crear un control en el panel frontal se crea la función (ícono) correspondiente

en el Diagrama de Bloques. También, puede usted crear controles desde el Diagrama de

bloques, pero el único inconveniente es que tal vez ese control no sea del tipo que desee en el

Panel frontal. Para ejemplificar lo anterior haga lo siguiente:

En el Diagrama de bloque elimine la función del control deslizante (Slide). Limpie la conexión

nula con CTRL+B y en la entrada de la función Selector cree un control haciendo click derecho

del mouse sobre la entrada (cuando aparezca el carrete de hilo) y seleccione crear control. En

el panel frontal observará que se creó el control. Si usted no puede ver el control en el panel

frontal regrese al Diagrama de Bloques y de doble click al control que creó. Al hacer doble click

sobre los controles, indicadores o funciones en el diagrama de bloques o en el panel frontal le

llevará a la ubicación correspondiente de ellos en la otra ventana.

Ahora bien, hay una forma de correr el programa y ver lo que está sucediendo en el diagrama

de bloques de una manera lenta o por etapas. Sólo tiene que seleccionar el botón “Highlight

execution” en el diagrama de bloques y correr el programa (ver la siguiente figura). Note que

allí mismo se puede correr el programa. Para correr el programa en forma normal vuelva a

presionar el botón “Highlight execution”.

Fig. 17 Highlight execution.

Una herramienta de gran ayuda es la ventana “context help” que se abre presionando CRTL+H

o si lo prefiere en el menú help seleccione “context help”. Esta ventana nos da una descripción

de las funciones. Abra esta ventana y ponga el puntero del mouse sobre la función Selector y

observe que la ventana da la información acerca de esa función. Si desea ver la información de

la función random solo coloque el puntero sobre ésta función. Tambien ésta ventana “context

help” nos da la descripción de las funciones que se encuentran en la paleta de funciones en el

diagrama de bloques.

Page 9: 61696142 Control de Puertos de ATMEGA Con Labview

Fig. 18 Ventana context help.

Ahora usted está familiarizado con labview, no es un experto pero con ésto basta para que

usted comience a realizar programas, recuerde que el alcance en este tutorial es tener las

herramientas necesarias para que usted pueda y entienda como realizar la comunicación serial.

Usted puede bajar tutoriales de la red, si puede compre un libro, pero sobre todo practique,

poco a poco empezará a realizar programas de mayor nivel.

Es hora de pasar al cometido de este tutorial que es la trasmisión serial entre el

microcontrolador ATMEGA48 y LabVIEW.

1.2 PROTOCOLO RS-232

El protocolo RS-232 es un estándar de comunicaciones propuesto por la Asociación de

Industrias Electrónicas (EIA) que estandariza las velocidades de transferencia de datos, los

niveles de voltajes utilizados, los conectores, la forma de control que utiliza dicha transferencia,

las distancias entre equipos, etc.

La Norma RS-232 fue definida para conectar un ordenador a un modem. Además de

transmitirse los datos de una forma serie asíncrona son necesarias una serie de señales

adicionales, que se definen en la norma. Las tensiones empleadas están comprendidas entre

12 y -12 voltios.

Normalmente en las computadoras personales de escritorio hay conectores DB9 macho, donde

se conectan los dispositivos al puerto serie. Los conectores hembra que se conectan tienen

una distribución de pines diferente, de tal manera que se conecte el pin 1 del macho con el pin

1 de la hembra, el pin2 con el 2, etc. (ver figura 19). Si usted tiene un equipo de cómputo que

carezca de conector DB9 no se preocupe seguramente si tendrá puerto USB. En este tutorial

se verá cómo hacer la trasmisión serial por medio del puerto USB.

Fig. 19 Conectores DB9

Page 10: 61696142 Control de Puertos de ATMEGA Con Labview

La tabla siguiente muestra la información asociada a cada pin.

PIN No. SEÑAL DESCRIPCIÓN 1 DCD (Data Carrier Detect) Detecta que existen presencia de datos 2 RXD (Recieve Data) Por donde se reciben los datos del dispositivo 3 TXD (Transmit Data) Por donde se transmite los datos del ordenador 4 DTR (Data Terminal Ready) Indica disponibilidad del ordenador 5 GND Masa 6 DSR (Data Sheet Ready) Indica que el dispositivo esta encendido 7 RTS (Request To Send) Indica que el ordenador puede recibir datos 8 CTS (Clear To Send) Indica que el dispositivo puede recibir datos 9 RI (Ring Indicator) Indicador de llamada

Antes de comenzar cualquier comunicación serial el usuario debe de configurar los

parámetros siguientes:

Importante. Tanto el emisor como el receptor deben estar configurados con los mismos

parámetros que a continuación se enumeran

• Número bits.

• Paridad

• Bit de stop

• Velocidad de puerto

• Protocolo de control de flujo (RTS/CTS o XON/XOFF).

Page 11: 61696142 Control de Puertos de ATMEGA Con Labview

1.2.1 MAX232

Para conectar un microcontrolador a la computadora por el puerto serie se utilizan las señales

TXD, RXD y GND (PIN 2,3 y 5). Los microcontroladores trabajan con niveles TTL.(0-5V).

0V = “0”lógico 5V= “1” lógico

La PC utiliza la norma RS232, por lo que los niveles de tensión de los pines están

comprendidos entre 12 y -12 voltios.

12V = “0” lógico -12V= “1” lógico

Por lo tanto, es necesario de un circuito que permita adaptar los diferentes niveles. Se puede

utilizar circuitos con transistores pero existe un circuito integrado que permite adaptar los

niveles RS232 y TTL, este circuito integrado es el MAX232.

En la hoja de datos del MAX232 se encuentra la configuración típica de conexión que a

continuación se muestra.

Figura 20 Configuración típica MAX232.

El MAX232 tiene dos convertidores de nivel TTL (PIN 11 y 10) a RS232 (PIN 14 y 7) y otros

dos que convierten de RS232 (PIN 13 y 8) a TTL (PIN 12 y 9). Por lo tanto puede manejar

cuatro señales. Usted solo utilizá dos TXD y RXD.

1.2.2 CONEXIÓN FÍSICA

Para conectar físicamente la computadora al microcontrolador se puede utilizar un cable serie

macho-hembra no cruzado, un conector DB9 hembra y soldar alambres en las terminales 2,3 y

5 del conector DB9 hembra.

Page 12: 61696142 Control de Puertos de ATMEGA Con Labview

Figura 21. Cable y conectores

Puede omitir el cable macho-hembra pero considere la longitud de los alambres que soldará al

conector DB9 hembra. Se lo dejo a su gusto y a sus necesidades.

Para los lectores que no tengan puerto serie en su computadora personal, necesitarán un

cable adaptador USB a serial como el que se muestra a continuación. Este tipo de adaptador

incluye un disco en donde viene el driver de instalación. También necesitará el conector DB9

hembra.

Fig. 22 Adaptador USB a serial y conector DB9 hembra.

Los datos que transmita el ordenador por la terminal TXD deberán llegar a la línea de recepción

del microcontrolador (PIN RXD) y los datos que envíe el microcontrolador por su PIN TXD

deberán llegar a la terminal de recepción de la computadora RXD (vea la sig. figura)

Fig. 23 Diagrama de conexión entre el conector DB9 hembra, el C.I. MAX232 y el microcontrolador ATMEGA48.

En el diagrama anterior se usaron las terminales 7-10 del MAX232 para la conversión de

niveles de tensión, pero usted puede utilizar si así lo requiere las terminales 11-14 o cualquier

otra combinación.

Page 13: 61696142 Control de Puertos de ATMEGA Con Labview

1.3 PROGRAMACIÓN DEL MICROCONTROLADOR

Existen dos registros para transmitir y recibir los datos en el microcontrolador ambos registros

se llaman UDR0 si se escribe en UDR0 el dato será transmitido por el pin TXD y si se lee el

registro UDR0 recibiremos un dato por el pin RXD. De tal forma que la instrucción:

UDR0=var1;

Escribe el valor de la variable var1 en el registro UDR0 encargado de transmitir y el dato será

transmitido de forma serial por la terminal TXD del microcontrolador.

y la instrucción:

UDR0= read_adc(3);

Escribe el resultado de la conversión del adc 3 en UDR0 y se envía por el pin TXD del

microcontrolaor.

Ahora bien, la instrucción:

x=UDR0;

Lee el valor del registro URD0 de recepción y se lo carga a la variable x.

PORTB=UDR0;

Lee el dato recibido y lo pasa al puerto B.

Existen dos registros encargados de controlar e indicar el estado de la transmisión y recepción.

Éstos son UCSR0A y UCSR0B

Fig. 24 Registro UCSR0A.

RXC0 se pone en uno si hay datos no leídos en el registro UDR0 de recepción y se pone en

cero cuando el registro esta vacio.

TXC0 este bit se pone en uno cuando se completa una transmisión y no hay un nuevo dato

presente en el registro de transmisión UDR0.

UDRE0 este bit se pone en uno cuando el registro de transmisión está listo para recibir un

nuevo dato que será enviado (registro de transmisión UDR0 vacio)

Page 14: 61696142 Control de Puertos de ATMEGA Con Labview

Fig. 25 Registro UCSR0B.

RXCIE0, si este bit se fija en uno se habilita la interrupción por recepción es decir, cada vez

que se reciba un dato completo se interrumpirá el programa y ejecutara la función de

interrupción por recepción (cada vez que el bit RXC0 del registro UCSR0A se ponga en uno el

programa atenderá a ésta petición de interrupción).

TXCIE0 si se pone en uno habilitamos la interrupción por transmisión. Se ejecutara la función

de interrupción por transmisión (cada vez que TXC0 se ponga en uno el programa atenderá a

ésta petición de interrupción).

UDRIE0 si se pone en uno se habilita la interrupción cuando el registro UDR0 de recepción

esta vacio.

RXEN0 si se pone en uno se habilita la recepción, es decir se configura el pin RXD para que

pueda recibir los datos.

TXEN0 si se pone en uno se habilita la y transmisión, es decir se configura el pin TXD para que

se pueda transmitir los datos.

La recepción en el microcontrolador se realizará por interrupción. Entonces, es importante

habilitar la interrupción de recepción en el registro UCSR0B poniendo en uno el bit RXCIE0. A

continuación se muestra la instrucción para habilitar la interrupción.

UCSR0B=UCSR0B|0x80; // se pone en uno el bit RXCIE0 del registro UCSR0B

La función de interrupción se escribirá en el programa de la siguiente manera:

#pragma vector=19 // vector de interrupción por recepción completa

interrupt [USART_RXC] void recepcion (void) // función de interrupción { Código // aquí irá las instrucciones cuando se reciba un dato completo }

Por lo tanto, si se recibe un dato completo, se interrumpe el programa principal y se atiende la

petición de interrupción por recepción, por lo que el programa salta al vector 19 e indica éste

que se ejecute el código que esta dentro de la función de interrupción.

Importante: la función anterior lleva por nombre recepción, puede ir cualquier otro nombre pero

sin acento.

Page 15: 61696142 Control de Puertos de ATMEGA Con Labview

Para la transmisión se utiliza un ciclo while en donde se evalúa sí el registro de transmisión

está vacío y listo para recibir un nuevo dato que será enviado. En otras palabras, se compara si

el bit UDRE0 está en uno. A continuación se muestra el código para enviar un dato por el pin

RXD.

while ((UCSR0A&0x20)==0x20) { UDR0=dato a enviar; } De esta manera si el registro UDR0 de trasmisión está vacío entonces, se escribe en éste el

dato que se trasmitirá (se empezará a transmitir el dato por el pin TXD). Al hacer lo anterior el

bit UDRE0 se pondrá en cero indicando que el registro no está vacío dando como resultado la

ruptura del ciclo while. Note que no se podrá entrar al ciclo hasta que se complete la

transmisión y el registro UDR0 esté vacio y listo para recibir un nuevo dato que será enviado.

Programa: realizar una comunicación serial entre el microcontrolador atmega48 y el ordenador

para la lectura y escritura de pines por medio de Labview.

Se utilizará como entradas los pines PB0, PB1 y PB2 y como salidas los pines PC0, PC1 y

PC2. La combinación que formen los pines PB0-PB2 (lectura de pines) se transmitirán al

ordenador donde se visualizará su estado en LabVIEW mientras que, en éste se mandará un

dato para modificar los pines PC0-PC2 (escritura de pines).

La trasmisión serial requiere que el microcontrolador trabaje con un cristal externo para que los

tiempos sean exactos (ver tutorial para los fusibles por David Infante Sánchez). A continuación

se presenta la configuración en el codewizard para un cristal de 16Mhz.

Page 16: 61696142 Control de Puertos de ATMEGA Con Labview

Fig. 26 Configuración en el Codewizar

Si usted tiene otro cristal de diferente frecuencia solo indíquelo en el codewizar y si no tiene

entonces compre unos en www.comunidadatmel.com

Arme el siguiente circuito y recuerde que los capacitores que se conectan al cristal deben de

ser entre 12pF y 22pF.

Fig. 27 Circuito.

A continuación se muestra el programa

/***************************************************** This program was produced by the CodeWizardAVR V2.03.6 Evaluation Automatic Program Generator © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : SERIAL1 Version : 1 Date : 31/05/2009 Author : Freeware, for evaluation and non-commercial use only Company : VIGA Comments: LECTURA Y ESCRITURA DE PINES Chip type : ATmega48 Clock frequency : 16,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 128 *****************************************************/

Page 17: 61696142 Control de Puertos de ATMEGA Con Labview

#include <mega48.h> // Standard Input/Output functions #include <stdio.h> // Declare your global variables here unsigned char x,y; #pragma vector=19 // vector de interrupción por recepción completa interrupt [USART_RXC] void recepcion (void) // función de interrupción { PORTC=UDR0; // El dato recibido al Puerto C } void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=P State1=P State0=P PORTB=0x07; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out // State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0 PORTC=0x00; DDRC=0x07; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00; TCCR0B=0x00; TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped

Page 18: 61696142 Control de Puertos de ATMEGA Con Labview

// Mode: Normal top=FFh // OC2A output: Disconnected // OC2B output: Disconnected ASSR=0x00; TCCR2A=0x00; TCCR2B=0x00; TCNT2=0x00; OCR2A=0x00; OCR2B=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=0x00; EIMSK=0x00; PCICR=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x00; // Timer/Counter 1 Interrupt(s) initialization TIMSK1=0x00; // Timer/Counter 2 Interrupt(s) initialization TIMSK2=0x00; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART0 Mode: Asynchronous // USART Baud Rate: 9600 UCSR0A=0x00; UCSR0B=0x18; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x67; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; ADCSRB=0x00; UCSR0B=UCSR0B|0x80; // Se habilita la interrupción por recepción #asm("sei") while (1) {x=UDR0; // Se inicializa la recepción y=PINB&0x07; // Se lee el puerto B y se enmascara los tres bits menos significativos while((UCSR0A&0x20)==0x20) // Si el registro UDR0 esta vacio entra a ejecutar la transmisión { UDR0=y; // Transmite el dato } }; }

1.4 PROGRAMACIÓN EN LABVIEW

Lo primero que hay que hacer es configurar el puerto serial mediante el icono “Visa configure

serial port” que se encuentra en la paleta de funciones en: Instrument I/O>>serial>>Configure

serial port. Éste icono tiene varias entradas configurables similares a las que se configuran en

el microcontrolador.

Es importante aclarar que las configuraciones que se hicieron en el codewizar coincidan con

las configuraciones en el labview.

Page 19: 61696142 Control de Puertos de ATMEGA Con Labview

Fig. 28 Configure serial port.

“Timeout”, sirve para liberar los datos almacenados aunque no se completen, por default es de

10 segundos. Cree una constante.

“Visa Resource Name”, selecciona el nombre del puerto que se va usar, cree un control para

que usted pueda seleccionar en el panel frontal el puerto que usará para la comunicación. Es

importante que usted identifique que COM está usando para la comunicación, de lo contrario

usted podría seleccionar uno erróneo y la comunicación no se dará. Para los que usan un cable

adaptador USB a serial pueden saber el COM virtual en el administrador de dispositivos.

Fig. 29 Administrador de dispositivos.

“Baud rate” , aquí se configura la velocidad de transmisión, por default es 9600, cree una

constante.

.

“Data Bits”, le permite seleccionar cuantos bits leerá, 8 ó 9. Cree una constante.

“Parity”, sirve para indicar si se usa bit de paridad, por default es “none” o ninguno. Cree una

constante.

Page 20: 61696142 Control de Puertos de ATMEGA Con Labview

“Error in”, es la entrada de error, pero como no tenemos un icono anterior se deja sin conectar.

“Stop bits”, configura el numero de bits de paro, por default es uno, solo cree una constante.

“Flow control”, es el control de flujo, que no utilizamos, por default esta desactivado (0). Cree

una constante.

“VISA Resource Name Out”, es la salida del nombre del puerto serial, éste se conectará a otras

funciones que lo requieran.

“Error out”, es la salida de error, se recomienda conectar todas las salidas de errores a las

entradas de errores posteriores.

Fig. 30 Configuración del serial.

Una vez configurado la transmisión serial se continúa con la lectura del puerto. Para ello se

utiliza el icono “Read Visa” que esta en: Instrument I/O>>serial>>Read

“Byte count” , es el conteo de byte y es la cantidad de byte que guarda en el arreglo. Cree una

constante de uno.

“Error out”, aquí solo cree un indicador.

Conecte como a continuación se muestra.

Fig. 31 Conexión entre la configuración y Read VISA.

Page 21: 61696142 Control de Puertos de ATMEGA Con Labview

La función “Read Visa” lee los dato en forma de string, cadena de caractér, entonces es

necesario convertirlo a byte, para ello se usa la función “String to byte array” que está en:

programming>>numeric>>Conversion>>String to byte array

Ahora saque la función “Index Array” de: Programming>>Array>> Andex array. Esta función

sirve para obtener los elementos de un arreglo, en este caso los datos recibidos. Cree una

constante de cero en la entrada index.

Saque la función “Number to boolean array” que está en: programming>>

numeric>>Conversion>> Number to boolean array. Cree en su salida un indicador. Ésta

función sirve para convertir el numero a un arreglo booleano y poder ver en leds virtuales la

combinación binaria del dato recibido.

A continuación se muestra las conexiones entre las funciones antes mencionadas.

Fig. 32 Diagrama de lectura.

En el panel frontal solo aparece un led en el indicador, asi que jale el recuadro del led hasta

obtener tres leds indicadores. Como se muestra en la siguiente figura.

Fig. 33 Indicadores.

Para la escritura se utilizará tres push button que se encuentren en la paleta de controles del

panel frontal en: Buttons>>Push button.

Page 22: 61696142 Control de Puertos de ATMEGA Con Labview

Vaya al diagrama de bloques y saque tres funciones boolean to (0,1) que están en:

Programming>>Boolean>> Bool to (0,1).

También se ocupan tres funciones de multiplicación que están en: Programming>>Numeric>>

Multiply.

Haga las conexiones como se muestra a continuación.

Fig. 34 Obtención del dato a enviar.

Ponga el icono para inicializar un arreglo que está ubicado en Programming>>Array>> Initialize

Array.

Utilice la función “Byte Array to String” que está en: Programming>>Numeric>> Conversion>>

Byte Array to String.

Conecte como se muestra a continuación.

Fig. 35 Conversión del dato a String.

Ahora para enviar el dato se utiliza el “VISA Write” que está en: Instrument I/O>>serial>>Write

Se requiere también nuevamente la función para configurar el puerto, recuerde la ruta es:

Instrument I/O>>serial>>Configure serial port. Configure como anteriormente se había hecho.

Page 23: 61696142 Control de Puertos de ATMEGA Con Labview

Conecte como a continuación se muestra.

Fig. 36 Diagrama de escritura.

Por último se utilizarán ciclos while para que se estén ejecutando continuamente la recepción y

trasmisión de forma separada.

Los ciclos while están en: Programming>>Structures>>While Loop

Cree constantes (booleanas de tipo false) en la condicion de paro de los ciclos.

Es recomendable que en la escritura haya un retardo. Esto se puede lograr con la función

“Wait” que está en: Programming>>Timing>>Wait. Cree en la entrada una constante de 10 (10

milisegundos)

A continuación se muestra el diagrama final.

Fig. 37 Programa final.

Page 24: 61696142 Control de Puertos de ATMEGA Con Labview

Ahora solo queda probar todo, conecte su circuito al ordenador, vaya al panel frontal e indique

primero el COM en donde está conectado su circuito y corra el programa.

Fig. 38 Panel frontal del programa.