practica2 fender

Upload: diana-colin-amador

Post on 04-Jun-2018

243 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/13/2019 Practica2 FENDER

    1/17

    UNIVERSIDAD AUTNOMA DE YUCATN

    Facul tad de Ingeniera

    Dispositivos de Control

    Practica 2: Puertos de Entrada y Salida

    Equipo: FENDER

    Integrantes:

    Coln Amador, Diana Monserrat.

    May Tzuc, Oscar de Jess.

    Gngora Nio, Sergio.

    Profesor:M en C. Mauricio Romero.

  • 8/13/2019 Practica2 FENDER

    2/17

    Objetivo.

    Aprender a seleccionar la configuracin adecuada para los puertos de acuerdo al hardware que se requieraconectar, as como realizar manipulaciones en los bits mediante el uso de mscaras.

    Introduccin.Los Puertos de entrada y salida son el mecanismo bsico que permite a un Microcontrolador interactuar conel mundo, de su correcta configuracin depende el funcionamiento adecuado de nuestros diseos. Aunqueexisten algunos mdulos que configuran de forma automtica los puertos, existen muchos otros que no lohacen; si adems usamos hardware que no se encuentre en las bibliotecas de mdulos de usuario,necesitamos asegurarnos que todas las terminales conectadas a dicho hardware estn correctamenteconfiguradas.

    En algunas aplicaciones puede llegar a ser necesario cambiar la configuracin en tiempo de ejecucin paradetectar algunas condiciones de error en los dispositivos.

    El PSoC cuenta con 8 configuraciones diferentes para los puertos, algunas de las cuales funcionan de dosmaneras diferentes de acuerdo a los datos escritos en el puerto.

    Para realizar las configuraciones de los puertos de entrada y salida (GPIOs a partir de ahora), contamoscon 4 registros importantes: PRTxDM0, PRTxDM1, PRTxDM2 y PRTxDR. Los tres primeros son losregistros de Modo, y configuran el tipo de Drive del puerto, y el ltimo es el registro de datos, que sirvepara escribir y leer los pines del puerto.

    Cada bit de estos registros sirve para configurar una terminal del puerto de acuerdo a la siguiente tabla:

    Como se ve en la tabla, el funcionamiento de las terminales, no solo depende de los registros de Modo, sinotambin del valor del registro de datos, por lo que hay que prestar atencin que al manipular los bits de unpuerto, no cambiemos accidentalmente los valores de datos de las terminales. No siempre lo que escribimos

    y leemos de los puertos va a coincidir.

    Dependiendo del hardware que se conecta a las terminales es el modo seleccionado.

    Los Modos Strong son de SOLO SALIDA, y sirven para conectarse a dispositivos que requierenuna corriente de entrada considerable como son los LEDs, Bocinas Piezoelctricas, etc. Debemostener cuidado de nunca conectar directamente las terminales conectadas de este modo a tierra o aalimentacin, ya que corremos el riesgo de causar un corto circuito.

  • 8/13/2019 Practica2 FENDER

    3/17

    El modo Hi-Z es un modo de SOLO ENTRADA. Sirve para conectarse a dispositivos digitalescuyas salidas siempre estn presentes, como puede ser un comparador, un convertidor RS232-TTL,etc. Cuando estas terminales no se encuentran conectadas a nada, su valor es indeterminado. Lasterminales no usadas del PSoC deben de configurarse en este modo, o en modo Hi-Z analgico.

    El Modo Hi-Z Analgico es similar elctricamente al modo Hi-Z digital, la diferencia es que elmodo digital va conectado a un latch, para digitalizar la seal, mientras que el modo analgico envadirectamente la seal hacia la seccin analgica del chip. Este modo ES BIDIRECCIONAL, Sufuncionamiento como entrada o salida depende de las conexiones internas en la seccin analgica.

    El modo Pull-Up es BIDIRECCIONAL. Dependiendo de como se conecte y del valor del registroPRTxDR, puede funcionar como entrada y/o salida. Una terminal conectada en este modo no debeconectarse directamente a alimentacin, ya que podra ocurrir un corto circuito. Para poder usaresta configuracin como entrada, debemos escribir un 1 en el bit del registro PRTxDR que

    corresponda a la terminal que queremos leer, ya que de esa manera el valor ledo ser el del valor

    lgico de la terminal. Este modo se suele usar para conectar Interruptores o para dispositivosbidireccionales como son los LCDs.

    El modo Pull-Down es BIDIRECCIONAL. Dependiendo de como se conecte y del valor del registroPRTxDR, puede funcionar como entrada y/o salida. Una terminal conectada en este modo no debeconectarse directamente a tierra, ya que podra ocurrir un corto circuito. Para poder usar estaconfiguracin como entrada, debemos escribir un 0 en el bit del registro PRTxDR quecorresponda a la terminal que queremos leer, ya que de esa manera el valor ledo ser el del valorlgico de la terminal. Este modo se suele usar para conectar Interruptores o para dispositivosbidireccionales como son los LCDs.

    El modo Open Drain Drives High es BIDIRECCIONAL. Dependiendo de como se conecte y delvalor del registro PRTxDR, puede funcionar como entrada y/o salida. Una terminal conectada eneste modo no debe conectarse directamente a tierra, ya que podra ocurrir un corto circuito. Parapoder usar esta configuracin como entrada, debemos escribir un 0 en el bit del registro PRTxDR

    que corresponda a la terminal que queremos leer, ya que de esa manera el valor ledo ser el delvalor lgico de la terminal. Cuando se usa como entrada esta entrada es de tipo Hi-Z, por lo queno debe de estar flotando. Este modo se suele usar para conectarse a buses de datosbidireccionales.

    El modo Open Drain Drives Low es BIDIRECCIONAL. Dependiendo de como se conecte y del valordel registro PRTxDR, puede funcionar como entrada y/o salida. Una terminal conectada en estemodo no debe conectarse directamente a alimentacin, ya que podra ocurrir un corto circuito. Parapoder usar esta configuracin como entrada, debemos escribir un 1 en el bit del registro PRTxDR

    que corresponda a la terminal que queremos leer, ya que de esa manera el valor ledo ser el delvalor lgico de la terminal. Cuando se usa como entrada esta entrada es de tipo Hi -Z, por lo queno debe de estar flotando. Este modo se suele usar para conectarse a buses de datosbidireccionales.

  • 8/13/2019 Practica2 FENDER

    4/17

    Desarrollo.

    Se cconecta un Dip Switch de 4 interruptores y 4 leds como se muestra en el siguiente diagrama deconexiones.

    Iniciaremos creando un proyecto en C y le Llamaremos Practica2a. En este Proyecto usaremos el mdulo

    de LCD (y el de LED en caso de que el LCD tenga Luz), no utilizaremos la barra y lo conectaremos al puerto

    2 con los mismos parmetros de la prctica anterior. Despus de configurar los mdulos, configuraremos el

    Puerto 1 usando la interfaz grfica del Designer.

    Se dan la siguiente configuracin para los puertos (segn el orden de la practica primero se prueba con el Z

    analgico y posteriormente con el digital):

  • 8/13/2019 Practica2 FENDER

    5/17

    Esta configuracin se aplica en el archivo boot.asm, y se quedar fija a menos que la cambiemos en tiempode ejecucin por medio de los registros.

    Escribimos el cdigo que se muestra a continuacin y presiona el botn Generate/Build.

    #include // part specific constants and macros

    #include"PSoCAPI.h" // PSoC API definitions for all User Modulesvoidmain(void){

    LCD_Start();LED_Start();LED_On();LCD_PrCString("Practica GPIOs");PRT1DR=0x5F;while(1){

    LCD_Position(1,0);LCD_PrHexByte(PRT1DR);

    }}

    Que hace este programa?:

    Segn el cdigo este programa debe de escribir en la primera lnea del LCD la practica que se est

    realizando, posteriormente segn la instruccin que se ingresa al Puerto 1, se espera que se enciendan dos

    de los LEDs y que en la segunda lnea del LCD se visualice el valor en hexadecimal ingresado en el puerto 1

    a travs del dip switch.

    Se comporta como esperabas?:

    En ambas circunstancias el programa compil y se cargo sin ningn problema en el microcontrolador, no

    obstante nose observaron los resultados esperados debido a:

    Hi- Z Analgico No entra al buffer digital.

    Hi-Z Debido a que escrituras al registro PRTxDR en este modo no tienen efecto.

    Cambia Otra vez la Configuracin de los puertos a:

  • 8/13/2019 Practica2 FENDER

    6/17

    Se comporta como esperabas el programa? Cambia el funcionamiento, si el comn del dipswitch lo cambias entre tierra y alimentacin? Por qu?

    Despus de esta ultima modificacin el circuito tal y como estaba

    descrito al principio, esto debido a que la configuracin de Pull-

    Up es una configuracin de entrada, por lo cual reconoce los

    estados lgicos alto y bajo.

    Cada vez que se mueve el dip switch a on el pin cambia de High a

    Low, si se llegase a cambiar el comn del dip switch a Vcc, no

    veramos ningn cambio debido a que el pin estara en estado

    High y al mover el switch ste serpia alimentado con Vcc.

    0 1 0 1 1 1 1 1

    0 0 0 0

    Bits LedsBits Dip Switch(PULL

    UP)

    1

    1

    1

    1

    1

    0

    0

    0

    0

  • 8/13/2019 Practica2 FENDER

    7/17

    Cambia Otra vez la Configuracin de los puertos a:

    Cambia la lnea 13 del programa de: PRT1DR=5F; a PRT1DR=50;. Compila y corre ahorael programa y mueve los interruptores a diferentes posiciones. Se comporta comoesperabas el programa? Cambia el funcionamiento, si el comn del dip switch lo cambias

    entre tierra y alimentacin? Porque?Despus de haber observado el comportamiento con el Pull-Up, se dedujo la forma en que funcionara el

    Pull-Down, misma que despus de compilar y cargar el programa fue confirmada.

    El cambio de 5F a 50 en el puerto 1 se realiz para colocar en ceros los pines asignados al dip switch, lo

    cual es necesario cuando se trabaja en configuracin de pull- down.

    Cuando conectamos los dips switchs a tierra ocurre algo similar en el caso anterior cuando no funciona el

    pull-up. Al estar referenciados a 0V, cuando se mueve el switch este lo tira a tierra, por lo cual no hay

    cambios.

    Cuando los dips switchs estn conectados a Vcc, al mover el switch cambia el estado lgico, lo cual se puedevisualizar en la LCD.

    Conservando la misma configuracin copia el siguiente cdigo:

    #include // part specific constants and macros#include"PSoCAPI.h" // PSoC API definitions for all User Modules

  • 8/13/2019 Practica2 FENDER

    8/17

    voidmain(void){

    LCD_Start();LED_Start();LED_On();LCD_PrCString("Practica GPIOs");

    while(1){LCD_Position(1,0);LCD_PrHexByte(PRT1DR);PRT1DR=PRT1DR

  • 8/13/2019 Practica2 FENDER

    9/17

    Por qu fue necesario usar una OR con la mscara?

    Como ya se explic, la accin del corrimiento eliminaba la configuracin del pull-up por lo cual era necesario

    el uso de una mascar para asignarle esos valores al puerto 1. Para ello se us el OR (|), el cual compara los

    valores en formato binario de cada operador y se obtiene un valor cuyo bit muestra patrn que los bits en

    cualquiera de los operandos tiene el valor 1. Si los dos bits son 0, el resultado de ese bit es 0, de locontrario, el resultado es 1.

    Crea un nuevo Proyecto en ensamblador y llmalo Practica2b. Conecta 8 LEDs al puerto 1 como semuestra en la figura, y escribe el siguiente cdigo.

    nclude"m8c.inc" ; part specific constants and macrosinclude"memory.inc" ; Constants & macros for SMM/LMM and Compilerinclude"PSoCAPI.inc" ; PSoC API definitions for all User Modulesexport_mainLedpares: equ0b01010101Ledimpares: equ0b10101010areabss(RAM)Pausa:blk1areatext(ROM,REL)_main:

    callLCD_StartcallLED_StartcallLED_On

    Cicloprincipal:

    movreg[PRT1DR],LedparescallPausaSoftwaremovreg[PRT1DR],LedimparescallPausaSoftwarejmpCicloprincipal

    ;________________________________Subrutina____________________________

    PausaSoftware:mov[Pausa],200loop:

    movA,100callLCD_Delay50uTimes

    dec[Pausa]jnzloopret

  • 8/13/2019 Practica2 FENDER

    10/17

    Ejectalo. Funciona el cdigo? Qu le hace

    falta?El cdigo funcion perfectamente al primer

    intento ya que consideramos la configuracin de los pines del puerto 1, los cuales fueron colocados en modo

    strong para as fungir como salidas para dispositivos como los LEDs.

    Aumenta el siguiente Cdigo:

    ;configuracion manual de los puertos de ejecucionmovreg[PRT1DM2],0b00000000M8C_SetBank1movreg[PRT1DM1],0b00000000

    movreg[PRT1DM0],0b11111111M8C_SetBank0

  • 8/13/2019 Practica2 FENDER

    11/17

    Para que sirven las macros M8C_SetBank1 y M8C_SetBank0, y porque las necesitamos ennuestro programa? (Checa el manual de referencia de la familia CY8C29xxx)

    PSoC1 tiene dos bytes de 256 pginas que soportan los registros del mdulo de usuario. Algunos de ellos seencuentran en el banco 0 y algunos en el banco 1. Cada vez que un registro se menciona en el texto del

    dispositivo o mdulo de usuario hojas de datos, hay una indicacin de si se trata en el banco 0 o banco1. Por lo tanto, es necesario que est en el banco apropiado para la ejecucin de una instruccin en el

    registro. M8C_SetBank1 macro establece la pgina de macro para el banco 1 y M8C_SetBank0 establece la

    pgina de banco 0.

    Bank 0 de registros son ms propensos modificado durante la ejecucin del cdigo de usuario no durante lainicializacin y por lo tanto se han nombrado como registros de espacio de usuario. Por el contrario, los

    bancos 1 registros son ms propensos modificado durante la inicializacin no durante la ejecucin y por lotanto se han nombrado como registros de espacio de configuracin.

    Por ejemplo, cada bloque digital tiene las siguientes 7 registros:1. Funcin de registro2. Registro de entrada3. Registro de salida4. DR0 Registrarse5. DR1 Registrarse6. DR2 Registrarse7. CR0 Registrarse

    De los ms de 7 registros de funciones, de entrada y de salida se colocan en el banco 1 y DR0, DR1 DR2 yCR0 registros se colocan en Bank0.

    En Ensamblador crea un programa para leer un teclado matricial en el puerto 1. El programa principaldeber de leer el teclado y desplegar en la pantalla de LCD el mensaje Presionando: y la tecla que se

    haya presionado, durante el tiempo que se mantenga presionada. Cuando no haya ninguna tecla presionada,se deber desplegar el mensaje Presione una Tecla. Se deber hacer una subrutina de lectura de tecladollamada ReadKeys que deber regresar en el acumulador el cdigo ASCII de la tecla apretada. En caso deque no se presione ninguna tecla, la subrutina deber regresar cero (0x00).

    En la siguiente Figura se muestra el diagrama de conexin de un teclado matricial. Estos teclados puedencomprarse, ya que se usan en una gran cantidad de dispositivos como los telfonos, cajeros automticos,cerraduras de seguridad, etc.

  • 8/13/2019 Practica2 FENDER

    12/17

    Para leer un teclado matricial, pon las columnas como salida y las filas como entradas con Pull-Up. Escribecero a todas las salidas y lee las entradas. En la fila donde se haya presionado una tecla va a aparecer uncero. Despus configura las filas como salidas y las columnas como entradas con Pull-Up y escribe cero a las

    salidas de nuevo. Lee las entradas, y donde a parezca un cero esa es la columna del interruptor que sepresion. Con los resultados de las dos lecturas anteriores, podemos saber la fila y la columna delinterruptor presionado, y por lo tanto, sabemos que tecla fue presionada. Este algoritmo tambin se puedecambiar para que las teclas se activen con uno lgico en lugar de cero, pero hay que cambiar la

    configuracin de las entradas a Pull-Down.

    Como en el PSoC la configuracin Pull-Up es bidireccional, no es necesario cambiar la configuracin de lasterminales de entrada a salida, sino se mantienen en Pull-Up.

    ;-----------------------------------------------------------------------------; Assembly main line;-----------------------------------------------------------------------------

    include"m8c.inc" ; part specific constants and macrosinclude"memory.inc" ; Constants & macros for SMM/LMM and Compilerinclude"PSoCAPI.inc" ; PSoC API definitions for all User Modulesbit0: equ0b00000001 ;creamos constantes a las cuales se lesasignar un valor de bitbit1: equ0b00000010bit2: equ0b00000100bit3: equ0b00001000bit4: equ0b00010000bit5: equ0b00100000bit6: equ0b01000000export_mainareabss(RAM) ;indicamos que trabajaremos en la memoria RAMtiempo:blk1 ;creamos una variable de nombre tiempo de unbyteareatext(ROM,REL) ;indicamos los espacios de memoria ROM_main:;___________________inicio del programa principal_____________________

    callLCD_Start ;iniciamos la lcdcallLED_Start ;iniciamos el led

    nada: ;creamos un ciclo principalmovA,bit0

  • 8/13/2019 Practica2 FENDER

    13/17

    callLCD_Control ;limpiamos la pantallamovA,00hmovX,00hcallLCD_Position ;posicionamos el cursormovA,> Tabla1movX,< Tabla1callLCD_PrCString ;imprimimos el mensaje

    callReadKeys ;llamamos a la subrutinacalldelay ;hacemos un retardo

    jmpnada ;se reinicia el ciclo

    ;___________________________subrutinas_________________________________

    ReadKeys:

    movreg[PRT1DR],0x0F ;coloco cero en filas y 1 en columnaststreg[PRT1DR],bit0, ;hago un test con & bit a bitjzcol0 ;si se activida la badera me voy a la subrutinamovreg[PRT1DR],0x0F ;coloco cero en filas y 1 en columnaststreg[PRT1DR],bit1

    jzcol1movreg[PRT1DR],0x0F ;coloco cero en filas y 1 en columnaststreg[PRT1DR],bit2jzcol2movreg[PRT1DR],0x0F ;coloco cero en filas y 1 en columnaststreg[PRT1DR],bit3jzcol3ret ;regreso a la rutina principal;-----codigo para col0------col0:

    mov reg[PRT1DR],0xFE ;donde se colocan 1111 a las columnas y yasabemos que es la fil 0

    tstreg[PRT1DR],bit4 ;test con & haciendo bit a bitjnzcol0fil1 ;si la bandera de zero no es cero brinca a

    col0fil1callescribir ;llamamos a la subrutina escribirmovA,'1'callLCD_WriteData ;imprimos el valor es ASCIIret ;regresamos a readkeys

    col0fil1:tstreg[PRT1DR],bit5jnzcol0fil2callescribirmovA,'2'callLCD_WriteDataret

    col0fil2:

    tstreg[PRT1DR],bit6jnzcol0fil3callescribirmovA,'3'callLCD_WriteDataret

    col0fil3:callescribirmovA,'A'callLCD_WriteData

  • 8/13/2019 Practica2 FENDER

    14/17

    ret;---------codigo para col1-----------col1:

    mov reg[PRT1DR],0xFD ;donde se colocan 1111 a las columnas y yasabemos que es la fil 1

    tstreg[PRT1DR],bit4jnzcol1fil1

    callescribirmovA,'4'callLCD_WriteDataret

    col1fil1:tstreg[PRT1DR],bit5jnzcol1fil2callescribirmovA,'5'callLCD_WriteDataret

    col1fil2:tstreg[PRT1DR],bit6

    jnzcol1fil3callescribirmovA,'6'callLCD_WriteDataret

    col1fil3:callescribirmovA,'B'callLCD_WriteDataret

    ;codigo para col2col2:

    mov reg[PRT1DR],0xFB ;donde se colocan 1111 a las columnas y yasabemos que es la fil 2

    tstreg[PRT1DR],bit4jnzcol2fil1callescribirmovA,'7'callLCD_WriteDataret

    col2fil1:tstreg[PRT1DR],bit5jnzcol2fil2callescribirmovA,'8'callLCD_WriteDataret

    col2fil2:tstreg[PRT1DR],bit6jnzcol2fil3callescribirmovA,'9'callLCD_WriteDataret

    col2fil3:callescribirmovA,'C'

  • 8/13/2019 Practica2 FENDER

    15/17

    callLCD_WriteDataret

    ;codigo para col3col3:

    mov reg[PRT1DR],0xF7 ;donde se colocan 1111 a las columnas y yasabemos que es la fil 3

    tstreg[PRT1DR],bit4

    jnzcol3fil1callescribirmovA,'*'callLCD_WriteDataret

    col3fil1:tstreg[PRT1DR],bit5jnzcol3fil2callescribirmovA,'0'callLCD_WriteDataret

    col3fil2:

    tstreg[PRT1DR],bit6jnzcol3fil3callescribirmovA,'#'callLCD_WriteDataret

    col3fil3:callescribirmovA,'D'callLCD_WriteDataret

    escribir: ;la subrutina escribir nos servir cuando se hayapresionado una tecla

    movA,bit0 ;esta escribir la leyenda "tecla presionada" ycorrer el espacio para ingresar

    callLCD_Control ;en la siguiente fila el valor en asciimovA,00hmovX,00hcallLCD_PositionmovA,>Tabla2movX,

  • 8/13/2019 Practica2 FENDER

    16/17

    .literal ;creamos la tabla con leyendas en ROMTabla1: ASCIZ"Presione tecla:"Tabla2:ASCIZ "Presionando:"

    .endliteral

  • 8/13/2019 Practica2 FENDER

    17/17

    BIBLIOGRAFA.

    Mauricio Romero. Gua de Practicas de Dispositivos de Control. Practica 2.- Puertos de entrada ysalida.

    IBM. "XL C/C++ V7.0 for AIX".Recuperado de :http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.d

    oc%2Flanguage%2Fref%2Fclrc05bitiore.htm

    Cypress. "AN2094 - PSoC 1 - Conceptos bsicos del GPIO". Recuperado de:http://www.cypress.com/?rID=2900

    Cypress."PSoC 1 GPIO Demystified - Parte 2". Recuperado de:http://www.cypress.com/?rID=39497

    Cypress. C lenguaje compiler user guide. Recuperado de la documentacin de PsoC. Cypress. Assembly lenguaje user guide. Recuperado de la documentacin de PsoC. Cypress. How to Swap Register Bank. Recuperado de:http://www.cypress.com/?id=4&rID=33795 Cypress. Difference between bank0 and bank1 register. Recuperado de:

    http://www.cypress.com/?id=4&rID=39812

    http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htmhttp://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htmhttp://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htmhttp://www.cypress.com/?rID=2900http://www.cypress.com/?rID=2900http://www.cypress.com/?rID=39497http://www.cypress.com/?rID=39497http://www.cypress.com/?id=4&rID=33795http://www.cypress.com/?id=4&rID=33795http://www.cypress.com/?id=4&rID=33795http://www.cypress.com/?id=4&rID=39812http://www.cypress.com/?id=4&rID=39812http://www.cypress.com/?id=4&rID=39812http://www.cypress.com/?id=4&rID=33795http://www.cypress.com/?rID=39497http://www.cypress.com/?rID=2900http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htmhttp://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc05bitiore.htm