Autor Tema: Configuración reloj interno con PIC12F683  (Leído 1577 veces)

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

Desconectado Fuentes84

  • PIC10
  • *
  • Mensajes: 4
Configuración reloj interno con PIC12F683
« en: 21 de Agosto de 2014, 07:13:52 »
Buenos días,

Estoy intentando configurar el reloj interno del PIC12F683 a 8Mhz pero no lo consigo... El caso es que estoy probando en generar una señal cuadrada con el timer1 ( sé que puedo generar el PWM tambien por el módulo CCP ).

El caso es que quiero generar una señal cuadrada de frecuencia 2Khz y un duty cicle del 50%:

T = 1/2000 = 0,5 ms

Al querer un duty cicle de 50%, había pensado en ir cambiando de nivel de salida cada 0,25 ms que lo usaria mediante interrupción por el Timer1 de 16 bits.

Para calcular el TMR1, con frecuencia interna de 8Mhz i 8 de prescale:

0,25 ms= 4/8000000Hz * 8  * (2^16 - TMR1)  -> TMR1 = 65437   ( 0xFF9D )

y el codigo programa ( en CCS) es el siguiente:

Código: [Seleccionar]
#include <12F683.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES MCLR                     //Master Clear pin enabled
#use delay(clock=8000000)                    // Configuración reloj interno
#byte porta=0x05                             // Asignación bytes del puerto GPIO

#define oscilador PIN_A0

#INT_TIMER1

void oscilacion(void)
{
   output_toggle(oscilador);
   set_timer1(0xFF9D);
}

void main()
{
   disable_interrupts(GLOBAL);
   set_tris_a(0b001000);      // Configuramos salidas y entradas
   porta=0;               // salidas porta a nivel bajo
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); // Configuración timer1
   setup_oscillator(OSC_8MHZ);
   enable_interrupts(INT_TIMER1);      // habilitar interrupcion timer 1
   enable_interrupts(GLOBAL);          // habilitar interrupciones
   output_low(oscilador);
   set_timer1(0xFF9D);                 // tiempo desborde 0.25ms

   while(1)
   {

   }
}

Y la sorpresa es que al probarlo en la protoboard y mirando por el osciloscopio, observo una señal cuadrada de 1Khz ( la mitad de lo que necesito ).

Hay algún error de configuración de reloj interno a 8Mhz o el codigo esta mal?
« Última modificación: 21 de Agosto de 2014, 07:27:33 por Fuentes84 »

Desconectado Fuentes84

  • PIC10
  • *
  • Mensajes: 4
Re: Configuración reloj interno con PIC12F683
« Respuesta #1 en: 21 de Agosto de 2014, 08:41:50 »
Bueno despues de muchas pruebas he arrastrado todos los decimales del cálculo y me da un TMR1 de 65473, consiguiendo una señal cuadrada de 1,94 Khz. Lo que cambia el calculo entre redondear o  arrastrar los decimales... Redondeando conseguia 1,1Khz y arrastrando 1,94Khz, 700Hz de diferencia