TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: black_flowers en 04 de Agosto de 2007, 09:48:49

Título: generar delay de 1 segundo en c18
Publicado por: black_flowers en 04 de Agosto de 2007, 09:48:49
hola, a to2, ¿cómo se genera un dalay de 1 segundo en C18? Utilizando alguna funcion de delay.h mejor.

Un saludo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 04 de Agosto de 2007, 14:14:37
para 4MHZ:
Delay10KTCYx(100); //dura 1 seg

porque?
  4    *(10k) * 100 =
4MHz

    4      *(10 000) * 100 =
4*10^6

10 000 * 100 = 1 seg
10^6
Título: Re: generar delay de 1 segundo en c18
Publicado por: vszener en 04 de Agosto de 2007, 16:36:09
Tienes que tener en cuenta tu CLK.

Microchip tiene un apartado de librerias de sus compiladores, donde puedes ver las funciones que tienen y cómo usarlas.


Suerte!!! ;)
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 05 de Agosto de 2007, 07:52:39
ok, gracias , entonces para 12mhz: Delay10KTCYx(300);

un saludo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 05 de Agosto de 2007, 08:47:16
de todas formas sigue sin funcionarme, el programa es para un simple parpadeo del porta de un segundo. El codigo es este. El resultado es que el o los led se queda encendidos todo el rato sin parpadear. A lo mejor es un fallo del programa o a lo mejor un fallo en la configuración del winpic. Si es de lo segundo ya lo resolveré más adelante pero en principio...

veis algún fallo en el programa??:

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{TRISA=0x00;
while (1)
{PORTA=0xff;
Delay100TCYx (300);
PORTA=0x00;
Delay100TCYx (300);}
}


Un saludo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 05 de Agosto de 2007, 12:30:44
4/12*1000000 * 10 000 * 300 = 1
Delay10KTCYx (300); esto da

4/12*1000000 * 100 * 300 = 1/100
Delay100TCYx (300); esto da

y no olvides setear los bits del porta como digitales  :mrgreen:
ADCON=0; ADCON1=0xFF;

saludos black! :-/
Título: Re: generar delay de 1 segundo en c18
Publicado por: vszener en 05 de Agosto de 2007, 12:46:28
Mirate bien el data sheet del micro, a ver como están por defecto los pines del puertoA.


Suerte!!! ;)
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 05 de Agosto de 2007, 19:46:25
4/12*1000000 * 10 000 * 300 = 1
Delay10KTCYx (300); esto da

4/12*1000000 * 100 * 300 = 1/100
Delay100TCYx (300); esto da

y no olvides setear los bits del porta como digitales  :mrgreen:
ADCON=0; ADCON1=0xFF;

saludos black! :-/


ooops!
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 11 de Agosto de 2007, 11:02:34
bueno, sigue sin funcionarme. Pongo otra vez el código a ver si alguien ve el gazapo (si es que lo hay). Lo q
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 11 de Agosto de 2007, 11:06:20
pues sigue sin funcionar.  A ver si alguien ve el gazapo (si es que lo hay, ya que tambien puede ser culpa de algo de la configuracion del winpic).

el codigo es este.

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{ADCON1=0x0f;
TRISA=0x00;
while (1)
{PORTA=0xff;
Delay10TCYx (300);
PORTA=0x00;
Delay10TCYx (300);}
}

lo que debería hacer es hacer parpadear el puerto A cada segundo,

lo que hace es encender el puerto A y dejarlo encendido.

Tambien he probado a sólo encender el puertoA o sólo apagar el puerto A para comprobar si el programa funciona y el resultado es que sí que funciona, es decir el código se ejecuta y el puerto A y la configuracion del puerto A están bien). Solo se me ocurre que haya algun error que no veo en el while, o algo relacionado con la rutina delay o con la configuracion del winpic.

Un saludo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: Nocturno en 11 de Agosto de 2007, 12:27:05
Aquí has olvidado la letra "K"
Delay10TCYx (300);

A ver si es que no te da tiempo a ver el parpadeo porque va muy rápido.
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 11 de Agosto de 2007, 13:05:51
siempre usa el mplabSIM para que veas que esta haciendo el codigo en cuestiones de retardos.
Título: Re: generar delay de 1 segundo en c18
Publicado por: maunix en 14 de Agosto de 2007, 10:14:43
Aquí has olvidado la letra "K"
Delay10TCYx (300);

A ver si es que no te da tiempo a ver el parpadeo porque va muy rápido.

Además que tal vez se haya olvidado del K, el problema es el argumento, solo se acepta un byte, es decir un valor de 0 a 255.

Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 14 de Agosto de 2007, 23:43:21
vaaaaa que boludo que soy!
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 17 de Agosto de 2007, 17:43:35
yo sí que soy boludo, !gracias amigos!
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 18 de Agosto de 2007, 07:58:44
siento ser tan pesado pero es que todavía no me va, y en cuanto no me funcione este programita difícilmente voy a poder ponerme con cosas más complicadas. Así que a ver si alguien consigue ver cual es el fallo, si sois tan amables,

este es el código:

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{ADCON1=0x0f;
TRISA=0x00;
PORTA=0xff;
while (1);
{PORTA=0xff;
Delay10KTCYx (255);
PORTA=0x00;
Delay10KTCYx (255);}
}


y adjunto tambien una captura de la configuracion del winpic a ver si es de algo de eso.

Un saludo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 18 de Agosto de 2007, 09:08:11
amigo si repasas la seccion de lenguaje C de cualquier libro veras que....

while(1);

es un bucle inifinito es como un GOTO $ en assembler.

algo distinto es....

while(1)
{
..
..
..
}

observa que no lleva "punto y coma".
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 19 de Agosto de 2007, 11:15:32
sí, es cierto, ha sido un error tonto, pero lo he correjido y nada, no parpadea:

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{ADCON1=0x0f;
TRISA=0x00;
PORTA=0xff;
while (1)
{PORTA=0xff;
Delay10KTCYx (255);
PORTA=0x00;
Delay10KTCYx (255);}
}


alguna solución? ¿será de la configuración del winpic?

1 saludo, y muchas gracias por toda vuestra ayuda!   :-) :-)
Título: Re: generar delay de 1 segundo en c18
Publicado por: Nocturno en 19 de Agosto de 2007, 13:14:11
Yo insisto. ¿Cuantos milisegundos supone esta instrucción?
Delay10KTCYx (255);

Si no supera los 30 o 40ms será difícil que veas el parpadeo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: vszener en 19 de Agosto de 2007, 15:35:27
¿De cuanto es tú reloj principal? De todas formas, puedes hacerlo 'por la fuerza bruta'

Código: C
  1. #include <p18f2455.h>
  2. #include "delays.h"
  3. #pragma config WDT = OFF
  4.  
  5. void main(void)
  6. {
  7. ADCON1=0x0f;
  8. TRISA=0x00;
  9. PORTA=0xff;
  10. while (1)
  11. {PORTA=0xff;
  12. Delay10KTCYx (255);
  13. Delay10KTCYx (255);
  14. PORTA=0x00;
  15. Delay10KTCYx (255);
  16. Delay10KTCYx (255);
  17. }
  18. }

Ponle un super-retardo  :mrgreen:


Suerte!!! ;)
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 20 de Agosto de 2007, 09:38:35
intenta usando LATA en vez de PORTA.
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 22 de Agosto de 2007, 16:53:58
es posible que el retardo sea demasiado pequeño, pero para calcularlo me he basado en lo siguiente:

4/12*1000000 * 10 000 * 300 = 1
Delay10KTCYx (300); esto da

4/12*1000000 * 100 * 300 = 1/100
Delay100TCYx (300); esto da

y no olvides setear los bits del porta como digitales
ADCON=0; ADCON1=0xFF;


y en esto:

Además que tal vez se haya olvidado del K, el problema es el argumento, solo se acepta un byte, es decir un valor de 0 a 255.


que me habeis respondido en este mismo hilo. Entonces por eso puse 255. De todas formas he probado este código tambien (con el retardo multiplicado por tres):

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{ADCON1=0x0f;
TRISA=0x00;
PORTA=0xff;
while (1)
{PORTA=0xff;
Delay10KTCYx (255);
Delay10KTCYx (255);
Delay10KTCYx (255);
PORTA=0x00;
Delay10KTCYx (255);
Delay10KTCYx (255);
Delay10KTCYx (255);}
}



y el resultado es el mismo: led encendido permanentemente. Incluso le he puesto un xtal de 4mhz con lo el restardo de la función Delay10KTCYx(255) debería ser de 4/4*1000000 * 10 000 * 255 = 2,55 seg , más o menos

entonces no se que puede ser lo que esté mal. ¿quizá la configuración del winpic? ( he posteado una captura de la configuración del winpic más arriba en otro post)

gracias x vuestra ayuda. :)
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 22 de Agosto de 2007, 17:21:12
mmm....  :? has leido el datasheet del 18f2455?

EXAMPLE 10-1:INITIALIZING PORTA   

CLRF      PORTA;  Initialize PORTA by clearing output data latches
CLRF      LATA; Alternate method to clear output data latches
MOVLW  0Fh; Configure A/D
MOVWF  ADCON1; for digital inputs
MOVLW  07h; Configure comparators
MOVWF  CMCON; for digital input
MOVLW  0CFh; Value used to initialize data direction
MOVWF  TRISA;  Set RA<3:0> as inputs RA<5:4> as outputs

fijate no solo tiene conversores AD sino tambien comparadores... entonces te falta setear los comparadores.

TAREA: leer TODO el datasheet  :mrgreen:
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 25 de Agosto de 2007, 10:06:13
de todas formas aunque hago parpadear todo el porta tan sólo conecto el led en el RA0 y en RA0 no hay comparador. Tiene que ser de otra cosa, yo creo que es culpa del retardo o de la configuracion del winpic.

1 saludo.
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 25 de Agosto de 2007, 13:57:51
 :5] hey pequeño no has hecho tu tarea  :evil:

(http://img208.imageshack.us/img208/6272/63791846in7.jpg)

(http://img182.imageshack.us/img182/2746/24720469qe4.jpg)

Citar
en RA0 no hay comparador.
tienes que leer el datasheet.  :5]
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 09 de Septiembre de 2007, 09:33:38
:5] hey pequeño no has hecho tu tarea  :evil:

(http://img208.imageshack.us/img208/6272/63791846in7.jpg)

(http://img182.imageshack.us/img182/2746/24720469qe4.jpg)

Citar
en RA0 no hay comparador.
tienes que leer el datasheet.  :5]

por fin he tenido un hueco y he hecho mi tarea   :mrgreen:

y no ha resultado. Tenía yo algo de esperanza de que fuese por esto pero lo cierto es que he configurado el CMCON con el valor '00001111' que tal y como indica el datasheet se desactivan los comparadores y el bit CIS lo he puesto a 1 ya que el valor es indiferente para los comparadores desactivados. Y el resultado es el mismo: led encendido ininterrumpidamente.

este es el programa:

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{ADCON1=0x0f;
CMCON=0x0f;
TRISA=0x00;
PORTA=0xff;
while (1)
{PORTA=0xff;
Delay10KTCYx (255);
PORTA=0x00;
Delay10KTCYx (255);
}
}



esta la configuracion del winpic:

http://img158.imageshack.us/my.php?image=clipboardvp7.jpg
Título: Re: generar delay de 1 segundo en c18
Publicado por: micro_cadaver en 10 de Septiembre de 2007, 01:01:59
•TRIS register (data direction register)
•Port register (reads the levels on the pins of the
device)
•LAT register (output latch)

cambia PORTA por LATA a ver que pasa. Saludos  :-/
Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 16 de Septiembre de 2007, 14:42:26
pues sigue sin parpadear:

#include <p18f2455.h>
#include "delays.h"
#pragma config WDT = OFF

void main(void)
{ADCON1=0x0f;
CMCON=0x0f;
TRISA=0x00;
PORTA=0xff;
while (1)
{LATA=0xff;
Delay10KTCYx (255);
LATA=0x00;
Delay10KTCYx (255);
}
}



puede ser que esté mal la configuración del winpic?
http://img158.imageshack.us/my.php?image=clipboardvp7.jpg
  1 saludo.   :mrgreen:


Título: Re: generar delay de 1 segundo en c18
Publicado por: black_flowers en 21 de Septiembre de 2007, 19:35:18
hola amigos  qué tal, el led sigue sin parpadear, sólo quisiera, si puede ser, que alguien me confirmase si la configuración del winpic está correcta:
http://img158.imageshack.us/my.php?image=clipboardvp7.jpg

y prometo no molestar más con este post  :mrgreen: :mrgreen:

un saludo.