Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/05/2011 #1


Pulsado simultáneo de dos botones con MC9S08QG8
Hola,

Estoy aprendiendo a programar un MC9S08QG8 de Freescale y quiero hacer un pulsado simultáneo (tipo Ctrl+F4, Ctrl+C, Ctrl+V... espero que se entienda) de dos botones, es decir, primero un botón (Ctrl) y mientras mantengo pulsado el primer botón, pulsar otro (F4).

El problema es que cuando pulso el primero entra en la interrupción de teclado (KBI), pero no detecta más botones pulsados hasta que todos los botones vuelven al estado habitual, lo que me complica la idea de hacerlo así.
  1. ¿Es posible hacerlo?
  2. ¿Es una limitación de sólo algunos micros o ocurre en todos?

Gracias de antemano!!
10/05/2011 #2

Avatar de foso

Si lo haces en assembler podés hacer una rutina de la siguiente manera:

Suponete que llamas a un pin Ctrl y a otro PTA:

Una vez que se oprima Ctrl que salte a una rutina donde chequee el estado de PTA. En caso de que no esté presionado, no hace nada. En caso de que esté presionado, hace la acción correspondiente y retorna de la subrutina.
Una vez chequeado esto debe chequear que todavía esté presionado Ctrl, si lo está comienza la rutina de nuevo, si no lo está retorna de la subrutina.

PD: recordá que con este tipo de subrutinas tenes que poner delays para evitar los rebotes de los pulsadores.

Saludos
11/05/2011 #3


foso dijo: Ver Mensaje
Si lo haces en assembler podés hacer una rutina de la siguiente manera:

Suponete que llamas a un pin Ctrl y a otro PTA:

Una vez que se oprima Ctrl que salte a una rutina donde chequee el estado de PTA. En caso de que no esté presionado, no hace nada. En caso de que esté presionado, hace la acción correspondiente y retorna de la subrutina.
Una vez chequeado esto debe chequear que todavía esté presionado Ctrl, si lo está comienza la rutina de nuevo, si no lo está retorna de la subrutina.

PD: recordá que con este tipo de subrutinas tenes que poner delays para evitar los rebotes de los pulsadores.

Saludos

Gracias por tu respuesta. ¿Se puede hacer lo mismo en C o existen limitaciones? ¿Tiene ventajas programar en assembler frente a C en este micro? ¿Y en el resto de micros?
11/05/2011 #4

Avatar de foso

Podés hacer lo mismo en C, por supuesto. Los micros de Freescale están hechos con una arquitectura ideal para lenguaje C. No tenés limitaciones. En ningún micro. A veces, partes del programa conviene hacerla en ASM y otras en C.
El lenguaje C te ahorra tipeo (escribir). El ASM te da exactitud en los tiempos y estás en un nivel mas cercano al de la máquina, además tenés control de la memoria que llevas escribiendo.
Saludos.

PD: buena elección de micro
14/05/2011 #5


Gracias, ha funcionado!! En qué estaría pensando... Era más sencillo de lo que creía. Hay que ir comprobando los PTAD_PTADx o PTBD_PTBDx (por si le interesa a alguien).

Pero me surgen dos cuestiones más:

1. Pongo los delays correspondientes para cubrirme de los rebotes, pero cuánto tiempo calculáis de rebotes? Cuánto es lo adecuado, 100ms?

2. Porqué dices que es un buen micro el MC9S08QG8 de Freescale? No es bastante simple si quieres hacer cosas un poquito complicadas, con muchas teclas por ejemplo?

Saludos y gracias por responder!!
20/05/2011 #6

Avatar de foso

EL delay conviene hacerlo de 20 ms una vez que se pulsó, luego chequear que se haya "despulsado" y poner otro delay de 20 ms.
El microcontrolador no lo conosco. Me refería al microprocesador. EL HCS08. Es muy parecido al HC908.
saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.