Autor Tema: OSCILADOR  (Leído 2712 veces)

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

Desconectado pampateam

  • PIC10
  • *
  • Mensajes: 2
OSCILADOR
« en: 22 de Junio de 2010, 22:34:37 »
hola a todos, estoy trabajando con un dspic30f6014A.
Estoy utilizando un cristal externo de 7.3728 MHZ para llevarlo lo mas cercano que se pueda a 30 MIPS.

Estoy haciendo un dispositivo tipo holter, para medir presion durante 24 hs, y la almaceno en una memoria SD
En mi aplicacion es bastante necesaria la precision temporal.
Mi problema es que segun la hoja de datos yo utilizo el timer3 para que desborde a 1K, pero esta desbordando a un menor tiempo 0.0009 S.
hice la prueba de prender un led, durante un tiempo conocido ( en realidad conosco la cantidad de instrucciones) y apagarlo.
eso me da un tiempo distinto al teorico. EJ
en vez de estar trabajando a 29.4912 MHZ, me da 29.47 MHZ.
es posible?
es normal?

Tengo casi todas las patas usadas y estoy, creo, al borde de la corriente del micro ya que me calienta bastante ( lo tengo que disipador)

desde ya muchas gracias

Desconectado vtasco

  • PIC12
  • **
  • Mensajes: 72
Re: OSCILADOR
« Respuesta #1 en: 23 de Junio de 2010, 11:24:04 »
Hola pampateam:

me da la impresión que la ISR del timer la atiendes un ciclo después de lo que tu necesitas, quizás si cargas el contador  a 999 tengas el resultado que esperas.

suerte y cuéntanos cómo te va

Desconectado stevengalindom

  • PIC10
  • *
  • Mensajes: 18
Re: OSCILADOR
« Respuesta #2 en: 19 de Agosto de 2011, 16:20:25 »
me pueden ayudar a implementar un timer yo no e podido no ahcer aprpadear el led sera que puedes colocar el codigo que tienes del timer sin embargo yo aca coloco el que estoy implementando estoy usando un oscilador de 4 Mhz pero solo apra probar por que lo que necesito en realidad es garantizar un tiempo para que me envie unos datos por el usart y necesito cambiar el oscilador a 24 Mhz que me da una medida del baud rate con poco error para trabajar a 115200 les agradesco toda la ayuda de antemano NO ME SALE NINGUN ERRRO AL COMPILAR Y LOS IMULO EN MPLAB SIM Y EN TEORIA FUNCIONA PERO AL CONECTARLO NO PUEDO TRABAJO CON UN DSPIC 30F4011 SI TIENEN INFORMACION O TUTORIALES LES AGRADECERIA QUIERO PORLOMENOS PODER AHCER PARAPDEAR EL LED A UN TIEMPO CONOCIDO GRACIAS

CPODIGO

 
///////////////////////* LIBRERIAS *//////////////////////////////////////
#include<p30f4011.h>
#include <reset.h>
#include <uart.h>
#include <timer.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<adc10.h>
///////////////////////* CONFIGURACION DEL DISPOSITIVO *//////////////////////////////////////

_FOSC(CSW_FSCM_OFF & XT_PLL4);                /* Oscilador XT con 4xPLL */
_FWDT(WDT_OFF);                                /* Watchdog timer desactivado */
_FBORPOR(PBOR_OFF & MCLR_EN);                  /* Brown-out reset desactivado, MCLR reset activado */
_FGS(CODE_PROT_OFF);                           /* Proteccion de codigo desactivada*/

///////////////////////* VARIABLES *//////////////////////////////////////
unsigned char banderatimer=0;
unsigned char contadortimer =0;

///////////////////////* INICIALISACION DE REGISTROS *//////////////////////////////////////
void timer(void)
{
   PR1=0xffff;//Valor maximo del contador
   T1CONbits.TCS=0;//trabajar con reloj interno                     
   T1CONbits.TCKPS=0b11;// se define el pre-escaler como 1:256            
   T1CONbits.TGATE=0;      // debe ser cero junto con TCS                  
   T1CONbits.TSIDL=0;//seguir trabajando en modo idle                  
   TMR1=0x0000;// se inicializa el registro en 0
   IPC0bits.T1IP=0b001; // interrupcion prioridad 1 tiemr 1
   IEC0bits.T1IE=1; // interrupcion del tiemr habilitada
   T1CONbits.TON=1;    // Inicializa timer
}
///////////////////////* MAIN *//////////////////////////////////////
int main (void)
{   
   TRISB=0;

   timer();
   while(1)
   {
   
      PORTB=1;
      if(IFS0bits.T1IF==1)
      {   
      
         IFS0bits.T1IF=0;
         contadortimer=contadortimer+1;
      }
      if(contadortimer==40)
      {
         banderatimer=1;
      }
      if(banderatimer==1)
      {
         PORTBbits.RB0=0;
         banderatimer=0;
      }
   }
return 0;
}