El puerto de salida PIC 24F no está disponible

2

Estoy trabajando en un controlador VGA para un microcontrolador PIC 24F. He configurado todos los puertos B y C para SALIDA con TRISB = 0 y TRISC = 0. Después del alcance, noté que uno de mis pines siempre se mantiene alto después de que se establece solo una vez, mientras que los otros pines reaccionan correctamente.

Más específico, PORTCbits.RC3 = 0 y PORTCbits.RC3 = 1 funciona perfectamente bien, PORTCbits.RC4 = 1 funciona pero permanece alto después de la primera alternancia, y PORTCbits.RC4 = 0 no hace nada.

El procesador que estoy usando es un PIC 24FJ64GA004, si esto es relevante. Todos los puertos se configuran de la misma manera a través de los registros de tris y se borran de antemano.

Lo siento si esta pregunta no es lo suficientemente general, esta es la primera vez que pregunto algo en este sitio.

    
pregunta AEIO

2 respuestas

1

Le recomiendo que revise la hoja de datos y vea si hay erratas asociadas con ese micro en particular.

Por lo que sé (en el pasado), el caso solía ser donde tendría que leer / modificar / escribir y luego (en algunos casos) escribir dos veces en un puerto para asegurarme de que era necesario.

Aparte de eso, ¿puedes aislar el puerto para asegurarte de que nada más influya en ese pin del puerto? Si tiene una placa de desarrollo con NADA conectada a ese puerto, puede valer la pena intentar ejecutar el código allí y ver si está influenciado externamente o no.

    
respondido por el cowboydan
1

Los pines PIC son de 'uso múltiple' y pueden ser (predeterminados) asignados a USART OSC I2C, etc. etc. Si no es eso, entonces a menudo la razón por la que los bits del puerto de E / S se "atascan" se debe a la carga en el pin ...

Sin embargo, el truco es reconocer que no tiene tiempo durante la línea visible de 640 píxeles VGA para "contar" o "hacer un bucle" en absoluto ... y, por supuesto, no hay suficiente tiempo para "explotar" un i / o pin !!!

Sin embargo, agregue un registro de desplazamiento externo (74HC166) y configúrelo hasta 'cargar' 1 byte a la vez desde 8 pines I / O PIC y será posible mostrar un 80 caracteres ASCII mapeados (8x8) FONT en cada uno de 48 líneas.

Registra el cambio de velocidad a 24MHz (que está dentro de la mayoría de los límites de visualización VGA) y ejecuta el PIC con un clk de CPU (OSC / 2) de 15 MHz (por lo tanto, OSC es de 30MHz) y eso le da exactamente 5 CPU. ciclos para actualizar los bytes de entrada / salida.

5 ciclos de CPU significan que no hay que contar, llamar, regresar o perder cualquier tiempo inútil. En lugar de eso, 'construimos' la tabla de fuentes de 8x8 caracteres de 'conjuntos' de 5 instrucciones que envían un byte a los pines de entrada / salida y luego 'saltan' a la siguiente ubicación de fuente que se debe generar.

Entonces, cada entrada en la tabla de fuentes contiene 8 series de 5 instrucciones que 'generan un byte' y luego 'encuentran el siguiente byte' ... específicamente: -

Cargar byte literal a W, Salida byte W a PORT (2)

Cargue W word desde Index ++, agregue W word a PCL (3)

Para 'controlar' esta secuencia, se cargan 80 registros de índice con las compensaciones que llevan la ejecución de una ubicación de fuente a la siguiente. El último registro de índice contiene un desplazamiento que lo lleva al código de sincronización de línea, durante el cual tiene que cargar los registros de índice para que la próxima línea salga, es decir, modifique el contenido de los 80 registros de índice con 80 nuevas compensaciones.

Dentro de una línea de caracteres, 'mod que registra el índice' significa volver a configurar el PRIMERO para que 'apunte' al siguiente 'inicio de la tabla de la línea de fuentes' (es decir, la siguiente línea de escaneo 'en la fuente) - todos los demás los saltos son "relativos", por lo tanto, permanece igual.

Si está mostrando fuentes de 8x8 caracteres, por lo general tendrá un 'espacio' entre líneas de caracteres entre líneas de escaneo raster 2 (por lo que 480 líneas de escaneo mostrarán 48 líneas de texto de 80 caracteres) y 2 líneas es suficiente tiempo para trabajar las 'compensaciones relativas' para el siguiente conjunto de 80 caracteres.

Tenga en cuenta que esto es para un solo color B & W text == no puede hacer ni siquiera B & W 'frame-frame' gráficos de bit sin la ayuda de RAM externa (8kb no es suficiente espacio para almacenar todo el bit -datos de mapas, necesita al menos 640 * 480/8 = 38,400 bytes)

    
respondido por el SteveB

Lea otras preguntas en las etiquetas