Microcontrolador de 8 pines

gente, pss... soy nuevo con esta onda de la programacin con PIC's, hace poco, cargue unos programas de prueba en unos PIC12F509, deshabilitando el MCLR, y activando el reloj interno. Pero al momento de mandar GP3 a voltaje(es el PIN MCLR) habia cambios en el PIC, pero no los deseados.
 
No hace lo que le corresponde al programa, de ehcho ya logre deahabilitar el MCLR, ahora el problema es que el pin GP2 es quien condiciona que el PIC ejecute una accion si es "1" si es "0" otra, pero, este siempre se queda en tercer estado como que el PIC no detecta la entrada, lo programo como salida y tampoco funciona, cual podria ser el problema?
 
Aqui esta adjunto el circuito con el que hice una prueba

en esta seccion esta el programa hecho en CCS

Código:
#include <12F509.h>
#fuses INTRC, NOWDT, NOPROTECT, NOMCLR
#use delay(clock=4000000)

void main(void)
{
         do
         {
          SET_TRIS_B(0x0F);
          delay_ms(1000);
          output_low(PIN_B5);
          output_high(PIN_B0);
          delay_ms(1000);
          output_high(PIN_B1);
          output_low(PIN_B0);
          delay_ms(1000);
          output_high(PIN_B2);
          output_low(PIN_B1);
          delay_ms(1000);
          output_high(PIN_B4);
          output_low(PIN_B2);
          delay_ms(1000);
          output_high(PIN_B5);
          output_low(PIN_B4);
         }
         while(1);
}

En resumen lo que hace es un corrimiento cada segundo de LED's, pero GP2 nunca enciende, aun cuando hice una prueba para hacerlo entrada, era como si no existiera, ni como entrada ni salida.[/img][/code]
 

Adjuntos

  • prueba1_866.jpg
    prueba1_866.jpg
    50.5 KB · Visitas: 46
De hecho postee esto, debido a que lo probe en tres de ellos, el pin GP2, siempre se queda en tercer estado, no se cual sea la causa. No se si usted ha trabajado con este PIC, seria de mucha ayuda sus experiencias con este dispositivo.

Saludos
 
Salu2!

Generalmente cuando ocurre esto en los pic's (nivel lógico ni alto ni bajo) es porque el pin puede estar trabajando como analógico y no digital, pero ese no seria el caso, ya que este micro no tiene convertidor A/D. Lo que creo pudiera pasar es que el pin esté configurado para trabajar con una resistencia de pull-up aunque esto se hace para GP0,GP1,GP3 y GP4 al mismo tiempo, por lo que ninguna de estas salidas deberia colocarse en alto, de ser este el detalle. El registro donde configuras eso es en OPTION REGISTER.

Otra cosa, tu dices que GP2 controla que hace el programa, osea, es una entrada que dependiendo de su valor le indica al programa que hacer, verifica eso y que todos los pines sean salidas. Por último el puerto GP3 aun deshabilitado el MCLR solo puede funcionar como entrada.
 
Estoy confundido. GP2 es entrada o salida?

Yo te recomiendo que uses GP3 como entrada, ya que si no funciona como MCLR solo puede funcionar como entrada. Y el resto de los pines los uses como salidas para prender los led's.

Otra cosa,se me olvidó mencionarte la corriente que le estas sacando al micro. Verifica que la corriente total que pasa por los led's no sea superior a la que el micro puede entregar.
 
Me puse a mirar la hoja de datos del pic, fijate en la página 22 del pdf, dice

Código:
If the T0CS bit is set to ‘1’, it will override
the TRIS function on the T0CKI pin.

T0CS es un bit del registro option.
Está por default (después de un reset) con valor = 1. Con ese valor se selecciona GP2 como fuente de reloj del temporizador.
Y como dice la cita, si está a 1 se ignora lo que dice el TRIS.

Por lo tanto, en el programa deberías poner que ese bit T0CS esté con valor 0.
No uso CCS, pero me imagino que lo podrás hacer con un fuse, o directamente con una instrucción que escriba el registro option al inicio del programa.

Otra recomendación, metiste SET_TRIS_B(0x0F); dentro del bucle del programa.
Uno configura las patas al inicio, y después si no precisa cambiarlas ese registro siempre queda con el mismo valor.
Por lo tanto sería más correcto ponerlo antes del bucle do.

Comentanos si te funciona poniendo T0CS=0.

Saludos
 
Como dijo el de Matrix: "Ya sé kung-fu", eso era, el comando SET_TRIS_B debe ir antes del bucle, muchas gracias por tu ayuda ardogan, en los que les pueda ayudar, ya saben.


saludos
 
Ah mira vos, yo creí que el problema era el T0CS.
Puse lo del TRIS como un detalle y al final eso era el principal problema, jajaja.
Saludos
 
Quiesiera saber que ondas con T0CKI, por que acabo de hacer una prueba para configurar GP2 como salida y no funciona. En el datasheet no me hace mucha referencia sobre ello, solo me dice que Puede funcionar como el pulsador de un contador interno o como entrada bidireccional.
 
Disculpa la tardanza, pero estuve haciendo pruebas y aun en PCW no encuentro como hacer que GP2 actue verdaderamente como salida, por que el compilador no me registra ningun error en los programas de prueba ni warnings, ademas en el archivo de cabecera del dispositivo nomas hace referencia de cuando activar el contador interno, es decir, para que T0CKI se habilite.
Muchas gracias por susu aportaciones.

saludos
 
Esta bien que no registre errores ni warnings, despues de todo es una instrucción válida el hacer que el TMR0 trabaje con GP2.

No uso el CCS, me imagino que para el registro OPTION se usa #fuses pero desconozco como se especifica T0CS=0.

Vamos a ver si algun forista sabe como hacer eso. Por mi parte no puedo aportar más al respecto.

Saludos.
 
Atrás
Arriba