Autor Tema: retardo tiempo valor en tabla! help!  (Leído 1258 veces)

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

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
retardo tiempo valor en tabla! help!
« en: 12 de Octubre de 2010, 08:27:55 »
Hola,

Los programitas que te generan el codigo de retardo están muy bien, pero en este caso mi programa lee el retardo de una tabla y comprobando con el stopwatch, el retardo depende de los valores que hay en la tabla.
En este caso los valores son 2 bytes. Asi que tengo la tabla separada en 2 subtablas. El codigo que uso es el siguiente:

doRetard           movfw   retardoL
                        skpnz
                        incf    retardoL,F         ; Increase value with 1 in case of zero table value.
                        incf    retardoH,F         ; Increase value with 1.                                      

bucle1               nop                           ; Time adjust "no operation code", 0,25uS
                        decfsz  retardoL,F       ; Now just "burn" time before firing motor ignition pulse.
                        goto    bucle1        
                        decfsz  retardoH,F
                        goto    bucle1


Ahora mismo uso este código, incremento los dos contadores en 1, para que los  calculos sean correctos en el bucle. Para paliar posibles errores el contador Low, solo lo incremento si es 0, por si se da el caso que es 255 y al incrementarlo no añado al contador High, pero bueno no hay problema porque esto lo ajustaré antes de meter los valores en las tablas en el código.



El problema, es con el contador. Si el high es 0 se incrementa en 1, para hacer el retardo, y el retardo es correcto. EL problema es cuando el high es 1, entonces el retardo es 0.5us más de lo esperado. Si es 2 es 1us más...
El bucle es de 1us(4ciclos) para que el bucle sea de 1us por cada valor(16Mhz).

Si sabeis alguna forma de ajustar el código para que siempre haga el mismo retardo esperado, sea 1 o 2 o 3 o 4 el high.
Normalmente, si espero 200us con el contador high =0, lo hace correcto, si 350, como el contador es high 1, hace 350.5us,...

Saludos.






« Última modificación: 12 de Octubre de 2010, 08:42:53 por josearrow »