control de puertos de atmega con labview

Upload: inalac2

Post on 13-Oct-2015

74 views

Category:

Documents


4 download

TRANSCRIPT

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