guia de laboratorio 5

Upload: junior-figueroa

Post on 12-Jul-2015

57 views

Category:

Documents


2 download

TRANSCRIPT

GUIA DE LABORATORIO 5 1. TEMA Transmisin y recepcin de datos estableciendo un protocolo de comunicacin RS-232. 2. OBJETIVOS 2.1 GENERAL Desarrollar un proyecto en LabVIEW que permita establecer un protocolo de comunicacin RS-232 haciendo uso de dos pines digitales del FPGA. 2.2 ESPECFICOS ConocerycomprenderelfuncionamientodelestndarRS-232para comunicaciones seriales. Familiarizarse con las funciones que maneja el mdulo LabVIEW FPGA para el almacenamiento (temporal) y transferencia de datos. DesarrollarvariossubVIsqueinteractenconelFPGAyquepermitan establecer el protocolo de comunicacin RS-232. DesarrollarvariosVIsRealTimequepermitanrealizarporseparadolos procesos de inicializacin, lectura y escritura de datos, y la finalizacin de la transferencia y recepcin de datos. 3. MARCO TERICO TomandoenconsideracinquelatarjetasbRIO-9631solocuentaconnicopuerto serieyqueenalgunasdelasprcticasposterioresseutilizarnvariosdispositivosque manejan el protocolo de comunicacin RS-232, se ha desarrollado esta gua de laboratorio conelfindeexplicarydemostrarcomosimulardichoprotocolomediantedospinesE/S digitales del target FPGA. 3.1 Protocolo de Comunicacin RS-232 RS-232significaRecomendStandard232,estdefinidoporelANSI(American NationalStandardInstitution)comolainterfazentreunequipoterminaldedatosyun equipo de comunicacin de datos utilizando un intercambio binario en modo serial. Todacomunicacinelaboradaentredosdispositivosrequiereconocerelprotocolo quelagobiernaanivelhardwareysoftware.Elconceptodecomunicacinseriales sencillo.Elpuertoserial(enestecasolosdospinesdigitales)envayrecibebytesde informacinunbitalavez.Aunycuandoestoesmslentoquelacomunicacinen paralelo,quepermitelatransmisindeunbytecompletoporvez,estemtodode comunicacin es ms sencillo y puede alcanzar mayores distancias. En la literatura tcnica se acostumbra mucho utilizar los trminos DTEyDCE para referir a los dispositivos que se comunican segn el estndar RS-232. DTE (Data Terminal Equipment) suele representar al computador y DCE (Data Circuit-terminating Equipment) designaacualquierdispositivoconectadoalcomputador(unmdemsesobrentenda antes).Sinembargoenlaactualidad,estosconceptosnoquedandeltodoclarosen comunicacionesdeltipocomputador-computador,microcontrolador-microcontrolador, computador-PLC, controlador sbRIO-dispositivo GPS, etc., que pueden o no hacer uso de unpuertoserieosimplementeutilizardospinesparaestablecerdichoprotocolo.Asque porcomodidadenadelantesehablardecomputadorymdem,viendocomomdema cualquier dispositivo conectable al puerto serie (en este caso a los dos pines digitales de la tarjeta sbRIO-9631 que emulan un puerto serial). 3.1.1 Voltajes de los niveles lgicos del RS-232 En las comunicaciones seriales RS-232 los valores para representar los 1 y 0 lgicos son muy diferentes de los que se est acostumbrado a usar en el mundo TTL o CMOS. All noexistenlos5V(parael1)y0V(parael0).Paraentenderlomsfcilmenteobservela Figura 1, donde se compara la forma de onda de una seal RS-232 con la forma de onda de una seal digital convencional. Figura 1 Niveles de tensin para los 1 y 0 lgicos. Sepuedenotarlaenormediferencia:los1lgicosserepresentanconvoltajes negativos y los 0 lgicos, por voltajes positivos; adems del amplio rango de los voltajes. Un1lgicoseexpresaporunatensinde5Va15V.Esteestadosellama spacing. Un0lgicosedacuandolatensinencualquieradelaslneasesde+5Vhasta +15V. Este estado se conoce como marking. Sehaceestacomparacindenivelesdevoltaje,puestoquepuedeexistirelcasoen que la tarjeta sbRIO-9631 la cual dispone de E/S digitales que manejan voltajes entre 0V y 3.3V requiera comunicarse con otro dispositivo que maneje otros niveles de voltaje.Para convertirnivelesTTLoCMOSanivelesRS232sepuedenusarcircuitostpicosde transistoresy diodos discretos, sin embargo, existe un circuito integrado muy popular que permite realizar esta conversin y es conocido como MAX232.3.1.2 Tipos de sincronizacin en una comunicacin serial Existendosmodosbsicospararealizarlatransmisinyrecepcindedatos,estos son: Modo asncrono. Modo sncrono. Enlacomunicacinasncronalosterminalesdelacomunicacinnoestn sincronizadosporunalneadeseal,esdecirquelacomunicacinnoestsincronizada. Noexisteundispositivorelojomtodoquepermitacoordinarlatransmisinentreel dispositivoemisoryelreceptor.Elequipoemisorsloenvadatosyelequiporeceptor simplemente los recibe. A continuacin, el equiporeceptor los comprueba para asegurarse de que los datos recibidos coinciden con losenviados. Enunacomunicacinsncronalosdispositivosdeenvoyrecepcindela comunicacinsonsincronizadosutilizandounrelojquecronometraconprecisinel tiempo que separa cada bit. Al verificar el tiempo el dispositivo receptor puede determinar si un bit se ha perdido o si un bit extra ha sido introducido en el flujo de bits. Si cualquiera de los dispositivos pierde la seal de tiempo la comunicacin es terminada. Tpicamente,lacomunicacinserialseutilizaparatransmitirdatosenformato ASCII.Pararealizarlacomunicacinseutilizan3lneasdetransmisin:(1)Tierra(o referencia),(2)Transmisor(Tx)y(3)Receptor(Rx).Debidoaquelatransmisin implementadaenestaguadelaboratorioesasncrona,esposibleenviardatosporuna lneamientrasserecibendatosporotra.Existenotraslneasdisponiblespararealizar handshaking, o intercambio de pulsos de sincronizacin, pero en este caso en particular no sern requeridas, puesto que la sincronizacin se la va realizar por software.3.1.3 Comunicacin Asncrona Formato de Transferencia de Datos Cuandoseoperaenmodoasncrononoexisteunalneaderelojcomnque establezcaladuracindeunbityelcaracterpuedeserenviadoencualquiermomento. Estoconllevaaquecadadispositivo(emisoryreceptor)tengasupropiasealderelojy quepreviamentesehaacordadoqueambosdispositivostransmitirndatosalamisma velocidad. Este sistema se basa en la necesidad de configurar de forma local los parmetros de comunicacin en cada uno de los dispositivos que intervienen en la comunicacin. Comoentodacomunicacinserial,losdatosviajanengruposdebits.Enestecaso cada grupo o caracter consta de un bit de Start, los bits de Datos (8 por lo general), un bit deParidad(opcional)yfinalizaconunoodosbitsdeStop,talycomosemuestraenla Figura 2. Figura 2 Formato de un byte de dato en el estndar RS-232. Cuandoseenvaunainformacin,staseiniciaconunasealSTART.Enel momento en que el equipo receptor detecta la seal START, pondr en funcionamiento su reloj para ir leyendo los datos a la misma velocidad con la que fueron enviados. El equipo emisor,unaveztransmitidalainformacin,enviarunasealdeSTOPindicandola finalizacindelenvo.CuandoelequiporeceptordetectalasealdeSTOP,detendrla lectura de datos. Estonosindicaqueencadaequipoqueintervieneenlacomunicacinsedeber realizarunaconfiguracinenlaquelosdatosdelosparmetrosconfiguradosdebern coincidirparaunacorrectatransmisinyrecepcindeinformacin.Estaconfiguracin viene definida por los siguientes parmetros:BitdeStartoInicio.Eslasealqueenvaelemisordedatosalrestode participantes para indicarle quea continuacin van empaquetados los datos. Es un bit siempreen estado 0 lgico(transicin de 1 a 0). En la lgica RS-232 podra significar una transicin de -15V a +15V y en lgica TTL es una transicin de 5V a 0V. Bits de Datos. Se refiere a la cantidad de bits que tendr cada carcter utilizado en latransmisin.Cadadatopuedeserde5,7u8bits.Porlogeneralseprefiere trabajarcon 8 bits (1 byte) y 7 bits, esto viene dado segn si se utilizan caracteres de todo el cdigo ASCII (256 caracteres) o la mitad de caracteres de todo el cdigo ASCII (128 caracteres). Bit de Paridad. Este bit es opcional y se puede enviar despus de los bits de datos. Sirve para ayudar a detectar posibles errores en las transferencias de datos. Es muy raramente usado, primero, porque es poco efectivo (solo podra detectar errores, no corregirlos) y, segundo, porque hay mejores formas de tratamiento de errores. Bits de Stop o Parada. Es usado para indicar el fin de la comunicacin de un solo paquete,estebitseenvaalfinaldelosbitsdedatosydelbitdeparidad(si existiera) y trata de poner la seal elctrica a nivel alto (1 lgico), que es el estado normaldelasealenelcanaldecomunicacincuandonoseesttransmitiendo ningunainformacin.Losvalorestpicosson1,1.5o2bits.Debidoalamanera como se transfiere la informacin a travs de las lneas de comunicacin y que cada dispositivotienesupropioreloj,esposiblequelosdosdispositivosnoestn sincronizados.Porlotanto,losbitsdeparadanosloindicanelfindela transmisinsinoademsdanunmargendetoleranciaparaesadiferenciadelos relojes. Mientras ms bits de parada se usen, mayor ser la tolerancia a la sincrona de los relojes, sin embargo la transmisin ser ms lenta. VelocidaddeTransmisin(BaudRate).Eslavelocidadalaquesevana transmitir y, como consecuencia, recibir los datos. Debe ser la misma en todos los equiposqueintervienenenelprocesodetransmisin,debidoquesetratadeun tipo de transmisin asncronay no existe una seal de reloj que sincronice los bits de datos. Indica el nmero de bits por segundo (bps) que se transfieren, y se mide en baudios (bauds). Por ejemplo, una velocidad de 300 baudios representa 300 bits por segundo. Cuando se hace referencia a los ciclos de reloj se est hablando de la velocidaddetransmisin.Porejemplo,sielprotocolohaceunallamadaa4800 ciclosdereloj,entonceselrelojestcorriendoa4800Hz,loquesignificaqueel puerto serial est muestreando las lneas de transmisin a 4800 Hz (4800 ciclos por cadasegundo).LosvaloresmscomunesquefijaelestndarRS-232son:1200, 2400,4800,9600,19200,38400,56000,57600,115200,128000,256000(bps). Aunquelasversionesmsrecientesdelestndarponenunlmitede20kbps,es comn emplear los valores altos como 115200 (siempre que sea posible).Para entender cmo y cuntos datos se transmiten a una determinada velocidad y con ciertos parmetros de configuracin establecidos, se va a explicar el siguiente ejemplo: Se deseadeterminarcuntosbitsdedatosycaracteressontransmitidosdemaneraasncrona en 1 segundo si se transmite a una velocidad de 2400 baudios con 1 bit de inicio, 2 bits de parada, 1 bit de paridad y 6 bits de datos por caracter: Para transmitir un caracter se necesitar: 1 bit inicio + 6 bits datos + 1 bit paridad + 2 bits parada =10 bits. Como la velocidad de transmisin es 2400 baudios y cada caracter consume 10 bits, se transmitirn 240 caracteres por segundo (2400/10). Como cada caracter posee 6 bits de datos sern transmitidos 240 * 6 = 1440 bits de datos por segundo. 3.1.4 Reglas de transmisin asncrona La transmisin asncrona se basa en las siguientes reglas: Cuando no se envan datos por la lnea, sta se mantiene en estado alto (1). Cuando se desea transmitir un carcter, se enva primero un bit de inicio que pone la lnea en estado bajo (0) durante el tiempo de un bit. Durantelatransmisin,silalneaestanivelbajo,seenvaun0ysiestanivel alto se enva un 1. A continuacin se envan todos los bits del mensaje a transmitir con los intervalos que marca el reloj de transmisin. Por convenio se transmiten entre 5 y 8 bits. Seenvaprimeroelbitmenossignificativo(LSB),siendoelmssignificativo (MSB) el ltimo en enviarse. Acontinuacindelltimobitdelmensajeseenvaelbit(olosbits)delfinalque hacequelalneasepongaa1porlomenosduranteeltiempomnimodeunbit. Estosbitspuedenserunbitdeparidadparadetectarerroresyelbitobitsde parada, que indican el fin de la transmisin de un carcter. Losdatoscodificadosporestaregla,puedenserrecibidossiguiendolospasos siguientes: Esperar la transicin 1 a 0 en la seal recibida. Activar el reloj con una frecuencia igual a la del transmisor. Muestrear la seal recibida al ritmo de ese reloj para formar el mensaje. Leerunbitmsdelalneaycomprobarsies1paraconfirmarquenohahabido error en la sincronizacin. Cuandoseestablecelacomunicacinesnecesarioimplementarunabasedetiempo quecontrolelavelocidaddeescrituraylecturadedatos.EnlatarjetasbRIO-9631,se utilizara la base de tiempos del reloj del FPGA, si bien, en trminos genricos se utilizara la divisin de la base de reloj del FPGA y la velocidad de transmisin de datos establecida, segn se indica en la siguiente frmula: Iicmpo Jc Jurocion Jc un bit = IclociJoJ Jc Proccsomicnto Jcl FP0AIclociJoJ Jc Ironsmision RS 2S2 Verificacin del bit de paridad Como ya se ha mencionado, el bit de paridad es una forma sencilla de verificar si hay errores en la transmisin serial. Existen cuatro tipos de paridad:Paridad Par o Even Paridad Impar o Odd Paridad Marcada o Mark Paridad Espaciada o Space Laopcindenousarparidadalgunatambinestdisponible,yselaconocecomo sinparidadoNone.Paraparidadpareimpar,elpuertoserialfijarelbitdeparidad(el ltimo bit despus de los bits de datos) a un valor para asegurarse que la transmisin tenga un nmero par o impar de bits en estado alto lgico. El control que hace el bit de paridad consisteenobservarcuntosbitsseencuentrananivelalto,dondesepuedeencontrar varios casos, segn se muestra en la Tabla 1. N de 1 en los bits de datos Paridad Elegida Estado del bit de paridad Nmero imparPAR1 Nmero imparIMPAR0 Nmero parPAR0 Nmero parIMPAR1 Tabla 1 Verificacin de paridad de tipo par e impar. En el ejemplo que se presenta en la Figura 3 el estado resultante del bit de paridad es 1,yaqueelnmerodebitsqueestanivelaltosontres(nmeroimpar)yla configuracin dada es par. Figura 3 Representacin correcta de un bit de paridad. Si mientras se est enviando la informacin se produce una alteracin en uno de los bitsporunefectoexterno,enelmomentodelacomparacindelbitdeparidadporparte delequiporeceptor,entreelrecibidoyelcalculado,sedetectaraquenocoincide,porlo que se dara como errnea la informacin. EnlaFigura4quedareflejadoquesielequiporeceptorrecibeesainformacin,al contabilizarlosbits1derecibidoscomprobaraqueson4;porlotanto,comola configuracin dada es par, le corresponderaun 0 al estado del bit de paridad, por lo que alrealizarlacomprobacinseobservaqueenlainformacinrecibida(bitsdedatos) aparece un 1, y, por tanto, se tiene una informacin errnea. Figura 4 Deteccin de un error en el bit de paridad. Laparidadmarcadayespaciadaenrealidadnoverificanelestadodelosbitsde datos; simplemente fija el bit de paridad en estado lgico alto para la marcada, y en estado lgico bajo para la espaciada. Esto permite al dispositivo receptor conocer de antemano el estado de un bit, lo que servira para determinar si hay ruido que est afectando de manera negativalatransmisindelosdatos,osilosrelojesdelosdispositivosnoestn sincronizados. 3.2 Transferencia y Almacenamiento de Datos usando FPGA FIFOs Cuandounbucledeescrituraseejecutamsrpidoqueunbucledelectura,se puedenperderdatos.Porlotanto,senecesitadeunatcnicaparaalmacenardatosen memoriahastaqueestosseanledos;lodescritoanteriormenteselopuederealizar haciendo uso de un buffer. Un buffer es un rea de memoria del dispositivo que almacena mltiples datos. UnatcnicamuycomnqueempleanlosdispositivosconarquitecturaRIOpara transferirdatos(yalmacenardatostemporales)entrediferentespartesdeunVIFPGA, entre VIsde un mismo target FPGA, o entre distintos dispositivos, es haciendo uso de un bufferFIFO.UnFIFOesunaestructuradedatosquecontieneelementosenelordenen queserecibenyendondeelprimerelementoescritoenmemoriaeselprimerelemento ledoyremovidodesdelamemoria.LaFigura5muestraelcomportamientodelos elementos en movimiento (datos) a travs de un FIFO. Figura 5 Proceso de almacenamiento y transferencia de datos en un buffer FIFO. UnbufferFPGAFIFOfuncionacomounacoladelongitudfijadondemltiples datospuedenserescritosyledosdesdelamemoria.Adiferenciadeunacola,unbuffer FPGAFIFOasegurauncomportamientodeterminsticomediantelaimposicindeuna restriccin del tamao de los datos, y tanto el elemento lector y el escritor pueden acceder a los datos de forma simultnea. Un buffer FIFO se usa para transferir datos en una de las siguientes maneras: Entre bucles paralelos dentro del dominio de reloj Entre targets FPGA (peer-to-peer) Entre elhost (computador o controlador RT) y el FPGA 3.2.1 Tipos de Buffer FIFOs en LabVIEW FPGA ElMduloLabVIEWFPGAincluyelossiguientestiposdeFIFOs,distribuidos segn la forma de transferir los datos: Dentro de un target FPGA: Use este tipo de FIFOs para transferir datos entre VIs, hacia y desde bucles en un mismo VI, o entre dominios de reloj. oTarget-Scoped:UnnicobufferFIFOtransfieredatoshaciaydesde seccionesdecdigo(bucles)demltiplesVIslocalizadossobreelmismo targetFPGA.TambinsepuedeemplearestetipodeFIFOparatransferir datos desde un subVI a otro en un mismo VI FPGA. oVI-Defined: Un nico buffer FIFO transfiere datos hacia y desde mltiples bucles localizados dentro de un mismo VI. Entre el host (computador o controlador RT) y el FPGA: Se usan FIFOs DMA (AccesoDirectoaMemoria)paratransferirgrandescantidadesdedatosentreel host y el FPGA. Este tipo de FIFO accede directamente a la memoria para transferir datos desde los VIs del target FPGAhacia los VIs del hosty viceversa. Un FIFO DMAasignamemoriaenelhostyeltargetFPGA,sinembargo,actacomouna nicoFIFO.LosFIFOsDMAproporcionanventajasderendimientosobreeluso de controles e indicadores del panel frontal para la comunicacin entre el host y la FPGA. Se tiene de dos tipos: oHost to Target-DMAoTarget to Host-DMA Entredostargets(puntoapunto):SeusanFIFOspeer-to-peerparatransferir datos entre targets sin enviar los datos a travs del host. Se puede usar este tipo de transmisinparaenviardatosentreFPGAsytargetsquenoseanFPGA,perolos targets deben ser capaces de utilizar la arquitectura de flujo peer-to-peer. Creacin de un FPGA FIFO Todos los FIFOs excepto los de tipo VI-Defined tienen un elemento correspondiente(tem)en el proyecto. Por lo tanto, si se utiliza un FIFO que no sea de tipo VI-Definedy seenvaelVIFPGAaotrousuario,sedebeenviarlatotalidaddelproyecto,delo contrario, el VI FPGA no funcionar. Antes de empezar, se debe definir qu tipo de FIFO se desea crear: ParacrearunFIFOdetipoVI-Defined,sedebecolocarsobreeldiagramade bloquesunnodoVI-DefinedFIFOConfigurationlocalizadoenlapaleta Programming>Memory&FIFO.Luegodarclicderechosobreelnodoy seleccionarConfiguredesdeelmencontextual,trasestaaccinaparecerel cuadrodepropiedadesFIFOendondesedeberealizarlasconfiguraciones requeridas. ParacrearFIFOsdetipoTarget-ScopedyDMA,sedaclicderechosobreeltarget FPGA en la ventana del Explorador del Proyecto y se seleccionaNew > FIFO para desplegarelcuadrodedilogodepropiedadesFPGAFIFOquesemuestraenla Figura 6 y en donde se configura las propiedades del buffer FIFO. Figura 6 Cuadro de dilogo de propiedades del FPGA FIFO EnlapropiedadNameseingresaelnombredelbufferFIFO,nombreconelcualla estructuraapareceretiquetadaeneldiagramadebloques.Desdeelmendesplegable TypesegnsemuestraenlaFigura6sepuedeseleccionareltipodeFIFOaemplear: Target-Scoped, Host to Target-DMA o Target to Host-DMA. Asignacin de Memoria LapropiedadImplementation(verFigura6)especificaeltipodealmacenamiento (tipo de memoria) que el buffer FIFO utilizar en el FPGA. Esta opcin est deshabilitada sisehaseleccionadountipodebufferDMA(HosttoTarget-DMAoTargettoHost-DMA). Los tipos de memoria habilitados son los siguientes: Flip-Flops: Almacena datos con estndar flip-flops. Esta opcin almacena los datos usandolascompuertasenelFPGAyproporcionaunrendimientomsrpido.Se puede utilizar este tipo de memoria para el almacenamiento de datos u otras tareas, comosuma y resta. Por esta razn, los flip-flops son a menudo los recursos FPGA menosutilizadosparamoveroalmacenardatos.NationalInstrumentsrecomienda usar esta opcin para pequeos FIFOs, hasta 100 bytes. Look-upTable(LUT):TambinconocidacomoRAMdistribuida,almacenalos datos en tablas de bsqueda habilitadas sobre el FPGA. El FPGA incluye dos tablas debsquedasporpartes.NationalInstrumentsrecomiendausarestaopcinpara FIFOs inferiores a 300 bytes. Block Memory:Tambin conocida como memoria de acceso aleatorio de bloques (bloque RAM o BRAM), es un recurso FPGA dedicado para el almacenamiento de datos.Almacenalosdatosusandobloquesembebidosdememoria.Estaopcinse utilizaparaFIFOsmayoresde300bytes.SedebeasignarelbufferFIFOenla memoriadeusuario(bloquedememoriade80kBsobreunFPGAde1Mde compuertas o 192 kB sobre un FPGA de 3 M) en lugar de asignarlo en los flip-flops otablasdebsquedaparaconservarespaciodelFPGAparaelVIquesevayaa implementar.NOTA:SiseeligelaopcinBlockMemory,noseestarenlacapacidaddeleer datosenunbufferFIFOdetipoTarget-ScopedoVI-Scopedhastaunmximodeseis ciclos de reloj despus de escribir los datos en el FIFO. Utilice la salida Timed Out? de la funcin FIFO Read o la funcin FIFO Write para determinar cundo estn listos los datos. La propiedad Requested Number of Elements (ver Figura 6) especifica el nmero de elementosqueelFPGApuedeocupar.Elmximonmerodeelementosqueelbuffer FIFOpuedesoportardependedeltipodememoriaquesehayaseleccionadoydela cantidad de espacio disponible en el FPGA para ese tipo de memoria. Si el FPGA no tiene el suficiente espacio para el Requested Numberof Elements ingresado,el VIFPGA no se compilar y aparecer un mensaje de error. Utilice el diagrama de flujo mostrado en la Figura 8 para determinar la configuracin FIFO que mejor se adapte a las necesidades de la aplicacin a implementar. 3.2.2 Lectura y Escritura de Datos en los FPGA FIFOs ParaexplicarelfuncionamientodeescrituraylecturasobreunbufferFIFOsevaa tomarcomoejemplounFIFOpreviamentecreadoyetiquetadocomoMyFIFO,detipo Target-Scopedy con una asignacin de memoria de tipo Block Memory. Una vez creado el bufferFIFOestesecolocaautomticamenteenlaventanadelexploradordelproyecto debajo del target FPGA segn se muestra en la Figura 7. Figura 7 Explorador del proyecto con un buffer My FIFO. Figura 8 Diagrama de flujo de las posibles configuraciones del buffer FIFO. ParautilizarelbufferMyFIFOeneldiagramadebloquessepuedenseguirdos caminos:elprimeroconsisteenarrastrarlodirectamentedesdeelexploradordelproyecto aldiagramadebloques,pordefectolafuncinqueseasignaesdeescritura;lasegunda forma esempleando el VI FIFO Method localizado en la paleta Programming > Memory &FIFO,luegodesdeelmendesplegabledelmismoseseleccionaelFIFOpreviamente definidosegnsemuestraenlaFigura9.a(pordefectolafuncinquesecolocaesde escritura).Paracambiarlafuncindeescrituraalecturaoviceversasedaclicderecho sobre el FIFO, luego se elige la opcin Select Method y se escoge la funcin deseada (ver Figura 9.b). Figura 9. a) Seleccin de un buffer FIFO previamente creado y b) Seleccin del mtodo del FIFO Utilice la funcin Write para ingresar datos en un buffer FIFO y la funcin Read para recuperarlosdatosdesdeotraestructuraosubVllocalizadoenelVIFPGA.Lafuncin Read lee el elemento ms antiguo en un FPGA FIFO y elimina dicho elemento. La funcin FIFO Write tiene los siguientes parmetros: Element: Introduce los datos que se desean almacenar en el buffer FIFO. Timeout:Introduce elnmero de ciclos dereloj que la funcin espera para queel espacio disponible del buffer FIFO est lleno. El valor por defecto es 0, es decir sin espera.Unvalorde-1implicaquelafuncinnotomaenconsideracinningn valor de tiempo de espera. Se debe cablear una constante de 0 a la entrada Timeout si la funcin FIFO Write est siendo usada dentro de un nico ciclo Timed Loop. TimedOut?:RetornaTRUEsielespacioenelbufferFIFOnoestdisponible antesquelafuncincompletelaejecucin.SiTimeOut?esTRUE,lafuncinno aade ningn dato que se encuentre localizado en la entrada Element. Debidoalarestriccindetamaofijo,unFIFOpuedeserunmtodode comunicacin con prdidas, as que se debe utilizar un buffer FIFO lo ms grande posible a menosquelaaplicacinimplementadaestlimitadadememoria.LabVIEWconservalos datos existentes cuando el FPGA FIFO est lleno, en lugar de sobrescribir el elemento ms antiguo, la funcin FIFO Write devuelve un valor de TRUE en la salida Timed Out? para indicar que el FPGA FIFO est llenoy no hay datos nuevos que se estn almacenando en elbufferFIFO.SielbufferFIFOestvaco,lafuncinReadesperaydespusdeun tiempo especificado establece la salida Timed Out? a TRUE para especificar que elFIFO est vaco. Figura 10 Ejemplo de cmo utilizar un buffer FIFO en dos dominios de reloj diferentes. LaFigura10muestraunejemplodeunbufferFIFOdetipoTarget-Scopedusado para transferir datos entre dos bucles Timed Loop localizados en el mismo VI FPGA. Los Timed Loop se encuentran en dos dominios de reloj diferentes. El bucle de arriba utiliza un reloj de 80 MHzy el bucle inferior utiliza un reloj de 40 MHz. En este ejemplo, un nodo FPGA I/O en el dominio de reloj de 80 MHzadquiere lecturas de la temperatura desde un dispositivo.UnnodoFIFOMethodescribelosdatosenelbufferFIFO;silosdatosno estn disponibles para ser escritos inmediatamente, el nodo espera, el bucle se detiene y se establece el indicador Write Timed Out? en TRUE. Un nodo FIFO Method en el dominio de reloj de 40 MHz lee los datos, a continuacin pasa los datos a una funcin Less Than 0? Silatemperaturaesmenorquecero,lafuncinestableceelindicadorDeviceFrozen?a TRUE.Silosdatosnoestndisponiblesparaserledosinmediatamente,elnodoFIFO Method espera, el bucle se detiene y se establece el indicador Read Timed Out? en TRUE. 3.2.3 Arquitectura de un FPGA FIFOSiseutilizaprocesosparalelosparasepararelprocesodeE/Sdelprocesode transferencia de datos para la aplicacin RT, el proceso de transferencia de datos no hace ms lento el proceso de E/S. Por lo tanto, se debe implementar bucles separados para esos dosprocesosycompartirlosdatosentrelosbuclescomosemuestraenlaFigura11. MltiplesbuclestambinmejoranelrendimientodelVIRealTimecuandosecomunica con el VI Computer que se ejecuta sobre Windows. Figura 11 Transferencia de Datos y Sincronizacin entre el VI FPGA y el VI Real Time. La arquitectura de la Figura 11 se ejecuta como sigue: 1. El dato es adquirido y escrito en el buffer FIFO localizado en el bucle de E/S. 2. En el bucle de transferencia, el dato es obtenido desde la memoria del buffer FIFO cuando est disponible y colocado en el indicador del panel frontal. 3. DespusdequeeldatoesadquiridoysituadoenelbufferFIFO,elbucledeE/S indica que el dato est disponible para ser usado en la aplicacin del VI Real Time. 4. El VI Real Time empieza a leer los datos desde el VI FPGA (un dato a la vez). 5. Despusdeleerunpuntodedatos,elVIRealTimereconocequeharecibidolos datos y notifica al bucle de transferencia del VI FPGA. 6. EnrespuestaalasealdereconocimientodesdeelVIRealTime,elbuclede transferencia lee el siguiente dato desde la memoria del buffer FIFO y lo sita en el indicador del panel frontal. 7. ElVIRealTimecontinaleyendolosdatosdesdeelVIFPGAyreconocecada operacin de lecturadesde el bucle de transferencia del VI FPGA. 8. Lospasosdel1al7continanejecutndosehastaqueelVIRealTimeleetodoel bloque completo de datos. 4. LISTA DE ELEMENTOS 1 Tarjeta sbRIO-9631 incluida en el robot mvil LabVIEW Robotics sbRIO Starter Kit. 5. PROCEDIMIENTO - PROGRAMACIN CuandoseinstalaelmduloLabVIEWRobotics2010tambinseguardanenel computador un grupo de ejemplos entre los cuales se encuentra un proyecto llamado FPGA RS232quepermitealprogramadorimplementarunprotocolodecomunicacinRS-232 haciendousodedospinesE/SdigitalesdeltargetFPGA.Debidoaquesecuentade antemano con esta ayuda, en esta gua lo que se pretende es explicar la programacin que se ha realizado en este ejemplo, utilizando para dicha actividad la teora proporciona en el MarcoTerico.Laexplicacindelfuncionamientodeesteejemploservircomouna documentacinpreviaparaotrasguasdelaboratorioenlascualessevaaempleareste programa de una forma directa sin entrar en detalles sobre el mismo.ParaaccederalproyectoFPGARS232dirjasealdirectorioC:\ProgramFiles (x86)\NationalInstruments\LabVIEW2010\examples\robotics\RS-232withDIOyabrael archivo FPGA RS232. En la Figura 12 se muestra los elementos que se encuentran dentro del proyecto. Figura 12 Explorador del proyecto FPGA RS232. Los VIs que se muestran en la Figura 12 se los puede dividir en dos grupos, los que se crean y se ejecutan sobre el target FPGA y aquellos que secrean y se ejecutan sobre el procesador de Tiempo Real. A continuacin se va explicar la programacin realizada sobre el diagrama de bloques de cada uno de estos VI. 5.1 Programacin de los VIs FPGA5.1.1 VI LabVIEW FPGA Serial Calc Timing Values Figura 13 Cdigo del diagrama de bloques del VI LabVIEW FPGA Serial Calc Timing Values. En este VI se est determinando el tiempo de duracin de un bit (ciclos de reloj del FPGA). La velocidad de procesamiento del FPGA es de 40 Mhz (40000000 ciclos por cada segundo)ylavelocidaddetransmisinesdefinidaporelusuarioenbaudios(bitpor segundo). Iicmpo Jc Jurocion Jc un bit = IclociJoJ Jc Proccsomicnto Jcl FP0AIclociJoJ Jc Ironsmision RS -2S2 Para el proceso de divisin se emplea la funcin Quotient & Remainder, la cual tiene dossalidas:elrestoyelcocientedeladivisin.Enestecasosolosehahechousodel cocienteyaquesolosedeseatrabajarconnmerosenteros,ademshaciendousode funciones Logical Shift se ha determinado el tiempo de duracin de 1.5 y 2 bits, datos que se utilizan con el bit de parada. 5.1.2 VI LabVIEW FPGA Serial Read Write En este VIes donde se realiza todo el proceso de temporizacin para la transmisin y adquisicin datos en una comunicacin serial RS-232 y la explicacin del mismo se la va arealizardeunaformageneral.CaberesaltarqueesteVIhaceusodelsubVILabVIEW FPGA Serial Calc Timing Values explicado anteriormente.Siguiendo la secuencia de todo el programa del diagrama de bloques se va empezar conlaexplicacindelcdigomostradoenlaFigura14;dentrodelaestructuraFlat Sequencesetienenloscontrolesparaingresarlavelocidaddetransmisin(baudrate),el bitdeparada(stopbits),elbitdedatos(databits),eltipodeparidad(parity),polaridad (Invert Polarity?) y adems se cuenta con un control para seleccionar el pin de E/S digital del FPGA por el cual se van a trasmitir los datos (Transmit). Figura 14 Cdigo de inicio del VI LabVIEW FPGA Serial Read Write. Se inicializa un arreglo de 11 elementos que corresponde al nmero mximo de bits paraenviarorecibiruncaracterycadaelementocontieneenunprincipioeltiempode duracin (ciclos de reloj) de un bit. Se tiene una estructura Case para seleccionar el tiempo deduracindelbitdeparada(1,1.5y2bit)yencadacasosedejapasarelvalordelos ciclosderelojcalculadosenelsubVILabVIEWFPGASerialCalcTimingValues.La posicindeladuracindelbitdeparadadentrodelarreglocreado(longituddebitsde datos + 1) es reemplazada por el valor proveniente de la estructura Case haciendo uso de la funcinReplaceArraySubset.Porltimosehacreadootroarreglode11elementosen donde cada uno de ellos tiene un valor lgico de 0 es decir FALSE. Bucle While para Receptar Datos EnelprimerfragmentodelbucleWhilemostradoenlaFigura15seencuentra realizadaunalgicaparadetectarsiporelpinreceptorhaingresadounaseallgicade 0 (que corresponde al bit de inicio) indicando que a continuacinse deben leer lo bits de datos;esteprocesoesvlidocuandosetieneunapolaridadnormal,esdecirunaseal Invert Polarity? de 0 lgico. Mientras no se detecte la seal lgica de 0 el bucle While internoseguirejecutndoseyelflujodeejecucinnopasardelprimerframedelFlat Sequence.Unavezquesehadetectadoelbitdeinicioosehaactivadoelbotnstop,el bucle While interno deja de ejecutarse y el flujo de ejecucin se traslada al segundo frame del Flat Sequence en donde se realiza una pausa con una duracin de 1.5 bits. Figura 15 Primer fragmento de cdigo del bucle While para receptar datos. En el siguiente fragmento del bucle While (Figura 16), se lleva a cabo el proceso de lectura de los bits de datos. Se tiene un bucle For en donde el nmero de interacciones est dado por la longitud del tamao del dato previamente definido. Antes de la lectura de cada bitsdedatossetieneuntiempodeesperadeunaduracinde1bit,ademsseha inicializadounarreglode8elementosbooleanosconvalorTRUEendondeseirn reemplazando los bits correspondientes a la palabra de datos leda por el pin receptor. Una vez que se han completado todas las iteraciones del bucle For (se ha ledo toda la palabra de datos), el arreglo booleano es convertido a un nmero entero y almacenado en un buffer FIFOetiquetadocomoReadFIFO(detipoTarget-Scopedyconunaasignacinde memoriadetipoBlockMemory),eldatoalmacenadopuedeseraccedidodesdeotroVI localizadoenelmismotargetFPGAutilizandoelmismobufferFIFOperocambiandoel mtodo a lectura. Por ltimo cabe mencionar que se ha hecho uso de una funcin Exclusive OR para determinar el estado del bit de paridad. Figura 16 Segundo fragmento de cdigo del bucle While para receptar datos. En el fragmento mostrado en la Figura 17 se realiza la comprobacin entre el estado debitdeparidaddeterminadoenlapalabradedatosyelbitdeparidadledoporelpin receptor. Lo primero que se realiza es establecer un tiempo de espera de una duracin de 1 bit para poder leer el bit de paridad proveniente del pin receptor. Figura 17 Tercer fragmento de cdigo del bucle While para receptar datos. Para realizar la comprobacin se utiliza una estructura Case en donde el selector est cableadoconlasealprovenientedelcontrolparity(tipodeparidadestablecidaporel usuario), los diferentes casos posibles a verificar son: None, Odd, Even, Mark y Space. Si elvalordelosbitsdeparidadnocoincidensetieneunainformacinerrnea(datos incorrectos)ydichoestadosemuestraconlaactivacindeunindicadorbooleano(led) etiquetado como Read: Transmission Error. EnelltimofragmentodelbucleWhile(Figura18)utilizadoparalarecepcinde datosseleeelpinreceptoryseverificaelestadoenalto1delbitdeparada(sise estuviesetrabajandoconpolaridadnormal).Silaverificacinresultaincorrectase enciende el indicador booleano etiquetado como Read: Transmission Error sealando que se ha presentado un error en la recepcin de los datos. Una vez realizado todo el proceso de lectura se vuelve a ejecutar el bucle While para recibir nuevos datos. Figura 18 ltimo fragmento de cdigo del bucle While para receptar datos. Bucle While para Enviar Datos EnelprimerfragmentodelbucleWhilemostradoenlaFigura19,seempieza leyendo un dato proveniente de otro VI localizado en el mismotarget FPGA haciendo uso deunbufferFIFOetiquetadocomoWriteFIFO(detipoTarget-Scopedyconuna asignacindememoriadetipoBlockMemory)yquetieneactivadolafuncinRead. DentrodelaestructuraFlatSequenceseencuentralocalizadounbucleForendondeel nmerodeiteracionesestdeterminadoporlalongituddeltamaodeldatopreviamente definido. Figura 19 Primer fragmento de cdigo del bucle While para enviar datos. Una vez que el dato es ledo este es transformado en un arreglo de bits. Los valores delarreglobooleano(11elementosFALSE)sonreemplazadosdesdeelndice1porlos elementosdelarreglodebitsdedatos(esteprocesoselorealizaconlafuncinReplace Array Subset), con lo cual el ndice 0 del arreglo booleano queda asignado con un valor de 0 lgico que por ahoracorresponde al bit inicio de la trama. Adems dentro del mismo bucle For se ha hecho uso de una funcin Exclusive OR para determinar el estado del bit de paridad. EnelcdigomostradoenlaFigura20,seharealizadolalgicaparadeterminarel valor booleano del bit de paridad que se debe enviar en la trama, para lo cual se ha hechousotantodelassealesdelbitdeparidadcalculadoyeltipodeparidaddefinidaporel usuario(None,Odd,Even,MarkoSpace)yquesonanalizadasenlaprimeraestructura Case. Luego de que el bit de paridad es determinado, se hace uso de la segunda estructura Caseparaanexardichovalorenelarreglobooleanode11elementosenlaposicinseguidaalltimobitsdedatos.Alfinaldelcdigoydependiendodelapolaridad seleccionada en el control Invert Polarity? se determina el valor lgico del bit de inicioy mediantelafuncinReplaceArraySubsetseanexaestevaloralarreglobooleanode11 elementos en la posicin correspondiente al ndice 0. Por ltimo se anexa el bit de parada al arreglo booleano en la posicin seguida al bit de paridad. Figura 20 Segundo fragmento de cdigo del bucle While para enviar datos. En el ltimo fragmentodel bucleWhile (Figura21) utilizado para la transmisin de datossehaceusodeunestructuraFor(elnmerodeinteraccionesestdadoporla longituddeltamaodetodalatrama)parapoderenviarcadabitqueconformalatramapor el pin transmisor del FPGA. El tiempo de espera tras cada envo de un bit est dado por el valor de los elementos del arreglo que contiene el tiempo de duracin de todos los bits de la trama. Figura 21 ltimo fragmento de cdigo del bucle While para enviar datos. 5.1.3 VI RS-232 FPGA Main Este VI cumple tres funciones: Mediante el uso del VILabVIEW FPGA SerialReadWriteestableceryconfigurar los parmetros del protocolo de comunicacin RS-232. Mostrar en un indicador los datos recibidos por el pin receptor del FPGA y detectar la presencia de nuevos datos. Medianteuncontrolnumrico,ingresaryenviarlosdatosalVILabVIEWFPGA Serial Read Write para su posterior tratamiento Figura 22 Panel frontal del VI RS-232 FPGA Main. En elcdigo mostrado en laFigura 23 se ha utilizado al VI LabVIEWFPGA Serial Read Write para configurar los parmetros del protocolo RS-232. Adems es aqu en donde seestablececulessernlospinesdelFPGAquesernutilizadoscomoreceptory transmisor respectivamente. Figura 23 Primer fragmento de cdigo del VI RS-232 FPGA Main. ElbucleWhilemostradoenlaFigura24eselencargadoderecibirymostrarlos datosenviadosdesdeelVILabVIEWFPGASerialReadWrite.Comoseobservaseha empleadounbufferFIFO(detipoTarget-Scopedyconunaasignacindememoriade tipoBlockMemory)etiquetadocomoReadFIFOyconfiguradoconunafuncinRead; estemismobufferFIFOesempleadoenelVILabVIEWFPGASerialReadWritepero configuradocon una funcinWrite para poder ingresar alFIFO los datosrecibidos porel pin receptor del FPGA. Figura 24 Segundo fragmento de cdigo del VI RS-232 FPGA Main. ElbucleWhilemostradoenlaFigura25eselencargadodeactivaronola transmisindedatosydeenviarlosdatosingresadosenelcontrolWrite:CharalVI LabVIEW FPGA Serial Read Write. Como se observa se ha empleado un buffer FIFO(de tipoTarget-ScopedyconunaasignacindememoriadetipoBlockMemory)etiquetado comoWriteFIFOyconfiguradoconunafuncinWrite;estemismobufferFIFOes empleadoenelVILabVIEWFPGASerialReadWriteperoconfiguradoconunafuncin Read para poder obtener del FIFO los datos proporcionados por el VI RS-232 FPGA Main. Figura 25 Tercer fragmento de cdigo del VI RS-232 FPGA Main. TodosloscontroleseindicadoresmostradoseneldiagramadebloquesdelVIRS-232 FPGA Main son los que emplearn en el o los VIs Real Time creados. 5.2. Programacin de los VIs Real Time LosVIsRealTimeutilizanloscontroleseindicadoresdelVIRS-232FPGAMain para poderaccedery enviar los datos desde su panel frontal. En esta seccin solo se har referenciaalasfuncionalidadesdelasentradasysalidasdeestosVIs,losprogramas realizadosensusrespectivosdiagramasdebloquessernmostradosperonosern explicadosdebidoalafcilcomprensindelosmismosporpartedelusuario.Secuenta concuatroVIsRealTimequesirvenparaelprocesodeinicializacindelprotocoloRS-232,lecturayescrituradedatos,yunltimoprocesoparafinalizarlatransmisiny recepcin de datos. 5.2.1 VI LabVIEW Real-Time Serial Initialize EsteVIeselencargadodeestablecerlacomunicacinconprotocoloRS-232y realizar una referencia del VI RS-232 FPGA Main haciendo uso de la funcin Open FPGA VIReferencesegnsemuestraenlaFigura26.EnlaFigura27sepuedenobservarlas entradas de este VI que corresponden a los parmetros de configuracin para una correcta transmisin y recepcin de informacin; adems se tiene una salida que hace referencia al VI RS-232 FPGA Main y que puede ser usada por cualquiera de los otros VIs Real Time. Figura 26 Cdigo del diagrama de bloques del VI LabVIEW Real-Time Serial Initialize. Figura 27 Apariencia del VI LabVIEW Real-Time Serial Initialize sobre el diagrama de bloques. 5.2.2 VI LabVIEW Real-Time Serial Read EsteVItieneimplementadalalgicanecesaria(verFigura28)paradeterminarsi existendatosvlidosparaserledosdesdeelVIRS-232FPGAMain.Lasentradasy salidas principales de este VI (Figura 29) sirven para realizar las siguientes acciones: BytestoRead:Estaentradaespecficaelnmerodebytesquesernledosentre cada cambio de lnea.Timeout (ms) (-1: no timeout): Establece el tiempo de espera (en milisegundos) de undato.Siseingresaunvalorde-1esteVIhacecasoomisoaestacondicinde espera.TerminationCharacter(Linefeed):Representalasecuenciadefinalizacindeun dato, para lo cual se ingresa la combinacin especial /n (cambio de lnea). String: Retorna el dato ledo (caracter ASCII) en formato string. Figura 28 Cdigo del diagrama de bloques del VI LabVIEW Real-Time Serial Read. Figura 29 Apariencia del VI LabVIEW Real-Time Serial Read sobre el diagrama de bloques. 5.2.3 VI LabVIEW Real-Time Serial Write LafuncindeesteVIesladeenviardatos(caracteresASCII)alVIRS-232FPGA Main, segn la lgica implementada en la Figura 30.La lnea de entrada principal de este VI (Figura 31) sirve para realiza la siguiente accin: String: Corresponde a una entrada en donde se ingresan los datos a ser transmitidos (caracteres ASCII) en formato string. Figura 30 Cdigo del diagrama de bloques del VI LabVIEW Real-Time Serial Write. Figura 31 Apariencia del VI LabVIEW Real-Time Serial Write sobre el diagrama de bloques. 5.2.4 VI LabVIEW Real-Time Serial Close EsteVIpermitedetenerelprocesodetransmisinyrecepcindedatos.Adems cierra la referencia del VI RS-232 FPGA Main, ver Figura 32. Figura 32 VI LabVIEW Real-Time Serial Close a) Apariencia y b) Diagrama de bloques. 5.2.5 VI FPGA RS232 Write Read Example ElproyectoFPGARS232cuentaconunejemploVIFPGARS232WriteRead Example(verFigura33),quepermitealosprogramadoresdeLabVIEWteneruna referenciadecmoutilizarlosVIsRealTimeexplicadosanteriormente.Elusuariopuede modificar este programa para ajustarlo a las necesidades de la aplicacin a implementar. Figura 33 Diagrama de bloques del VI FPGA RS232 Write Read Example 6. CONCLUSIONES 7. RECOMENDACIONES