Tal y como lo tienes tu no te debe influir en el tiempo, miralo en el simulador y veras que te da los 138uS igual, sino variamos el OFFSET del TMR0, ya que esta dentro del tiempo del TMR0, igualmente si lo cargas asi:
bcf INTCON,T0IF
movlw .86 ;valor del offset del TMR0 para 136,0uS; Temporización = Ciclo de instrucción*(256-TMR0)*Divisor de Frecuencia
movwf TMR0 ;aqui empieza a contar, antes del "bsf PWM_1_AUX"
bsf PWM_1_AUX
En los siguientes ponlo antes del PWM asi consigues que el TMR empiece a contar antes.
Mejor lo hice como tu me indicabas jejejejejeje ya he realizado el codigo, lo que aun me falta es lo que comentaba de la Demora_2 y Demora_3 pero creo que lo voy a dejar por ahora ahi ya que me quede aun con bastante espacio jajajajajaja si consigo algo de tiempo extra lo hago... ya vas a darte cuenta del espacio que he ahorrado jajajajaja...
ahora se supone que esta configuracion del testeo del cruce por cero, me da a ambos cruces por cero, es decir de negativo a positivo y de positivo a negativo??
No es necesario, con que lo sincronicemos cada ciclo completo es suficiente, yo en el mensaje anterior te queria explicar donde deben estar mas o menos los cruces, pero no quise decir que los tuvieras que chequear, posiblemente me explique mal, cosa bastante normal en mi creo que lo mejor es chequear el cruce de - a +.
Lo que preguntaba es si me da 1 (5V) a la salida siempre que hay cruce por cero ya sea de positivo a negativo y viceversa... y segun lo que me dices pues parece que es asi...
Yo se que la sincronizada creo que suficiente seria cada ciclo completo, lo q no sabia es si daba un 1 cada cruce por cero el opto, y segun veo si es asi y tu me lo confirmas con lo siguiente...
Si, llevo una semana dandole vueltas a esto y preguntandole a gente que sabe mas que yo, pero nadie me sabe dar una respuesta convincente. Creo que la unica manera es chequeando la direccion de la corriente, esto habria que hacerlo con optos normales, ya que solo conducen en una direccion, cuando los dos conducen quiere decir que la tensiones son del mismo signo + o - nos da igual el caso es que sean del mismo signo, porque si son de sigo contrario se restarian, si de la red tenemos 300W y le metemos 300W del inverter de signo contrario tenemos 0W???
asi que creo que es mejor utilizar un opto normal... he simulado y mira como sale la onda
http://prntscr.com/1sa6tgasi que pienso que asi como esta la cosa y si es real esta imagen (ya probare cuando salga) es mejor testear en el cruce por cero de positivo a negativo ya que ahi es cuando te dara el 1 logico... ademas de que ahi es cuando empieza a conducir antes del cruce por cero.... en el cruce por cero de negativo a positivo llega a la tension del diodo y es un 0 logico... pero no se si me dara antes o despues del cruce por cero la señal, segun pareciera en la imagen que te pongo antes pues da despues del cruce por cero...
Otra manera es hacerlo como tu decias al principio, con interrupcion, nos evitaria estar chequeando el pin, pero en la interrupcion solo activariamos el FLAG y despues lo tendriamos que chequear en el programa??? No se si vamos a ganar mucho.
Creo que eso ya esta solucionado siesque miras el programa te daras cuenta...
Si, si te sales de la subrutina sin ejecutar el return, la octaba vez que lo hagas se te desbordara el stack y se te perdera el programa.
Exacto, por lo mismo utilice una bandera o flag.... mira el programa
Pues si quieres hazlo, no se si puedes hacerlo tu o tiene que hacerlo un moderador, pero vamos no creo que haya problema.
Ya lo cambie... espero y no haya problema por el cambio
Lo de las dos demoras era porque en una descontabamos los tiempos de activacion para que saliera mas exacto el tiempo en alto, son solo 400nS de diferencia no seria problema, pero tampoco vas a ganar mucho ya que se escribe una sola vez y ocupa 6 Bytes.
Si pero incluso eso hacia que me confunda... te comento que en los programas anteriores habiamos estado ignorando el PWM con 29 ciclos positivos y 1 negativo (nunca lo haciamos), ahora mismo ya solucione eso, pero he hecho que en la cresta de la onda PWM de 100% sea de un solo ciclo y igualmente he dividido el PWM de 0% en dos que a la final por tiempo viene a ser uno solo... aqui tengo una duda... Es necesario que en el cambio de signo de la onda enseguida que se desactive el un transistor se active el otro? es decir una instruccion luego de la otra?? ahora mismo estoy dando un tiempo de 69,4us entre lo que se desactiva el un transistor y lo que se activa el otro pero si hay que hacerlo uno tras otro pues es cuestion de acomodar el codigo, es mas por ahi lei que para los mosfet es mejor dejar un tiempo en el cambio de sentido del puente H, pero no se si es correcto dejar tanto tiempo.... tu sabes algo al respecto talves??
Ah algo que me olvidaba de comentarte, aca la frecuencia es 60Hz, a partir de 59,86Hz y hasta 60,14Hz es normal aunque normalmente oscila entre 59,95 y 60Hz, por debajo de 59,85Hz y por encima 60,15Hz ya es considerado un evento de frecuenca, es decir es algo que se debe evitar y eso lo hace el organismo de control de generacion en mi pais... Asi que pienso yo que no hay que hacerles aun nada a los ingenieros en mi pais jajajajajaja... en tiempos seria como
59,85Hz 0,0167084377610693 segundos
60Hz 0,0166666666666667 segundos
60,15Hz 0,0166251039068994 segundos
asi que si mis calculos no me fallan tendriamos un margen de 41,56275976718188 usegundos para cada lado en total seria 8,312551953436376 usegundos de variacion
es decir que el calculo para que se sincronice seria de hacerlo en el mismo ciclo en donde caiga el cruce por cero o uno antes o despues ya que mas que eso no creo que tendria sentido... ahora hay que ver cuando es que nos da ese cruce por cero el opto...
Corrigeme si estoy equivocado ya que yo tambien soy peligroso con la calculadora jejejejejeje
PD.: Te dejo el codigo para que lo chequees
Saludos, Pedro.