Autor Tema: Problema con delay_ms  (Leído 2650 veces)

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

Desconectado Kira1708

  • PIC10
  • *
  • Mensajes: 6
Problema con delay_ms
« en: 07 de Marzo de 2012, 12:50:02 »
Hola a todos y muy buen día!!

Soy nueva en este foro, bueno nueva en cuanto a haberme registrado, pero ya me había pasado por aquí en otras ocasiones y la verdad que es un muy buen foro.

Tengo un pequeño problemilla con un programa y espero que alguien me pueda ayudar.

Estoy haciendo un sencillo programa, es de corrimiento de un LED, con el PIC18F4550 en CCS, lo que tengo que hacer es con un dip switch controlar la velocidad del corrimiento y la dirección (7 bits para velocidad y 1 bit para sentido).

Hice el programa y ya que me quedo  (con la entrada en el puerto B, bit0 para sentido y los demás control de velocidad, salida en PORTD) lo simulé en Proteus y todo bien, me dispuse a armarlo y para mi sorpresa, no me funciona.

Después de revisar todo me di cuenta que lo que no me funciona es delay_ms de hecho lo probe para que sólo encienda y apague un led con un delay pero no me funciona al hacerlo físico, alguien me podría ayudar.

De antemano gracias.

Aquí les dejo mi programa para que lo vean.

Código: [Seleccionar]
#include <18f4550.h>
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,PLL5,CPUDIV1,NOVREGEN, NOPBADEN
#use delay(clock=48000000)

#byte trisb =0xF93
#byte portb =0xF81

#byte trisd =0xF95
#byte portd =0x83

char y; //Variable para controlar el delay (diferentes velocidades).
int puerto; //Variable del corrimiento.

void main() {

set_tris_b(0xFF);//PORTB entradas.
set_tris_d(0x0);//PORTD salidas.

//Configuración----------------------------------
disable_interrupts(global);
disable_interrupts(int_timer1);
disable_interrupts(int_rda);
disable_interrupts(int_ext);
disable_interrupts(int_ext1);
disable_interrupts(int_ext2);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(TRUE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_oscillator(False);

output_d (0); //Salida en ceros de inicio.


y=160; //Valor inicial del delay
puerto=0x01; //Valor para que un solo LED este prendido y sea el que se vea el movimiento, igual puede ser 0xFE un solo LED apagado.

do
{

//Lee el puerto B para elegir valor de velocidad (cambia delay_ms(y), solo con bit 7-1, el bit cero puede ser 1 o 0 dependiendo del sentido )
if (input_B()==(0x01))
            y=160;
else if (input_B()==(0x03))
            y=140;
else if (input_B()==(0x05))
            y=120;
else if (input_B()==(0x09))
            y=100;
else if (input_B()==(0x11))
            y=80;
else if (input_B()==(0x21))
            y=60;
else if (input_B()==(0x41))
            y=40;
else if (input_B()==(0x81))
            y=20;

else
            y=y;


if (input_B()==(0x00))
            y=160;
else if (input_B()==(0x02))
            y=140;
else if (input_B()==(0x04))
            y=120;
else if (input_B()==(0x08))
            y=100;
else if (input_B()==(0x10))
            y=80;
else if (input_B()==(0x20))
            y=60;
else if (input_B()==(0x40))
            y=40;
else if (input_B()==(0x80))
            y=20;

else
            y=y;

delay_ms(y);
output_d (puerto);

{
if (input(pin_B0)==0)

#asm
rrncf puerto,1 ;rota derecha y guarda en mismo registro (puerto).
#endasm

else //if (input(pin_B0)==0)

#asm
rlncf puerto,1 ;rota izquierda y guarda en mismo registro.
#endasm

}


}while (1);
}


Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema con delay_ms
« Respuesta #1 en: 07 de Marzo de 2012, 13:44:38 »
Hola, creo que el problema va por el XTPLL cambialo por #fuses HSPLL.

saludos


A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Problema con delay_ms
« Respuesta #2 en: 07 de Marzo de 2012, 15:45:42 »
Hola Kira1708 en principio estoy de acuerdo con lo que te sugirio KALLITOS cambia este comando XTPLL por #fuses HSPLL,

tambien por la palabra de configuracion que tienes, supongo que estas usando un Oscilador De cristal de 20MHz. en tu hardware
por el fuse: #fuses PLL5

ha y por ultimo, note en tu codigo que usas la funcion delay_ms(y), bueno decirte que el argumento que usa esta funcion debe ser de tipo entero, asi que deberias cambiar su declaracion de una de las dos formas int y  o int16 y.

saludos..

Desconectado Kira1708

  • PIC10
  • *
  • Mensajes: 6
Re: Problema con delay_ms
« Respuesta #3 en: 07 de Marzo de 2012, 22:54:37 »
Primero que nada gracias por su ayuda, les cuento, ya hice la modificación que me sugirieron pero sigue igual... :(

Ya tambien cambié el tipo de variable para y, y sí como dices Amyver estoy usando un Cristal de 20MHz...

Tienen alguna otra idea?

Saludos y gracias de nuevo!

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema con delay_ms
« Respuesta #4 en: 07 de Marzo de 2012, 23:41:25 »
Hola Kira1708, además de las correcciones que te sugieren KALLITOS y amyver, te haría falta (asumiendo que usas cristal de 20MHz), cambiar el fuse NOUSBDIV por USBDIV para que la configuración sea correcta.

Saludos!
« Última modificación: 08 de Marzo de 2012, 17:12:08 por bmb »

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Problema con delay_ms
« Respuesta #5 en: 08 de Marzo de 2012, 09:59:01 »
Hola Kira1708 bueno revise tu codigo y vi por ahi algunos detalles que no me parecen y son:

Código: [Seleccionar]
#byte portd =0x83
Lo correcto seria:
Código: [Seleccionar]
#byte portd =0xF83
Tambien:
Código: [Seleccionar]
{
if (input(pin_B0)==0)

#asm
rrncf puerto,1 ;rota derecha y guarda en mismo registro (puerto).
#endasm

else //if (input(pin_B0)==0)

#asm
rlncf puerto,1 ;rota izquierda y guarda en mismo registro.
#endasm

}

Bueno en este ultimo veo que tienes llaves de apertura y de cierre, sin que tengas declarada sentencia alguna..


saludos...

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Problema con delay_ms
« Respuesta #6 en: 08 de Marzo de 2012, 10:01:39 »
O tal vez las llaves correspondian al if y else???
Código: [Seleccionar]
if (input(pin_B0)==0)
{
#asm
rrncf puerto,1 ;rota derecha y guarda en mismo registro (puerto).
#endasm
}
else //if (input(pin_B0)==0)
{
#asm
rlncf puerto,1 ;rota izquierda y guarda en mismo registro.
#endasm
}

Bueno revisa una vez mas tu codigo y comentas como te fue


saludos...
[/quote]
« Última modificación: 08 de Marzo de 2012, 10:05:13 por amyver »

Desconectado Kira1708

  • PIC10
  • *
  • Mensajes: 6
Re: Problema con delay_ms
« Respuesta #7 en: 11 de Marzo de 2012, 22:06:49 »
Hola de nuevo, ya corregí lo que me sugirieron y sigue igual ya lo revisé y revisé pero no se que más hacer.... yo creo que es algo de la configuración pero no sé porque fue la que me generó el wizard....

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Problema con delay_ms
« Respuesta #8 en: 14 de Marzo de 2012, 06:50:43 »
Lo primero que te recomiendo es que revises el montaje del circuito y más si esta en protoboard y, como segundo si sigue sin funcionar trabaja con el oscilador interno que es más fácil de activar y simplifica mucho el montaje, trabaja con una rutina sencilla que solo cambie el estado de un pin para ver que todo funciona y a partir de ahí ve complicando las cosas.
Saludos desde Granada, España.

Desconectado Kira1708

  • PIC10
  • *
  • Mensajes: 6
Re: Problema con delay_ms
« Respuesta #9 en: 04 de Mayo de 2012, 18:19:57 »
Hola a todos! :-/

No había pasado por aquí porque andaba muy ocupada pero déjenme decirles que el programa era correcto desde es principio y antes de comenzar a hacer mil modificaciones...  :mrgreen:

Les cuento, resulta que el compilador que baje estaba mal y no me generaba bien el archivo para programar el PIC parece que no reconocía los delay o algo así porque programitas fáciles como prender un led o el básico de entradas en un puerto igual a salidas en otro puerto (sin delays) quedaban bien en físico y si tenían algún delay nada!! Al simularlo salia perfecto, pero al armarlo....  :shock: el caso es que baje el demo de la pagina de CCS y todo perfecto, por si algún día alguien tiene un problema similar, puede ser probablemente el compilador...

Gracias por su ayuda.

**Kira**