Autor Tema: el delay detiene la ejecución  (Leído 1948 veces)

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

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
el delay detiene la ejecución
« en: 03 de Marzo de 2010, 05:02:02 »
Hola a todos, tras mucho maldecil al PIC por que algo no funcionaba he llegado a la conclusión de que el delay_ms detiene la ejecución
Uso CCS y un pic 18f2250. Este es un ejemplo donde se me detiene en el delay

#define(__PCH__)
#include <18F2550.h>
#fuses Xt,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <input.c>

#define  DREQ    PIN_A0
#define  XCS     PIN_A1
#define  TEST    PIN_A2

void main (void){

   output_high(TEST);
   
   delay_ms(300);
   
   output_low(TEST)
}


En el osciloscopio (o el pic18 simulator, que también tiene funcion de osciloscopio) veo como el pin A2 o TEST se pone a nivel alto pero  no vuelve jamás a bajo. Si quito la línea del delay lo hace bien!
Lo intenté con delay_cycles pero ocurre lo mismo, cambié le reloj y no funciona tampoco.. no sé si tengo alguna directiva de las del principio mal.. He mirado la ayuda y parece estar todo correcto peeeero, no funciona...
qué puede estar pasando?

gracias

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: el delay detiene la ejecución
« Respuesta #1 en: 03 de Marzo de 2010, 05:16:36 »
No es XT el fusible cuando usas 20MHZ, sino HS.

Y no esque el delay detenga la ejecucion, sino que, tu programa, aunq quieras que el PIC haga algo solo una vez en su larga vida... Debe ir asi:

void main (void)
{
   output_high(TEST);
  
   delay_ms(300);
  
   output_low(TEST);   // Y claro, aqui te falto el ";" aunque creo que se te haya pasado nomas, sino no compilaria.

   While(true)
  {
  }
}

Ponlo dentro del ciclo while si quieres que se ejecute siempre como un oscilador.

Por otro lado, aunq no muy importante, nose desde que version de CCS el compilador por default especifique automaticamente los registros TRIS... Asi que mejor asegurate poniendo #USE STANDARD_IO(A). Aunq como te digo, esto no creo mucho que sea.


Otra forma mas profesional de ponerlo seria con "output_toggle(TEST)" pero esto ya son tonteras  :mrgreen:

Tambien, en la configuracion del 232 basta con poner UART1 enves de los pines cuando usas el hardware del PIC, el compilador ya se los sabe de memoria  :D

Hay mas fusibles que configurar para tener la seguirdad de que funcionara bien, pues este PIC tiene integrado USB y una seria de configuracion de oscilador para hacerlo funcionar, pero creo que asi debe de funcionar tambien, solo tenlo en cuenta.

Por ultimo, por una mala experiencia, desde entonces, protejo el PIC contra lecturas (fusible PROTECT) para cualquier programa de cualquier PIC que este en pleno desarrollo. Aunq esto me quite la posibildiad de poder leer su .hex posteriormente y no poder usar debugger en el, pero nunca e necesitado de ninguno de los dos asiq lo sigo haciendo.


Salu2.
« Última modificación: 03 de Marzo de 2010, 05:32:19 por jeremylf »

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
Re: el delay detiene la ejecución
« Respuesta #2 en: 03 de Marzo de 2010, 05:38:40 »
Lo he probado y continúa haciendo lo mismo :-(

El pin_a2 lo pone a nivel alto pero no lo devuelve a bajo! ocurre tanto con while como sin while.. Por eso he supuesto que son los delays los que están haciendo algo mal.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: el delay detiene la ejecución
« Respuesta #3 en: 03 de Marzo de 2010, 05:48:40 »
Ahh, lo que pasa es que no le das tiempo al poner el pin a 0, es decir, que inmediatamente sube a 1 en menos de 0.083us. Dejalo asi el while:

While (true)
{
   output_high(TEST);
   delay_ms(300);
  
   output_low(TEST);  
   delay_ms(300);
}


Salu2.

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
Re: el delay detiene la ejecución
« Respuesta #4 en: 03 de Marzo de 2010, 07:47:05 »
Pues no sé.. pero me sigue sin funcionar.. he probado también el puerto SPI, que es otra función que necesito usar y tampoco se inicializa, aunque lo que más me preocupa por lo pronto es el tema del delay.. es como si cuando llegase al delay simplemente dejara de avanzar, esté en un while o fuera de éste.. Quizas sea alguna función que tengo mal configurada del pi18simulator? no lo creo, prácticamente no tiene ninguna.. Además, el resto de las cosas que programa las veo bien. Es el delay creeo

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
Re: el delay detiene la ejecución
« Respuesta #5 en: 03 de Marzo de 2010, 07:59:28 »
con 300ms parecerá que siempre esta encendido.. ponle 800 a ver..

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: el delay detiene la ejecución
« Respuesta #6 en: 03 de Marzo de 2010, 08:26:50 »
la simulacion, no es en tiempo real..... por eso parece una eternidad...
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: el delay detiene la ejecución
« Respuesta #7 en: 03 de Marzo de 2010, 09:54:25 »
Ahh, lo que pasa es que no le das tiempo al poner el pin a 0, es decir, que inmediatamente sube a 1 en menos de 0.083us. Dejalo asi el while:

While (true)
{
   output_high(TEST);
   delay_ms(300);
  
   output_low(TEST);  
   delay_ms(300);
}

Asi tiene que funcionar. Prueba con otro simulador, por ejemplo Proteus ISIS.

Saludos
El papel lo aguanta todo