Gracias manwenwe y Mario, creí que lo que había puesto era algo absurdo.
Bueno, he revisado lo del PWM y me parece que será una excelente idea aunque todavía estoy en los primeros pasos, concretamente en entender y hacer funcionar un timer. He elegido el TMR0 por el predivisor, lo que me parecía estupendo para bajar desde un clock alto, sin embargo no consigo acerlo funcionar.
Profudizando en el 16f628 y el TMR0 he encontrado esta equación:
Tiempo = Inicio x Predivisor x (4/Fosc) siendo Inicio = 255 -TMR0
y poniendo un oscilador de 8 MHz y el predivisor a 1, o sea, asignado al WDT, según el valor de TMR0 me sale el tiempo y la frecuencia siguiente:
TMR0 Inicio TIEMPO FRECUENCIA
254 1 0,0000005 2000000
253 2 0,000001 1000000
252 3 0,0000015 666666,6667
251 4 0,000002 500000
250 5 0,0000025 400000
249 6 0,000003 333333,3333
Con TMR0=250 consigo los 400 KHz, sin embargo, emulando con el Proteus, el frecuencímetro mide 3,78KHz, o sea, bastante lejos de lo que se supone que debe salir.
¿Puede ser que esto se deba a que se están sumano un montón de ciclos de instrucción?. ¿Debería probar en assembler y si es así alguien tiene alguna rutina que pueda insertar en el Proton+?.
Perdonad tanta pregunta pero esto era uno de mis primeras cosas depués de hacer parpadear un LED y me he atascado.