Autor Tema: PIC16F877A Y TMR1 con oscilador Externo  (Leído 8184 veces)

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

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
PIC16F877A Y TMR1 con oscilador Externo
« en: 18 de Abril de 2007, 20:53:03 »
Hola amigos, es la primera vez que trabajare con el TMR1 con un Oscilador Externo, es por ello que les pido consejos, sugerencias, y pues comentarios sobre sus experiencias sobre esta forma de trabajar con TMR1.
Algun Link con esto bien explicado tambien estaria agradecido.

Para empezar este es el codigo de la configuracion en CCS.

Código: [Seleccionar]
setup_timer_1 (T1_EXTERNAL|T1_CLK_OUT|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(global);

Este es el esquematico de como esta conectado el oscilador.




Activa la interrupcion y dentro de la interrupcion tengo esto.

Código: [Seleccionar]
#INT_TIMER1
void reloj(void){
output_toggle(pin_a1);
}

Deberia parpadear el Led pero no lo hace. :? 
A donde quiero llegar es a generar una interrupcion cada segundo.

Estoy en busqueda de donde esta mi error.
« Última modificación: 18 de Abril de 2007, 21:25:20 por PICmouse »

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #1 en: 19 de Abril de 2007, 12:03:56 »
bueno Un dia despues de postear, no encuentro el error. Mirando todos los ejemplos del Foro, deberia trabajar. pero no se por que.  :?  Sera CCS el problema??
« Última modificación: 19 de Abril de 2007, 12:20:06 por PICmouse »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #2 en: 19 de Abril de 2007, 13:33:08 »
¿Puedes postear como te quedó el T1CON luego de hacer esa configuración?  esto lo puedes hacer o bien con el simulador o bien sacándolo por la usart a un hyperterminal por ejemplo.

Respecto a los capacitores, el datasheet sugiere 33pF para esa frecuencia, no creo que sea de gran cuidado ese dato pero tal vez ahí tengas otra posible causa.




- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #3 en: 19 de Abril de 2007, 13:34:07 »
Listo maunix, en ya hago las pruebas que me dices.

Gracias!

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #4 en: 19 de Abril de 2007, 16:22:38 »
 :( Bueno segui los pasos para imprimir por puerto Serial y ver el valor del TMR1.

La forma como lo hago es la siguiente:

Configuracion de TMR:
Código: [Seleccionar]
setup_timer_1 (T1_EXTERNAL|T1_DIV_BY_8|T1_CLK_OUT);
SET_TIMER1(0);
enable_interrupts(INT_TIMER1);
enable_interrupts(global);

Un loop eterno con:

Código: [Seleccionar]
while(1){
   value=get_timer1();
   printf("%lu\r\n",value);
}

el resultado por el puerto serial es siempre cero (0), el TMR1 no se incrementa.

Y me quedo esperando la interrupcion. :(

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #5 en: 19 de Abril de 2007, 17:16:44 »
La novedad es que coloco un generador de onda cuadrada en el pin C1 y si incremente el TMR1, pero yo necesito que trabaje con el cristal de 32768 sera que proteus no simula el cristal?? :?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #6 en: 19 de Abril de 2007, 19:30:02 »
Yo te pedía que pongas el valor de T1CON, no de TMR1.

La novedad es que coloco un generador de onda cuadrada en el pin C1 y si incremente el TMR1, pero yo necesito que trabaje con el cristal de 32768 sera que proteus no simula el cristal?? :?

La verdad no lo sé, pensé que probabas con un hardware... es posible que el proteus simule el cristal pero no el circuito oscilador interno del pic.  Prueba hacer un "oscilador" externo y así te debiera funcionar..

saludos



- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #7 en: 22 de Abril de 2007, 10:13:21 »
Amigo maunix, despues de seguir tu consejo para ver el T1CON, efectivamente puedo ver que despues de la configuracion, T1CON toma el valor de 0x01.

Segun el datasheet, despues de la configuracion que le doy en el programa, T1CON debe tomar otros valores.



Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #8 en: 22 de Abril de 2007, 11:17:18 »
Bien, ahí tienes algo para corregir entonces.  El problema pudiera estar en la función del CCS (en su código) o bien en que tu no le pasas los parámetros que espera se le pasen.

Por supuesto siempre tienes la opción de hacer T1CON = value;
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #9 en: 22 de Abril de 2007, 14:56:59 »
Código: [Seleccionar]
#asm
BSF   0XFCD,0
BSF   0XFCD,1
BCF   0XFCD,2
BSF   0XFCD,3
BCF   0XFCD,4
BCF   0XFCD,5
BSF   0XFCD,7

MOVF  0XFCD,W
MOVWF temporal2
#endasm

printf ( "\r\n\r\nT1CON=0x%2x\r\n\r\n",temporal2);

Bueno pues no se que hacer!!! No se si el problema soy yo o es que el CCS ya me esta dando guerra tambien  :x 

Despues de hacer lo que esta en el programa anterior, colocar los bits como deben ser para que funciones, imprimo por el puerto serial y obtengo que T!CON es 0  :?

Ahora si toy pero loco.

Segun CCS las unicas funciones que tengo disponibles para TMR1 son:

/////////////////////////// Timer 1
// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1
// Constants used for SETUP_TIMER_1() are:
//      (or (via |) together constants from each group)
#define T1_DISABLED         0
#define T1_INTERNAL         0x85
#define T1_EXTERNAL         0x87
#define T1_EXTERNAL_SYNC    0x83

#define T1_CLK_OUT          8

#define T1_DIV_BY_1         0
#define T1_DIV_BY_2         0x10
#define T1_DIV_BY_4         0x20
#define T1_DIV_BY_8         0x30

« Última modificación: 22 de Abril de 2007, 15:04:41 por PICmouse »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #10 en: 22 de Abril de 2007, 15:15:35 »
Probá hacer T1CON = algo; que tu sepas que es correcto y luego imprimelo por la usart.

Si aún asi no anda, entonces lo que no anda bien es la rutina que te saca el dato por la usart ;)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #11 en: 22 de Abril de 2007, 19:51:33 »
Hola amigo maunix, bueno no se si hay otra forma, pero no se puede hacer T1CON=xxx, directamente,  para poder hacer algo parecido hago esto:

Definir T1CON
Código: [Seleccionar]
#byte   T1CONFIG = 0xfcd
Ahora manipulo los bits de T1CON en asm, ya que en C parece no hace lo que debe CCS.
Código: [Seleccionar]
#asm
BSF   0XFCD,0
BSF   0XFCD,1
BCF   0XFCD,2
BSF   0XFCD,3
BCF   0XFCD,4
BCF   0XFCD,5
BSF   0XFCD,7
#endasm


Luego hago lo siguiente para verlo en el puerto RS232.
Código: [Seleccionar]
temporal2=T1CONFIG;
printf ( "\T1CON=0x%2x",temporal2);

Y obtengo por el puerto serial 0x00  :?

Ya te estoy entendiendo maunix tu posicion respecto a C18. Este CCS me esta sacando de casillas. El problema es que ya esta casi terminado, solo falta esta parte para terminar y listo.

Saludos!

« Última modificación: 22 de Abril de 2007, 19:55:26 por PICmouse »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #12 en: 23 de Abril de 2007, 07:42:26 »
Hola amigo maunix, bueno no se si hay otra forma, pero no se puede hacer T1CON=xxx, directamente, 

¿Porqué no se puede? Estas completamente seguro? me parece muy extraño.


Ya te estoy entendiendo maunix tu posicion respecto a C18. Este CCS me esta sacando de casillas.

Si, yo tuve que lidiar con comportamientos que se iban de toda lógica y por eso me moví al C18.  De todas formas siempre aducí que "probablemente era yo el que no lo sabía usar bien al ccs", la cuestión es que ser tan desviado del estandar ANSI me produjo también otros dolores de cabeza.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #13 en: 23 de Abril de 2007, 10:22:45 »
maunix, directamente utilizar T1CON no se puede (eso creo), por eso hay que definir con anterioridad quien es T1CON usando:

#byte T1CONFIG =  0xFCD

Me tocara fabricar el PCB y trabajar con algo real, y definir quien es el problema.

Aunque lo que no entiendo es por que si manipulo directamente los bits del registro T1CON, por que al imprimirlos por el puerto RS232 me da 0x00  :?

Gracias Maunix por tu ayuda.


« Última modificación: 23 de Abril de 2007, 10:24:55 por PICmouse »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PIC16F877A Y TMR1 con oscilador Externo
« Respuesta #14 en: 23 de Abril de 2007, 11:20:11 »
T1CON es un registro de tu micro, no veo porque no podrías acceder a él...

Ese es mi punto.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything