You are on page 1of 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 software LabVIEW y 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 software de 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 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 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 su programa. Para colocar los controles o indicadores slo es necesario colocar el puntero del

mouse dentro del panel frontal y presionar el botn derecho del mouse y 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 mouse y seleccionar lo que necesite.

Fig. 1 Paleta de Funciones.

1.1.2

MIS PRIMEROS PROGRAMAS

CONVERSION DE A C F OBJETIVO: Realizar un programa que convierta grados Celsius a 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 mouse y 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.

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 = ((9/5) +32. Para realizar esta frmula haga uso de las funciones F C) numricas de suma y de multiplicacin, que se encuentran en: Programming>>numeric>>

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 = ((9/5) +32, pero 9/5=1.8 ( 1,8 depende la configuracin de idioma). F C)

Fig. 9 Conversin terminada.

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 Enter o 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.

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 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 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 mouse sobre el marco del lado izquierdo y seleccione add input, y a continuacin escriba

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 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 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

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 funcin random genera 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 random mueva 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 conexin nula con CTRL+B y en la entrada de la funcin 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 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 help seleccione context help. Esta ventana nos da una descripcin de las funciones. Abra esta ventana y ponga el puntero del mouse sobre la funcin Selector y observe que la ventana da la informacin acerca de esa funcin. Si desea ver la informacin de la funcin random solo 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.

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

La tabla siguiente muestra la informacin asociada a cada pin. PIN No. 1 2 3 4 5 6 7 8 9 SEAL DCD (Data Carrier Detect) RXD (Recieve Data) TXD (Transmit Data) DTR (Data Terminal Ready) GND DSR (Data Sheet Ready) RTS (Request To Send) CTS (Clear To Send) RI (Ring Indicator) DESCRIPCIN Detecta que existen presencia de datos Por donde se reciben los datos del dispositivo Por donde se transmite los datos del ordenador Indica disponibilidad del ordenador Masa Indica que el dispositivo esta encendido Indica que el ordenador puede recibir datos Indica que el dispositivo puede recibir datos 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).

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 = 0lgico 5V= 1 lgico La PC utiliza la norma RS232, por lo que los niveles de tensin de los pines estn 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.

comprendidos entre 12 y -12 voltios.

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 manejar cuatro 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.

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 driver de 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.

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)

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 interrupt [USART_RXC] void recepcion (void) { Cdigo } // vector de interrupcin por recepcin completa // funcin de interrupcin // 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 pero sin acento.

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 LabVIEW mientras 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.

Fig. 26 Configuracin en el Codewizar Si usted tiene otro cristal de diferente frecuencia solo indquelo 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 continuacin 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 *****************************************************/

#include <mega48.h> // Standard Input/Output functions #include <stdio.h> // Declare your global variables here unsigned char x,y; #pragma vector=19 interrupt [USART_RXC] void recepcion (void) { PORTC=UDR0; } void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsizeCLKPR=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 // vector de interrupcin por recepcin completa // funcin de interrupcin // El dato recibido al Puerto C

// 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; #asm("sei") // Se habilita la interrupcin por recepcin

while (1) {x=UDR0; y=PINB&0x07; while((UCSR0A&0x20)==0x20) { UDR0=y; } }; }

// Se inicializa la recepcin // Se lee el puerto B y se enmascara los tres bits menos significativos // Si el registro UDR0 esta vacio entra a ejecutar la transmisin // 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.

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.

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.

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. combinacin binaria del dato recibido.

Cree en su salida un indicador. sta

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

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.

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.

Conecte como a continuacin se muestra.

Fig. 36 Diagrama de escritura. Por ltimo se utilizarn ciclos while para que se estn ejecutando continuamente la recepcin y trasmisin de forma separada. Los ciclos while estn 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.

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.

You might also like