¿Cómo manipular correctamente los pines de E / S de los chips PIC?

6

Aprendí un concepto de que al cambiar el valor de bit del pin de E / S PIC, la PC primero leería el valor del puerto de E / S, cambiaría el valor y escribiría el valor modificado en el registro.

Valido este argumento usando este circuito:

ElcódigoqueescribíenmikroCparaPIC:

voidmain(){TRISB=0;PORTB.F0=1;PORTB.F1=1;while(1);}

AprendíquedebidoaqueelLEDD1solonecesita0.7V,elvoltajedeRB0esaproximadamente0.7V.CuandomiprogramaestablecióRB1en1,elPICleyóprimeroelvalordelpuertoB,obtiene00000000.YcomoRB0es0.7V,seinterpretócomobajo.Entonces,despuésdecambiarelvalor(establecerprotBcomo00000010),soloD2estáactivado.

EntoncesconectoresistenciasentrelospinesLEDyIO,ycambiéelcódigo:

voidmain(){TRISB=0;PORTB.F0=1;Delay_ms(500);PORTB.F1=1;while(1);}

Alcomienzodelasimulación,elcircuitoactúacomoloesperaba,elvoltajedeRB0esde4.5V.

Sin embargo, después del retraso de 500 ms, solo D2 está activado. Me parece extraño, pensé que D1 y D2 estarían encendidos al mismo tiempo (la lectura debería obtener 0000 0001, así que después de cambiar, el puerto B debería ser 0000 0011)

    
pregunta Po-Jen Lai

2 respuestas

4

Los PIC tienen la molestia de tener ANSEL por defecto a uno, lo que significa que los puertos que pueden actuar como entradas analógicas lo son de forma predeterminada. Esto forzará las lecturas digitales a cero (consulte el diagrama de puerto que se muestra a continuación en la hoja de datos de PIC16F833 para comprender por qué), y es probablemente por eso que RB0 se borra al configurar RB1 con una operación de lectura, modificación y escritura.

En main, desactive ANSEL antes de acceder a PORTB y vuelva a intentarlo.

Por cierto, los LED generalmente caen más de 0.7V, ~ 2V es común, por lo que es posible que el primer experimento haya tenido éxito por la misma razón que el segundo falló.

    
respondido por el apalopohapa
2

Espera un minuto. ¿No son las salidas RB0 y RB1 TTL? Si se elevan y solo miden 0.7 voltios, entonces está extrayendo demasiada corriente y posiblemente dañando los controladores de salida.

Una exploración rápida de las especificaciones muestra que RB0 / RB1 tiene una salida máxima de 25 mA. A 100 ohmios (suponiendo que la caída del diodo es de 0,6 V). Vas a intentar obtener una fuente de 4.4V / 100 = 44mA. ¡Ay! Intente cambiar los 100 ohmios a 375 ohmios o más. Es posible que ya haya hecho un daño permanente a los controladores, por lo que podría necesitar cambiar a RB2 y RB3.

    
respondido por el user6972

Lea otras preguntas en las etiquetas