¿Cómo detectar el cambio de voltaje de entrada en el pin específico de atmega32? Detección de conector DC

0

Estoy tratando de hacer un circuito LCD que, finalmente, controlará un amplificador y mostrará los datos al usuario a través de la pantalla LCD. Una de las características que quiero incluir es la capacidad de mostrar si el dispositivo está conectado a través de un adaptador de pared de CA o solo una batería de 9V. El circuito de abajo es lo que tengo hasta ahora. Todo está probado trabajando en el tablero de pan, excepto el conector de detección de CC.

Aquí está mi circuito: crkt http://i57.tinypic.com/zmmic7.png

Soy muy nuevo en todo lo relacionado con la programación de MCU, así que quiero asegurarme de que estoy en el camino correcto. Cuando vaya al programa, ¿podré usar el pin 29, PC7, en el puerto C para detectar el cambio en mi puerto de entrada de CC?

JP2 es el 9V, mientras que DC-IN es el conector del adaptador de pared. Los pines 2 y 3 normalmente están cerrados.

Básicamente, quiero detectar cuándo el usuario conecta el adaptador de CC para poder cambiar un icono en la pantalla LCD. Cuando el usuario conecta un adaptador de pared 2-3 en el DC-IN se abre y PC7 ya no tendrá conexión a tierra. (si entiendo las cosas correctamente) ¿De esa manera debería poder usar PC7 para detectar un cambio en R2, la resistencia desplegable?

Básicamente, todavía quiero usar PC0 a través de PC6 para otras cosas de E / S como control de LED y detección de pulsación de botón. Quiero asegurarme de que, programáticamente, esto es posible. De esa manera puedo continuar mi diseño sabiendo que puedo hacer que las cosas funcionen.

    
pregunta John August

2 respuestas

1

Lo que estás buscando son interrupciones externas. El chip que está utilizando tiene un hardware que puede causar una interrupción si hay un cambio lógico en algunos pines dedicados. Consulte la documentación en la página 66 sobre interrupciones externas. Parece que INT0 INT1 e INT2 pueden reaccionar a las interrupciones externas si están configuradas (pines PD2, PD3 y PB2). Podría estar encuestando el PC7, pero es ineficiente.

Básicamente, necesita utilizar futuros de interrupciones externas del chip, que están limitados a ciertos pines. Usted escribe una subrutina de interrupción y, cuando ocurre una interrupción, se ejecuta la subrutina.

También, verifique el voltaje de p.287 en cualquier Pin, excepto RESTABLECER con respecto a tierra -0.5V a VCC + 0.5V, por lo tanto, no puede proporcionarle 9V.

    
respondido por el Nazar
0

Tu circuito, tal como está dibujado, debería poder hacer lo que quieras.

En su código, habilitaría el pull-up en PC7 de esta manera ...

PORTC |= _BV(7)

Aquí es cómo funciona el pullup ...

Tenga en cuenta que esto supone que DDRC7 = 0 (el pin PC7 es el modo de entrada) y PUD = 0 (los pull-ups no se han deshabilitado), que deberían ser siempre que no los cambie en su código.

Cuando no hay un enchufe conectado, entonces el PC7 estará bajo porque está conectado a tierra a través del conector. Cuando se inserta un enchufe, el PC7 ya no está conectado a tierra a través del conector, por lo que el pull-up tirará del pasador hacia arriba.

Puede detectar esto en el software al sondear el valor de PIN de PC7 de esta manera ...

if (PINC & _BV(7)) {

        // plug is connected

}

Si ya tiene un bucle de sondeo en su programa, esto debería funcionar bien. Sin embargo, si desea poder detectar un cambio en el estado del conector de forma asíncrona (es decir, no desea tener que seguir revisándolo, solo quiere saber cuándo cambia), entonces no podrá para usar el pin PC7. En su lugar, deberá conectar la línea de detección del conector a uno de los pines de interrupción externos que son INT0, INT1 e INT2. Luego puede configurar una interrupción para que se dispare cada vez que cambie el pin, e incluso puede hacer que la interrupción lo despierte del sueño. Agregue un comentario si necesita cambiar a interrupciones y editaré con un código de ejemplo.

En una nota lateral, tenga en cuenta que usar el pin del interruptor de la toma de esta manera solo detectará si hay una clavija físicamente insertada en la toma. No detectará si ese enchufe está realmente suministrando energía. Feliz de agregar algunas ideas sobre cómo detectar realmente la fuente de energía activa actualmente si está interesado.

    
respondido por el bigjosh

Lea otras preguntas en las etiquetas