Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

19/06/2013 #1

Avatar de jmth

Tiempos incorrectos, LEDs locos en simulación
Hola, soy yo otra vez. Sigo con el tema de la programación-simulación en C. Resulta que hoy estoy intentando hacer parpadear LEDs en ciertas secuencias, aunque he acabado haciendo un contador... Me ocurre lo mismo. Hace un par de días hice un programa que hacía parpadear todos los LED del puerto B con delay, y funcionó perfectamente (aunque en la mitad de tiempo del que debería). Sin embargo, y ya me ha ocurrido en otras ocasiones, en éste programa al simularlo se "vuelven locos", es decir, con un delay y frecuencia del reloj declarados correctamente, funciona tan rápido que no se ve. ¿Alguien podría decirme si es un problema de simulación o de programación? Muchas gracias, os dejo el código:

Código:
#include <16f84a.h>
#use delay(clock=4000)
#byte port_b=0x06
#byte port_a=0x05
#byte TRISB=getenv("SFR:TRISB")
#byte TRISA=getenv("SFR:TRISA")
#fuses NOWDT

void main(){
   TRISB=0;
   port_b=0;
   while(true){
   port_b=port_b+1;
   delay_ms(1500);
   if(port_b==0xff){
      port_b=0;
   }
   }
}
19/06/2013 #2

Avatar de ByAxel

Hola.
Agrega 3 ceros más a #use delay(clock=4000), se supone que debe de estar en MHz. y en el simulador coloca la misma frecuencia.

Saludos.
19/06/2013 #3

Avatar de jmth

Hola ByAxel, no es ése el problema, en realidad lo tengo a 4kHz (tanto el programa como la simulación) porque la CPU de mi churro-portatil no soporta mayor velocidad y empieza a ralentizar la simulación. De todas formas al hacerlo con 4Mhz sigue ocurriendo lo mismo. Gracias.
19/06/2013 #4
Moderador

Avatar de D@rkbytes

Si lo quieres simular a 4KHz, cambia la frecuencia de reloj del PIC en ISIS a 4KHz también.
Y agrega otro signo = a la instrucción if(port_b=0xff) así...
if(port_b==0xff)

Esa sentencia If no es importante, ya que cuando el puerto B alcance la cuenta de 255 automáticamente regresará a 0 por desbordamiento.

Suerte.
19/06/2013 #5

Avatar de ByAxel

en este punto si el esquema está bien (MCLR a 5V) puedes probar lo siguiente:
- Compilar con otra versión (CCS tiene algunos bugs) o prueba reduciendo el valor del DelayMs.
- Cargar el archivo *.cof y correr el programa paso a paso, es necesario saber un poco de asm para que cambies la vista a assembly en el cuadro en el que aparece el código en C. Revisa en asm si el código que has escrito lo realiza al pié de la letra. Si va bien, entonces es culpa de la función DelayMs.
- También sugiero que seas más explícito en cuanto a la configuración del PIC. Fuses y demás.

Prueba eso. Saludos.
19/06/2013 #6

Avatar de jmth

He encontrado la solución: al parecer el simulador pasa completamente del clock que le he puesto externamente a 4kHz y estaba utilizando uno "interno" que viene por defecto en el simulador a 1MHz. He cambiado su valor en "Edit Properties" a los 4kHz que tengo programados y ha funcionado correctamente. Al parecer es algo que a veces ocurre y otras no, habrá que asegurarse de que está todo a la misma frecuencia las próximas veces. Gracias de nuevo.
19/06/2013 #7
Moderador

Avatar de D@rkbytes

jmth dijo: Ver Mensaje
He encontrado la solución: al parecer el simulador pasa completamente del clock que le he puesto externamente a 4kHz y estaba utilizando uno "interno" que viene por defecto en el simulador a 1MHz. He cambiado su valor en "Edit Properties" a los 4kHz que tengo programados y ha funcionado correctamente.
D@rkbytes dijo: Ver Mensaje
Si lo quieres simular a 4KHz, cambia la frecuencia de reloj del PIC en ISIS a 4KHz también.
jmth dijo: Ver Mensaje
Al parecer es algo que a veces ocurre y otras no, habrá que asegurarse de que está todo a la misma frecuencia las próximas veces. Gracias de nuevo.
Nop, ISIS toma siempre en cuenta la frecuencia de reloj que se establece en las propiedades del PIC.
Y no lo hace aleatoriamente, ese fue un error tuyo que desde un principio debiste tener en cuenta.
Lo que no hace ISIS, es tomar cómo referencia el oscilador externo (El cristal se puede omitir)

Saludos.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.