PIC18 GPIO cambiar de entrada a salida (modo dual)

3

Siempre me he preguntado si es posible cambiar la dirección del puerto del PIC GPIO durante el curso de la ejecución del programa. Entonces, por ejemplo, comienzo con un puerto particular configurado como entrada (nivel digital). Superviso ese pin, y si el nivel cambia, cambio la dirección de ese pin y dirijo una señal para encender un LED. ¿Es demasiado descabellada o es factible? Si es así, algún pseudocódigo sería muy útil.

    
pregunta ultrasounder

3 respuestas

5

Sí, es completamente posible que simplemente cambie el bit relevante en el registro TRIS asociado de 1 a 0 para cambiar el pin de entrada a salida.

En general, en la serie PIC18, debe leer los pines utilizando el registro PORT y escribir utilizando el registro LAT.

Supongamos que tienes un pin como este:

simular este circuito : esquema creado usando CircuitLab

Podrías leer RA0 periódicamente como entrada y controlar el LED el resto del tiempo. Para leer el estado del interruptor, debe establecer el bit 0 en el registro TRISA alto, esperar un poco, luego leer el pin PORT (bit 0 de PORTA) y luego borrar el bit 0 en el registro TRISA.

Para evitar la contención, solo configure el pin para que salga si el LED debe estar bajo. El LED siempre se encenderá mientras se presione el interruptor.

    
respondido por el Spehro Pefhany
2

Por supuesto que lo es.
Es solo una escritura en el registro TRIS para ese puerto.
Y dado que los puertos PIC tienen entradas predeterminadas en el encendido, todos los pines que desee utilizar como salidas deben cambiar de dirección durante la ejecución del programa, generalmente en su código de inicio / inicio.
Y no hay nada que le impida cambiar de opinión más adelante y hacer más cambios cuando lo desee ...

    
respondido por el brhans
1

Piensa cuando pones el registro TRIS como salida y envías un cero; si presionas el interruptor, estás haciendo un cortocircuito. Necesita una resistencia en el interruptor para limitar la corriente. Prueba esto en su lugar:

simular este circuito : esquema creado usando CircuitLab

    
respondido por el thecockroach

Lea otras preguntas en las etiquetas