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.