Autor Tema: 12f629 & GP3 como entrada  (Leído 4623 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado daltonico82

  • PIC12
  • **
  • Mensajes: 89
12f629 & GP3 como entrada
« en: 15 de Septiembre de 2011, 11:18:47 »
Hola amigos;

Es la primera vez que intento trabajar con el pequeño 12f629, ya qe hasta ahora sólo había trabajado dentro de la serie 12f con el 12f508. Para empezar y para ver que todo va bien (antes de usar timers, conversores y demás) hago un pequeño programa para ver que las entradas y salidas funcionan como quiero.

Mi problema. GP3 no hace ni caso. Creo que la configuro bien como entrada, desactivo el "master clear" pero nada. Por cierto he visto por aquí y no me ha quedado muy claro: que es  lo correcto trabajar sobre que registro :

Del datasheet se desprende: GPIO-GPIO (05h) y TRISIO-GPIO (85h).

Dejo el programa que intento implementar:

Citar
#include <12F629.h>

#fuses NOWDT,NOPROTECT,NOCPD,NOMCLR,NOPUT,INTRC_IO,NOBROWNOUT
     
#use delay(internal=4M)
//#use fast_io(a)
//#use standard_io(a)

void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC);
   setup_vref(FALSE);
   set_tris_a(0x08);

   while(1)
   {
   OUTPUT_A(0X00);
 do{
 
   OUTPUT_A(0XFF);
   delay_ms(400);
   OUTPUT_A(0X00);
   delay_ms(400);
 }while(input(pin_A3)==1);
   }
}

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: 12f629 & GP3 como entrada
« Respuesta #1 en: 15 de Septiembre de 2011, 12:44:38 »
Pero que es lo que no hace??

Según entiendo tu ptograma , siempre va a encender y apagar el LED.
Como usaste un "Do-While" siempre entra a la función por lo menos 1 vez pero afuera de esa función no hay nada que impida el retorno y no te das cuenta si salio o no.

Deberias ponerlo dentro de un " While ". o al final del " Do-While" agregar un While(1);

Recuerda poner la resistencia Pull-down o Pull-up según te convenga.
« Última modificación: 15 de Septiembre de 2011, 12:47:46 por AKENAFAB »

Desconectado daltonico82

  • PIC12
  • **
  • Mensajes: 89
Re: 12f629 & GP3 como entrada
« Respuesta #2 en: 15 de Septiembre de 2011, 13:05:16 »
hola de nuevo: creo que metí la pata pero bien....
el problema no está en el PIC ni el compilador.... el problema era mío:

Con este programa sí va, al pulsar un pulsador asociado a GP3 entonces parpadean los led asociados al resto del puerto. Ahora seguiré con el proyecto... pero no me queda muy claro lo de los registros GPIO y TRISIO...

Código: [Seleccionar]
#include <12F629.h>

#fuses NOWDT,NOPROTECT,NOCPD,NOMCLR,NOPUT,INTRC_IO,NOBROWNOUT
     
#use delay(internal=4M)
//#use fast_io(a)
//#use standard_io(a)

void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_tris_a(0x08);

   while(1)
   {
   OUTPUT_a(0X00);
 
 if(input(pin_A3)==0)
 {
   OUTPUT_a(0XFF);
   delay_ms(400);
   OUTPUT_a(0X00);
   delay_ms(400);
 }
 else
 {
 OUTPUT_a(0X00);
 }
   }
}

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: 12f629 & GP3 como entrada
« Respuesta #3 en: 15 de Septiembre de 2011, 13:52:16 »
GPIO y TRISIO con nombres de los registros.

TRISIO es para configurar los pines , si escribes un 1 en alguno de sus bits,configuras su pin correspondiente como entrada.
Si escribes un 0 , lo configuras como salida.

Solo es para configurar los pines.


GPIO es el registro que escribe o lee el puerto.

Si tu pones un 1 en alguno de sus bits y el pin esta configurado como salida, tendras un 1 lógico en el pin correspondiente.
Si pones un 0 , pues tendras un 0 lógico en ese pin. Osea VCC y GND
En CCS C escribes ouput_high(EL PIN ); para poner a 1 o estado alto.
output_low(EL PIN); para poner a 0 o estado bajo.

Si el pin lo configuraste como entrada en TRISIO , es decir, colocaste un 1 en alguno de sus bits.
Pues a travez de GPIO leerás el estado de ese pin.

para leer todo el puerto

variable=Input_A();

Para leer solo un pin

variable=Input(El PIN);

Solo por nombrar algunas.

Desconectado daltonico82

  • PIC12
  • **
  • Mensajes: 89
Re: 12f629 & GP3 como entrada
« Respuesta #4 en: 15 de Septiembre de 2011, 14:13:12 »
OK!!!

Queda clarísimo tal y cómo lo explicas. Corrigeme si no estoy en lo cierto. Si además de incluir la directiva #byte TRIS pongo #byte PORT entonces puedo controlar el puerto entero por ejemplo:

PORTB=0X0A;
variable=PORTB;

También existe diferencias entre utilizar #USE FAST_IO (PUERTO): cada vez que se emplea la funcion output...() se saca el valor directamente al puerto y cada vez que se utiliza input...() se lee el puerto, pero no se modifican previamente el registro TRIS correspondiente.

Con #USE STANDARD_IO(PUERTO) a la vez que se lee o se escribe en el puerto se fuerza el bit particular del registro TRIS para que sea efectivamente entrada o salida.

Un saludo, es maravilloso este foro

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: 12f629 & GP3 como entrada
« Respuesta #5 en: 15 de Septiembre de 2011, 14:43:53 »
Correcto!! 8)

Saludos!

Desconectado diegol_2006

  • PIC10
  • *
  • Mensajes: 4
Re: 12f629 & GP3 como entrada
« Respuesta #6 en: 23 de Enero de 2012, 16:04:00 »
Gracias a los 2 por este hilo, me aclaro dudas. Yo tuve el mismo problema, pero con los pines GP1 y GP2 curiosamente el GP3 si funcionaba como entrada a pesar de que tenia activado el MCLR,  :D al desactivarlo con #fuses NOMCLR todo funciono, saludos!!

Desconectado daltonico82

  • PIC12
  • **
  • Mensajes: 89
Re: 12f629 & GP3 como entrada
« Respuesta #7 en: 24 de Enero de 2012, 07:01:18 »
A por ellos; que son pocos y cobardes!!!!

Saludos!!!


 

anything