Autor Tema: RTCC cada 1,3 segundos?  (Leído 1688 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado cucuruy

  • PIC10
  • *
  • Mensajes: 6
RTCC cada 1,3 segundos?
« en: 09 de Abril de 2008, 07:01:34 »
Hola compañeros, estoy cerca de volverme lelo, no entiendo qué es lo que estoy haciendo mal.
Estoy haciendo el PFC con un PIC18F2550 y ahora he tenido la necesidad de meter mano a las interrupciones del timer0.
El código que pongo a continuación es un pequeño algoritmo para probar estas interrupciones.
Como resultado, lo que veo en mi led es que parpadea cada 1,3 segundos aproximadamente, y en teoría el tic del timer0 debería ser de 2,73ms.

¿Alguien ve algo anormal en el código?
Muchísimas gracias de antemano.

Código: [Seleccionar]
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000) //el cristal es de 20mhz pero el reloj es de 48mhz
#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, stream=PC)

#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer (1 byte)
#define USB_EP1_RX_SIZE    1                 //size to allocate for the rx endpoint 1 buffer (1 byte)
//#define USB_CON_SENSE_PIN  PIN_B2            //pin B2 detecta si USB conectado

#include <pic18_usb.h>
#include <PicModem.h>       //Configuración del USB y los descriptores para este dispositivo
#include <string.h>
#include <usb.c>

#define LED1    PIN_B7
#define LED2    PIN_B6
#define LED_ON  output_high
#define LED_OFF output_low


int tics=0;
int flag=0;

#int_TIMER0
RTCC_isr()
{
   if(flag==0)
      flag=1;
   else
      flag=0;
}

void main(void)
{
   setup_counters(RTCC_INTERNAL,RTCC_DIV_128);
   enable_interrupts(global);
   enable_interrupts(INT_RTCC);

   while (TRUE)
   {
      if(flag==1)
      {
         LED_ON(LED1);
      }
      else
      {
         LED_OFF(LED1);
      }
   }
}


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: RTCC cada 1,3 segundos?
« Respuesta #1 en: 09 de Abril de 2008, 14:18:01 »
¿ Podrías mostrar los cálculos con los que te salen 2,73ms ? (a mí no me sale eso)

Creo que el error está aquí: setup_counters(RTCC_INTERNAL,RTCC_DIV_128)

Prueba con setup_counters(RTCC_8_BIT,RTCC_DIV_128)

En los PICs18 el TMR0 por defecto es de 16bits a no ser que lo programes como 8 bits.

UN SALUDO

Desconectado cucuruy

  • PIC10
  • *
  • Mensajes: 6
Re: RTCC cada 1,3 segundos?
« Respuesta #2 en: 10 de Abril de 2008, 05:00:23 »
Pues seguramente me liara con el cálculo ya que he ido cambiando el reloj del sistema y el preescaler, de hecho es lo de menos, 1.3 segundos anda muy lejos de 2.73 ms o 5.46ms o lo que sea. Ahora utilizo un reloj de 24MHz y un prescaler de 256, consiguiendo un tic, creo, de 10.92ms.
No sé cual de los muchos cambios que he hecho ha sido el 'clave', pero al fin funciona, y seguramente sea lo que has comentado, ya que he modificado el "setup_conters" tal que así:

setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);

Muchas gracias por la respuesta, ahora me estoy peleando con la otra interrupción que manejo, la INT_RDA, que parece que no me entra en la isr.

Saludos.

Editado: Solucionado también el problema con la INT_RDA, como ahora comunico DCE-DCE, he tenido que poner un doble conmutador para cruzar las lineas Rx y Tx del RS-232.
« Última modificación: 10 de Abril de 2008, 09:35:58 por cucuruy »