Sentido actual para detección de gamepad NES / SNES - obteniendo un pico de voltaje

5

Estoy en el proceso de diseñar un receptor de control inalámbrico para las consolas de juegos NES / SNES. Mi receptor inalámbrico consta de un módulo bluetooth y un microcontrolador AVR, con el microcontrolador conectado a las líneas de control del controlador. Está diseñado para instalarse dentro de la propia consola, pero no quiero interrumpir el soporte para los controladores normales, por lo que necesito alguna forma de detectar cuándo un controlador está conectado.

Los controladores en sí no están diseñados teniendo esto en cuenta, por lo que he estado investigando un par de opciones. Básicamente, los controladores NES / SNES no son más que un registro de desplazamiento paralelo a serie (el controlador NES solo usa un CD4021 estándar, el SNES tiene un chip personalizado que es básicamente una versión de 12 bits del mismo cosa) con resistencias pull-up y conmutadores de membrana a tierra en cada una de las entradas paralelas, y las señales de enclavamiento, reloj y datos (bit 8) conectadas al cable entre la consola y el controlador.

La supervisión de la línea de datos no sirve de nada, ya que no hay forma de discernir entre tener un controlador conectado sin presionar ningún botón y ningún controlador conectado, por lo que no se detecta el controlador hasta después de que se haya presionado un botón. ha sido presionado, y no hay forma de detectar que el controlador se haya desconectado, ya que parece que está conectado pero inactivo.

Mi siguiente opción es un circuito de detección de corriente de lado alto, que usa el controlador como carga. Con el controlador desconectado, no fluye corriente a través de la resistencia de detección, por lo que no se cae voltaje a través de él. Cuando el controlador está conectado, la corriente fluye, cae el voltaje, el amplificador de detección de corriente genera un voltaje. Esto está funcionando bien con una excepción. Cuando aplico voltaje al circuito por primera vez, o cuando conecto el controlador, hay un pico de voltaje momentáneo en la línea de salida del monitor que casi duplica el voltaje de suministro, por lo que no es bueno. Ni siquiera estoy seguro de cómo es exactamente eso, ya que el pico va por encima del riel de suministro, pero está bastante claro en el multímetro.

El analógico realmente no es lo mío, así que tengo la sensación de que estoy haciendo algo mal. He adjuntado mi esquema actual, ¿alguien puede sugerir una buena manera de suprimir este pico de voltaje? No estoy seguro de si un diodo Zener sería lo suficientemente rápido para manejarlo, y agregar un filtro de paso bajo RC en la salida tampoco ayuda, y termina reduciendo el voltaje de salida. Necesito algo, estoy bastante seguro de que 10 V soplarán el pin ADC en el microcontrolador. ¿Algún pensamiento?

Mirando el esquema, me doy cuenta de que olvidé agregar tapas de desacoplamiento en la línea de suministro INA282 según la hoja de datos. Los tengo en el circuito, pero todavía tengo el pico.

Esquema http://oi39.tinypic.com/11tadqt.jpg

    
pregunta qwertymodo

1 respuesta

1

Parece un montón de problemas a los que acudir cuando, posiblemente, una sola resistencia podría funcionar. La salida de datos del registro de cambios CD4012D en el panel de juego ofrecerá una impedancia a la línea de datos cuando se conecte.

En base a esta "teoría", si tenía una resistencia de pull-up en su módulo de detección (el bit que está agregando), entonces, cuando el panel de juego no está insertado, la línea de datos será alta y, cuando el panel de juego esté insertada la línea será baja o, mostrará bajo aproximadamente el 50% del tiempo que está produciendo datos.

Si no está seguro de que los datos sean altos o que sean bajos, entonces deberían funcionar dos resistencias que forman un punto medio entre los rieles lógicos. Sin el pad de juegos conectado, el voltaje será de 2.5 V (suponiendo una lógica de 5 V), y con el juego almohadilla conectada, la tensión será de 0 V o 5 V.

¿Tal vez me esté perdiendo algo de sutileza?

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas