Control de Puertos de ATMEGA Con Labview
Transcript of Control de Puertos de ATMEGA Con Labview
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
1/24
APRENDA DESDE CERO COMUNICACIN SERIAL CON EL MICROCONTROLADOR
ATMEGA48 Y LABVIEW
Por Arnoldo Ulises Villalobos Guerra
Instituto Tecnolgico Superior de Zamora
Este tutorial est dedicado a la comunidad atmel con el objetivo de que usted se familiarize
con el softwareLabVIEWy realize la comunicacin 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 comunicacin 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 INTRODUCCIN A LabVIEW
LabVIEW de National Instruments, es un softwarede programacin grfica (programacin G) y
difiere de otros lenguajes de programacin como C o Basic, en que stos estn basados en
texto, mientras que G es una programacin grfica y es el corazn 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 cdigo fuente
(DIAGRAMA DE BLOQUES).
LabVIEW no es gratuito pero existe una versin de evaluacin que se puede bajar de la
siguiente pagina http://www.ni.com/trylabview/
Hay que recordar que este tutorial es para realizar una comunicacin serial, por lo que es
indispensable que cuando comience a instalar LabVIEW indique que instale los drivers, pues
al instalar los driversinstala 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
comunicacin serial utilizando USB.
1.1.1 PANEL FRONTAL Y DIAGRAMA DE BLOQUES
Una vez instalado Labview para hacer un programa nuevo slo tiene que ejecutarlo y
seleccionar Blank VI.
Se abrirn 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 fsico. Es aqu en donde pondr los controles y/o indicadores de suprograma. Para colocar los controles o indicadores slo es necesario colocar el puntero del
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
2/24
mousedentro del panel frontal y presionar el botn derecho del mousey elegir el que quiera.
Existen varios tipos de controles. Los hay booleanos, numricos, matriciales, grficos, etc.
El diagrama de bloques es el cdigo fuente del programa o VI. Es donde se realizan los
programas dando solucin grfica a un determinado problema. Es pues, en ste donde har los
programas. En l se encuentran todas las funciones. Las hay numricas, booleanas, de
estructuras, de comparacin, de tiempo, de arreglo, de cadena, etc.
Para sacar la ventana donde estn las funciones slo tiene que presionar el botn derecho del
mousey 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 Celsiusa grados Fahrenheit.
Primero tiene que crear un control numrico 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 mousey seleccionar el control
numrico que est en:
numeric control>>numeric control. (ver figura 2).
Fig. 2 control numrico
El control lo colocara en cualquier lugar de su panel
frontal.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
3/24
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 rpido para
cambiar de la ventana del panel frontal al diagrama de bloques y viceversa es el uso de Ctrl+E.
Fig. 3 control numrico en el diagrama de bloques.
Ahora bien, es necesario colocar un indicador numrico en el panel frontal para observar el
resultado de la conversin. Entonces en el panel frontal seleccione el indicador numrico que
est en: numeric indicators>>numeric indicators(ver fig. 4).
Fig. 4 indicador numrico.
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 tamao, tipo y estilo de letra se selecciona el texto y se modifica en la pestaa
Application Font.
Vaya al diagrama de bloques para hacer el programa.
Se sabe que F = ((9/5)C) +32. Para realizar esta frmula haga uso de las funcionesnumricas de suma y de multiplicacin, que se encuentran en: Programming>>numeric>>
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
4/24
Fig. 6 Funciones numricas.
Cuando se acerque con el puntero del mouse a una entrada o salida de cualquier icono
(funcin) 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 funcin de multiplicacin que no est
conectada (hasta que aparezca el carrete de hilo) y de click al botn derecho del mouse. Cree
una constante (ver fig. 8). Lo mismo haga con la entrada de la funcin 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 configuracin de idioma).
Fig. 9 Conversin terminada.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
5/24
Est terminado el programa, slo falta correrlo, vaya al panel frontal, introduzca un valor en el
control y de click en run. Al correr el programa en run slo har la conversin 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,
slo introdzcalo y presione Entero introdzcalo y de click en icono de la palomita
Fig. 10 Corriendo el programa
Modificara el programa con el fin de familiarizarse un poco ms con LabVIEW. Recuerde que
no se pretende en este tutorial que usted sea un experto solo que tenga las bases para hacer
la transmisin serial.
En el Panel Frontal vaya a Numeric control>>Vertical Pointer Slider. Ahora coloque un indicador
de termmetro, ste se encuentra en: Numeric indicators>>Thermometer. Ver fig. Siguiente.
.
Fig. 11 Control deslizante e indicador tipo termmetro.
Seleccione el control numrico (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
termmetro, tambin se observa que hay conexin nula. Esto es porque elimin el control
numrico. Las conexiones nulas o quebradas se generan cuando se elimina un control,
indicador o funcin 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 tambin se ganarn las conexiones nulas o rotas. Para quitar o limpiar la
conexiones nulas utilice CTRL+B.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
6/24
Realice las conexiones como se muestran en la figura siguiente.
Fig. 12 Conexiones del control deslizante e indicador tipo termmetro.
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 termmetro
(el programa no debe de estar corriendo), slo haga doble click en el valor extremo (superior o
inferior) que quiera modificar e introduzca el nuevo valor y presione Entero en su defecto haga
click en el icono de la palomita. Observe en la figura siguiente como he modificado los rangos.
Fig. 13 Modificacin de rangos.
Un programa se puede hacer de varias maneras obteniendo el mismo resultado. Se explicar
otra manera de hacer ste programa con el propsito de comprender la estructura frmula.
Esta estructura de frmula sirve para escribir una o varias frmulas. Se usa cuando es ms fcil
escribirla(s) que hacerla(s) por medio de funciones numricas. (Generalmente cuando hay
muchas variables o es muy grande la expresin matemtica).
Dirjase al Diagrama de Bloques y elimine las funciones numricas (Ver fig. 14).
Fig. 14 Eliminacin de las funciones numricas.
Seleccione la estructura de frmula que est en Programming>>Structures>>Formula node.Una vez colocada la estructura Formula node en el Diagrama de Bloques haga click derecho
del mousesobre el marco del lado izquierdo y seleccione add input, y a continuacin escriba
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
7/24
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 frmula escriba la expresin F = ((9/5)*C) +32 tal como lo hara
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 opcin 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 switchubicado 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 funcin numrica de multiplicacin y
conecte los iconos como aparecen en la siguiente figura.
Fig. 16 Conexines.
El Switch es un control booleano y estrega dos estados, Falso o Verdadero segn sea su
estado en el panel Frontal. El selector seleccionar qu entrada es la que saldr por su terminal
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
8/24
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 randommultiplicado por 10.
La funcin randomgenera un nmero aleatorio del 0 al 1, como estamos multiplicando por un
factor de 10 entonces generremos nmeros aleatorios de 0 a 10.
Corra su programa en forma continua y prubelo. Mueva el Switch, cuando no seleccione la
forma randommueva el control.
Recuerde que al crear un control en el panel frontal se crea la funcin (cono) correspondiente
en el Diagrama de Bloques. Tambin, 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 funcin del control deslizante (Slide). Limpie la conexinnula con CTRL+B y en la entrada de la funcin Selectorcree un control haciendo click derecho
del mousesobre 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 ubicacin 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. Slo tiene que seleccionar el botn 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 botn 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 helpseleccione context help. Esta ventana nos da una descripcin
de las funciones. Abra esta ventana y ponga el puntero del mousesobre la funcin Selectory
observe que la ventana da la informacin acerca de esa funcin. Si desea ver la informacin de
la funcin randomsolo coloque el puntero sobre sta funcin. Tambien sta ventana context
help nos da la descripcin de las funciones que se encuentran en la paleta de funciones en el
diagrama de bloques.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
9/24
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 comunicacin 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 trasmisin serial entre el
microcontrolador ATMEGA48 y LabVIEW.
1.2 PROTOCOLO RS-232
El protocolo RS-232 es un estndar de comunicaciones propuesto por la Asociacin de
Industrias Electrnicas (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. Adems de
transmitirse los datos de una forma serie asncrona son necesarias una serie de seales
adicionales, que se definen en la norma. Las tensiones empleadas estn 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 distribucin 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 cmputo que
carezca de conector DB9 no se preocupe seguramente si tendr puerto USB. En este tutorial
se ver cmo hacer la trasmisin serial por medio del puerto USB.
Fig. 19 Conectores DB9
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
10/24
La tabla siguiente muestra la informacin asociada a cada pin.
PIN No. SEAL DESCRIPCIN1 DCD (Data Carrier Detect) Detecta que existen presencia de datos2 RXD (Recieve Data) Por donde se reciben los datos del dispositivo3 TXD (Transmit Data) Por donde se transmite los datos del ordenador4 DTR (Data Terminal Ready) Indica disponibilidad del ordenador5 GND Masa6 DSR (Data Sheet Ready) Indica que el dispositivo esta encendido7 RTS (Request To Send) Indica que el ordenador puede recibir datos8 CTS (Clear To Send) Indica que el dispositivo puede recibir datos9 RI (Ring Indicator) Indicador de llamada
Antes de comenzar cualquier comunicacin serial el usuario debe de configurar los
parmetros siguientes:
Importante. Tanto el emisor como el receptor deben estar configurados con los mismos
parmetros que a continuacin se enumeran
Nmero bits.
Paridad
Bit de stop
Velocidad de puerto
Protocolo de control de flujo (RTS/CTS o XON/XOFF).
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
11/24
1.2.1 MAX232
Para conectar un microcontrolador a la computadora por el puerto serie se utilizan las seales
TXD, RXD y GND (PIN 2,3 y 5). Los microcontroladores trabajan con niveles TTL.(0-5V).
0V = 0lgico5V= 1 lgico
La PC utiliza la norma RS232, por lo que los niveles de tensin de los pines estn
comprendidos entre 12 y -12 voltios.
12V = 0 lgico-12V= 1 lgico
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 configuracin tpica de conexin que a
continuacin se muestra.
Figura 20 Configuracin tpica 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 manejarcuatro seales. Usted solo utiliz dos TXD y RXD.
1.2.2 CONEXIN FSICA
Para conectar fsicamente 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.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
12/24
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, necesitarn un
cable adaptador USB a serial como el que se muestra a continuacin. Este tipo de adaptador
incluye un disco en donde viene el driverde instalacin. Tambin 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 debern llegar a la lnea de recepcin
del microcontrolador (PIN RXD) y los datos que enve el microcontrolador por su PIN TXD
debern llegar a la terminal de recepcin de la computadora RXD (vea la sig. figura)
Fig. 23 Diagrama de conexin 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 conversin de
niveles de tensin, pero usted puede utilizar si as lo requiere las terminales 11-14 o cualquier
otra combinacin.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
13/24
1.3 PROGRAMACIN 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 instruccin:
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 instruccin:
UDR0=read_adc(3);Escribe el resultado de la conversin del adc 3 en UDR0 y se enva por el pin TXD del
microcontrolaor.
Ahora bien, la instruccin:
x=UDR0;
Lee el valor del registro URD0 de recepcin 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 transmisin y recepcin.
stos son UCSR0A y UCSR0B
Fig. 24 Registro UCSR0A.
RXC0 se pone en uno si hay datos no ledos en el registro UDR0 de recepcin y se pone en
cero cuando el registro esta vacio.
TXC0 este bit se pone en uno cuando se completa una transmisin y no hay un nuevo dato
presente en el registro de transmisin UDR0.
UDRE0 este bit se pone en uno cuando el registro de transmisin est listo para recibir un
nuevo dato que ser enviado (registro de transmisin UDR0 vacio)
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
14/24
Fig. 25 Registro UCSR0B.
RXCIE0, si este bit se fija en uno se habilita la interrupcin por recepcin es decir, cada vez
que se reciba un dato completo se interrumpir el programa y ejecutara la funcin de
interrupcin por recepcin (cada vez que el bit RXC0 del registro UCSR0A se ponga en uno el
programa atender a sta peticin de interrupcin).
TXCIE0 si se pone en uno habilitamos la interrupcin por transmisin. Se ejecutara la funcin
de interrupcin por transmisin (cada vez que TXC0 se ponga en uno el programa atender a
sta peticin de interrupcin).
UDRIE0 si se pone en uno se habilita la interrupcin cuando el registro UDR0 de recepcin
esta vacio.
RXEN0 si se pone en uno se habilita la recepcin, es decir se configura el pin RXD para que
pueda recibir los datos.
TXEN0 si se pone en uno se habilita la y transmisin, es decir se configura el pin TXD para que
se pueda transmitir los datos.
La recepcin en el microcontrolador se realizar por interrupcin. Entonces, es importante
habilitar la interrupcin de recepcin en el registro UCSR0B poniendo en uno el bit RXCIE0. A
continuacin se muestra la instruccin para habilitar la interrupcin.
UCSR0B=UCSR0B|0x80; // se pone en uno el bit RXCIE0 del registro UCSR0B
La funcin de interrupcin se escribir en el programa de la siguiente manera:
#pragma vector=19 // vector de interrupcin por recepcin completa
interrupt [USART_RXC] void recepcion (void) // funcin de interrupcin{Cdigo // 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
peticin de interrupcin por recepcin, por lo que el programa salta al vector 19 e indica ste
que se ejecute el cdigo que esta dentro de la funcin de interrupcin.
Importante: la funcin anterior lleva por nombre recepcin, puede ir cualquier otro nombre perosin acento.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
15/24
Para la transmisin se utiliza un ciclo while en donde se evala s el registro de transmisin
est vaco y listo para recibir un nuevo dato que ser enviado. En otras palabras, se compara si
el bit UDRE0 est en uno. A continuacin se muestra el cdigo para enviar un dato por el pin
RXD.
while ((UCSR0A&0x20)==0x20){UDR0=dato a enviar;}
De esta manera si el registro UDR0 de trasmisin est vaco 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 vaco dando como resultado la
ruptura del ciclo while. Note que no se podr entrar al ciclo hasta que se complete la
transmisin y el registro UDR0 est vacio y listo para recibir un nuevo dato que ser enviado.
Programa: realizar una comunicacin 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 combinacin que formen los pines PB0-PB2 (lectura de pines) se transmitirn al
ordenador donde se visualizar su estado en LabVIEWmientras que, en ste se mandar un
dato para modificar los pines PC0-PC2 (escritura de pines).
La trasmisin serial requiere que el microcontrolador trabaje con un cristal externo para que los
tiempos sean exactos (ver tutorial para los fusibles por David Infante Snchez). A continuacin
se presenta la configuracin en el codewizard para un cristal de 16Mhz.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
16/24
Fig. 26 Configuracin en el Codewizar
Si usted tiene otro cristal de diferente frecuencia solo indquelo en el codewizary si no tieneentonces 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 continuacin se muestra el programa
/*****************************************************This program was produced by theCodeWizardAVR V2.03.6 EvaluationAutomatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.http://www.hpinfotech.com
Project : SERIAL1Version : 1Date : 31/05/2009Author : Freeware, for evaluation and non-commercial use onlyCompany : VIGAComments:LECTURA Y ESCRITURA DE PINES
Chip type : ATmega48Clock frequency : 16,000000 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 128*****************************************************/
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
17/24
#include // Standard Input/Output functions#include
// Declare your global variables hereunsigned char x,y;
#pragma vector=19 // vector de interrupcin por recepcin completainterrupt [USART_RXC] void recepcion (void) // funcin de interrupcin{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=PPORTB=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=0PORTC=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=TPORTD=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: DisconnectedTCCR0A=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: OffTCCR1A=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
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
18/24
// Mode: Normal top=FFh// OC2A output: Disconnected// OC2B output: DisconnectedASSR=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: OffEICRA=0x00;EIMSK=0x00;PCICR=0x00;
// Timer/Counter 0 Interrupt(s) initializationTIMSK0=0x00;
// Timer/Counter 1 Interrupt(s) initializationTIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initializationTIMSK2=0x00;
// USART initialization// Communication Parameters: 8 Data, 1 Stop, No Parity// USART Receiver: On// USART Transmitter: On// USART0 Mode: Asynchronous// USART Baud Rate: 9600UCSR0A=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 interrupcin por recepcin#asm("sei")
while (1){x=UDR0; // Se inicializa la recepciny=PINB&0x07; // Se lee el puerto B y se enmascara los tres bits menos significativoswhile((UCSR0A&0x20)==0x20) // Si el registro UDR0 esta vacio entra a ejecutar la transmisin{UDR0=y; // Transmite el dato}
};}
1.4 PROGRAMACIN 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.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
19/24
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 comunicacin. Es
importante que usted identifique que COM est usando para la comunicacin, de lo contrario
usted podra seleccionar uno errneo y la comunicacin 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 transmisin, 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.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
20/24
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 Configuracin del serial.
Una vez configurado la transmisin serial se contina 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 continuacin se muestra.
Fig. 31 Conexin entre la configuracin y Read VISA.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
21/24
La funcin Read Visa lee los dato en forma de string, cadena de caractr, entonces es
necesario convertirlo a byte, para ello se usa la funcin String to byte array que est en:
programming>>numeric>>Conversion>>String to byte array
Ahora saque la funcin Index Array de: Programming>>Array>> Andex array. Esta funcin
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 funcin Number to boolean array que est en: programming>>
numeric>>Conversion>> Number to boolean array. Cree en su salida un indicador. sta
funcin sirve para convertir el numero a un arreglo booleano y poder ver en leds virtuales la
combinacin binaria del dato recibido.
A continuacin 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.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
22/24
Vaya al diagrama de bloques y saque tres funciones boolean to (0,1) que estn en:
Programming>>Boolean>> Bool to (0,1).
Tambin se ocupan tres funciones de multiplicacin que estn en: Programming>>Numeric>>
Multiply.
Haga las conexiones como se muestra a continuacin.
Fig. 34 Obtencin del dato a enviar.
Ponga el icono para inicializar un arreglo que est ubicado en Programming>>Array>> Initialize
Array.
Utilice la funcin Byte Array to String que est en: Programming>>Numeric>> Conversion>>
Byte Array to String.
Conecte como se muestra a continuacin.
Fig. 35 Conversin del dato a String.
Ahora para enviar el dato se utiliza el VISA Write que est en: Instrument I/O>>serial>>Write
Se requiere tambin nuevamente la funcin para configurar el puerto, recuerde la ruta es:
Instrument I/O>>serial>>Configure serial port. Configure como anteriormente se haba hecho.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
23/24
Conecte como a continuacin se muestra.
Fig. 36 Diagrama de escritura.
Por ltimo se utilizarn ciclos whilepara que se estn ejecutando continuamente la recepcin y
trasmisin de forma separada.Los ciclos whileestn 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 funcin
Wait que est en: Programming>>Timing>>Wait. Cree en la entrada una constante de 10 (10
milisegundos)
A continuacin se muestra el diagrama final.
Fig. 37 Programa final.
-
5/22/2018 Control de Puertos de ATMEGA Con Labview
24/24
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.