TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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.
-
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
-
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!!! ;)
-
ok, gracias , entonces para 12mhz: Delay10KTCYx(300);
un saludo.
-
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.
-
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! :-/
-
Mirate bien el data sheet del micro, a ver como están por defecto los pines del puertoA.
Suerte!!! ;)
-
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!
-
bueno, sigue sin funcionarme. Pongo otra vez el código a ver si alguien ve el gazapo (si es que lo hay). Lo q
-
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.
-
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.
-
siempre usa el mplabSIM para que veas que esta haciendo el codigo en cuestiones de retardos.
-
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.
-
vaaaaa que boludo que soy!
-
yo sí que soy boludo, !gracias amigos!
-
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.
-
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".
-
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! :-) :-)
-
Yo insisto. ¿Cuantos milisegundos supone esta instrucción?
Delay10KTCYx (255);
Si no supera los 30 o 40ms será difícil que veas el parpadeo.
-
¿De cuanto es tú reloj principal? De todas formas, puedes hacerlo 'por la fuerza bruta'
#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);
PORTA=0x00;
Delay10KTCYx (255);
Delay10KTCYx (255);
}
}
Ponle un super-retardo :mrgreen:
Suerte!!! ;)
-
intenta usando LATA en vez de PORTA.
-
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. :)
-
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:
-
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.
-
: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)
en RA0 no hay comparador.
tienes que leer el datasheet. :5]
-
: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)
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
-
•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 :-/
-
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:
-
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.