hola bueno despues de una larga noche he investigando con esto, creo entender como generar esta señal y como cargar el TMR0, lo dejo para ver si me pueden recovorar lo que digo:
Para generar la frecuencia senoidal con un PIC y un DAC, de por ejemplo 100Hz, tenemos que ver cuantos escalones queremos para generar un periodo de ésta frecuencia, en mi caso voy a probar con 50 puntos o escalones. Donde esto quiere decir que el pic generara 50 combinaciones en el puerto B que saldrá a la entrada digital del DAC, para formar el periodo de la frecuencia que queremos (100Hz). Ahora tenemos que calcular cuánto se tiene que demorar el pic en generar estos 50 puntos para un periodo de la frecuencia a sacar de 100Hz.
El periodo de la frecuencia de 100Hz es:
Tfout=1/100 = 0.01seg o 10ms.
Ahora tenemos que dividir este periodo en los escalones que generara el pic para un periodo, para así generar el periodo del sampling, o frecuencia de muestreo:
Tsampling= Tfout/escalones = 0.01/50= 0.0002 o 200us
Esos 200uS es cada cuanto debes entregar un solo dato al DAC. 200uS*50=10mS y este si es el periodo de tu señal
Los 200us son lo que se tiene que demorar el pic en entregarle al DAC las 50 combinaciones para formar un periodo de la frecuencia senoidal de salida del DAC.
Por lo cual la frecuencia del sampling queda expresada como:
Fsampling =1/Tsampling = 1/0.0002 = 5000Hz o 5KHz.
Una vez obtenida esta frecuencia tenemos que saber a cuanto tenemos que cargar el TMR0 para formar la frecuencia sampling.
Primero tenemos que saber cuál es la frecuencia interna del PIC, para un Cristal de 4MHz, la cual está dada por:
Fint= Fcristal / 4 = 4,000,000.0/4 = 1,000,000.0 o 1MHz
Ahora esta frecuencia fint la tenemos que dividir por el pre-escaler a utilizar, que en mi caso utilizare el pre-escaler=2
Fout pre-escaler= fint/ pre-escaler = 1,000,000.0/2 = 500,000.0 o 500KHz
Ahora esta frecuencia Fout pre-escaler la dividimos por la frecuencia del sampling y obtenemos a cuanto tenemos que cargar el TMR0, esto es:
TMR0= Fout pre-escaler/ Fsampling =500,000.0/5,000.0 = 100
Por ultimo 256-100= 156 por el cual está dentro del rango a cargar el TMR0, por el cual es el valor a cargar (156).
Bueno espero que me puedan corregir si es que en esto estoy mal, por favor.
Ahora tengo otra duda y es con respecto a por ejemplo tengo una frecuencia de 67Hz, el cual me da TMR0 = a 149.25, esto quiere decir que no voy a tener la frecuencia de salida perfecta, ahora ¿Cómo puedo compensar este delta de frecuencia, para obtener los 67.0Hz?
Espero que me puedan ayudar y recobrar lo que mencione aquí