Autor Tema: Problema con delay en el compilador CCS  (Leído 14002 veces)

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

Desconectado ByR

  • PIC10
  • *
  • Mensajes: 7
Problema con delay en el compilador CCS
« en: 14 de Octubre de 2010, 19:20:04 »
Hola a todos,

Tengo un problema con le delay_ms del compilador de CCS, el cual no se ejecuta después de un ciclo for, pareciera que el for se ejecuta siempre, y nunca sale.
Nose cual pueda ser el problema, he estado pensando en la posibilidad de que sea un BUG del compilador.

el código que utilizo es el siguiente:

#Include <16F628a.h>           
#Use Delay(clock=4000000)       
#fuses XT,NOWDT,NOLVP

int    i=0;
int    v=0;


void main()                 
{

   output_b(0);
   v=0;
     
  while(true){
        for(i=0;i<=255;i++)
        {
         output_b(v);         
         delay_ms(40);
         v++;
        }
        delay_ms(5000);
        for(i=0;i<=255;i++)
        {
         output_b(v);
         delay_ms(40);
         v--;       
        }
        delay_ms(5000);

 }
}
Los delay no se me ejecutan nunca, y no sale del primer ciclo for. Lo he probado en proteus y también en forma real, y sigue asi.
Gracias de antemano, este es un gran foro.

Saludos


Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Problema con delay en el compilador CCS
« Respuesta #1 en: 14 de Octubre de 2010, 19:47:29 »
El manual de referencia de CCS dice que por defecto int es lo mismo que int8, por eso cuando sumas uno a 255 obtienes 0.
Prueba reemplazar la definicion 'int i' por 'int16', o mejor 'unsigned long'.
@fabianjsm is on twitter

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: Problema con delay en el compilador CCS
« Respuesta #2 en: 14 de Octubre de 2010, 19:54:47 »
Ademas si te fijas cuando compilas, te da warning's diciendo que la sentencia siempre es verdadera, sugiero que intentes lo que dice fabianjm
Nunca se deja de aprender

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Problema con delay en el compilador CCS
« Respuesta #3 en: 15 de Octubre de 2010, 03:43:58 »
Yo te aconsejo que en lugar de cambiar las variables por int16 pongas en lugar de 255 un 254, ya que si declaras las variables en int16 te ocuparan bastante más espacio, y por lo que puedo ver en el codigo el cambio de 255 a 254 no creo que sea muy grave, no?

Pruebalo asi y nos cuentas que solución te gusta mas  ;-)

Saludos

Desconectado Derneilkel

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con delay en el compilador CCS
« Respuesta #4 en: 03 de Noviembre de 2014, 02:14:55 »
Buenas, miren yo no hace mucho que programos con CCS, pero por algun motivo la func. delay funciona 40 veces mas lento al punto de tener que usar esa constante de escala. estoy trabajando sobre el PIC 16F 1939 y estuve viendo si podia ser una problema del timer, es decir en la libreria pero no encuentro nada. Me gustaría saber si alguien que este mas comprometido con el tema de las librerias sabe algo o si le ha pasado algo similar. Por ejemplo: quiero que un led este intermitente en 250 ms y contados en la realidad y hasta en proteus son 10 segundos. El problema se resuelve ahi con la constante 40 pero tengo que emplear los conversores A/D y efectuar un muestreo en tiempo real y esto evidentemente me va a traer serios problemas. Espero alguna respuesta de alguien que haya tenido que surfear este obstaculo!!! gracias de todas formas ;)

Desconectado donvalles

  • PIC10
  • *
  • Mensajes: 35
Re: Problema con delay en el compilador CCS
« Respuesta #5 en: 03 de Noviembre de 2014, 07:39:33 »
hola , como dijerón el asunto de declarar la variable int es lo mismo que declarar int8 y como int8 podes declararlo como:
unsigned int8 (variación de 0 - 255)
int8 (-128 a 127)
por lo tanto la condición del for esperando que i<=255 nunca va a llegar a ser i=256 porque lo máximo es 255 cuando vuelva a incrementar despues de 255 va a ser el número cero por vuelve el ciclo, y otra cosa es que tu contador va a contar hasta 127 porque está declarado con signo.
o sea hace el for (i=0; i<255; i++) se va a ejecutar de 0 a 254. saludos.

Desconectado donvalles

  • PIC10
  • *
  • Mensajes: 35
Re: Problema con delay en el compilador CCS
« Respuesta #6 en: 03 de Noviembre de 2014, 07:48:45 »
Derneilkel sería bueno que subas el código del programa, me parece que puede tener una configuración erronea en el clock pero sólo viendo la gente del foro va a poder ayudarte, saludos.

Desconectado Derneilkel

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con delay en el compilador CCS
« Respuesta #7 en: 03 de Noviembre de 2014, 12:14:56 »
Cual quieren que suba el .c o el .h que me genera el ccs con el asistente?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema con delay en el compilador CCS
« Respuesta #8 en: 03 de Noviembre de 2014, 13:38:57 »
Si no son muy largos los pones directamente aca entre

Código: [Seleccionar]
[code][/code]

Sino generalmente con el .c es suficiente, aunque no se que pueda contener el .h

Desconectado Derneilkel

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con delay en el compilador CCS
« Respuesta #9 en: 03 de Noviembre de 2014, 22:49:56 »
Código: [Seleccionar]
//.h
#include <16F1939.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES ECH                      //External clock with CLKOUT(PIC18), high power
#FUSES WDT_SW                   //No Watch Dog Timer, enabled in Software
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOCLKOUT                 //I/O function on OSC2
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOVCAP                   //VCAP pin disabled
#FUSES PLL                      //4X HW PLL enabled
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES BORV19                   //Brownout reset at 1.9V
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

.c

#include "C:\Users\Administrator\Desktop\Cursando\TDI2\Proyecto Final\ejled\led.h"


void main()
{

   setup_spi(SPI_SS_DISABLED);
   setup_lcd(LCD_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

   
       set_tris_a(0x00);   
       set_tris_b(0x00);//portb como salida(RB0,las demas desactivadas)
      disable_interrupts(GLOBAL);        //todas las interrupciones desactivadas 
       
      do{
        output_high(PIN_A0);        //Led on 
         output_low(PIN_B5);
         delay_ms(250/40);
          output_high(PIN_B5);
          output_low(PIN_A0);            //Led off
          delay_ms(250/40);                 
           
      }while(true) ;

}


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema con delay en el compilador CCS
« Respuesta #10 en: 03 de Noviembre de 2014, 23:58:42 »
Hay cosas con los fuses que no me cierran mucho...

External clock con clkout ( por lo que veo no estas usando cristal ), aun asi en tu codigo tenes puesto 20 Mhz, un oscilador ?
Y luego tenes puesto el PLL 4x, y viendo las caracteristicas electricas el VCO dice de 16 (min) a 32 (max) y de entrada 4 a 8 Mhz, como lo estas alimentando a 20Mhz no se :/. Con lo que no se si realmente estas a 20Mhz..

Igual tampoco estas a 800Mhz para la diferencia que estas viendo (40x).. intenta desactivar el PLL y proba..


Desconectado Derneilkel

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con delay en el compilador CCS
« Respuesta #11 en: 04 de Noviembre de 2014, 00:29:12 »
Acabo de efecutar esa modificacion del PLL pero el problema persiste. La verdad no entiendo muy bien todo lo de los FUSES, si alguien puede darme una mano porque quizas ahi haya conflictos en la definicion del clock, etc. El wizard que propone CCS para el 1939 es bastante extenso y no tengo otro PIC en este momento como para "jugar"

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Problema con delay en el compilador CCS
« Respuesta #12 en: 04 de Noviembre de 2014, 09:54:48 »
Escribes mal el #Use_Delay ()
Te falta el guion bajo...


Perdon!!  No lo lleva.... :oops: :oops: :oops: :oops:
« Última modificación: 04 de Noviembre de 2014, 09:57:03 por MGLSOFT »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema con delay en el compilador CCS
« Respuesta #13 en: 04 de Noviembre de 2014, 14:50:45 »
Acabo de efecutar esa modificacion del PLL pero el problema persiste. La verdad no entiendo muy bien todo lo de los FUSES, si alguien puede darme una mano porque quizas ahi haya conflictos en la definicion del clock, etc. El wizard que propone CCS para el 1939 es bastante extenso y no tengo otro PIC en este momento como para "jugar"

Los fuses no son mas que unos registros que en la mayoria de los PICs no son modificables por software, sino que se realizan cuando vos lo grabas.
Ahi seleccionas que tipo de oscilador usas, interno, externo, cristal o un reloj por un solo pin, etc. Proteccion de datos / codigo, WDT enable, etc
Lo tenes en el data sheet como Configuration Bits o en tu datasheet Configuration Words (pag 63).

Si estas usando un cristal de 20 Mhz externo, deberias de cambiar estos fuses
#FUSES ECH                      //External clock with CLKOUT(PIC18), high power

Donde seleccionas al oscilador como HS, asi los pines osc2 y osc1 son para el cristal. (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT pin and RA7/OSC1/CLKIN)
Si ya despues de eso no funciona, te podria decir que sacaras lso delays, dejaras una salida y midieras cada cuanto cambia la salida, para obtener un valor de la frecuencia de entrada y verificar que son los 20 Mhz, sino pasa por el tema del compilador.

En fin tratar de quitar posibles problemas e ir aislando el problema que verdad aqueja :
- Configuracion del OSC del PIC.
- Verificar que el PIC este trabajando a la velocidad correcta.
- Revisado el Hardware y funcionando perfectamente volcar la atencion al software.
« Última modificación: 04 de Noviembre de 2014, 14:58:38 por KILLERJC »

Desconectado Derneilkel

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con delay en el compilador CCS
« Respuesta #14 en: 04 de Noviembre de 2014, 14:55:02 »
En caso de querer emplear el timer0 que deberìa cambiar? Estoy empleando el pickit3 programmer para quemar el pic. Nose si deba emplear otro o si esta bien ese. Muchas gracias KILLERJC muy explicativa tu respuesta que es lo que uno prefiere cunado no tiene mucha experiencia. Saludos.-


 

anything