ciao ragazzi
partendo dal fatto che i miei conti sopra sulle frequenze sono sbagliati
avrei bisogno di un po' di aiuto da qualche esperto di timer
nel codice sopra facendo abs() di sin() praticamente creavo una "sinusoide ripetuta" cioè sia la parte positiva che quella negativa venivano affiancate e rese entrambe positive
ora, ovviamente non posso creare una semionda negativa, ma facendo un push pull delle due semionde positive fuori dal trasformatore avrei l'onda completa
quindi ho discriminato la prima semionda di ogni ciclo (primi 180° su 360°) attivando il pin 3 solo durante quel periodo
per il resto del giro pin3 rimane spento
come si vede dalla foto che allego il risultato c'è, si vede che viene disegnata solo una semionda su 2 con un periodo di vuoto pari al resto del giro
tuttavia il mio problema è che avrei bisogno di tirare fuori la seconda semionda da un'altro pin ma non so come fare, prima pensavo che su timer 2 pin 3 e pin 11 fossero gemelli e che quindi fosse semplice accendere il 3 per mezzo giro e 11 per il resto, ma ho guardato e non è così, ogni pin dovrebbe comandare un mosfet che di fatto crea l'inversione di tensione sul trasformatore a doppio avvolgimento con centrali in comune
avete idee su come agganciare un altro pin al mio timer e fargli fare quello di cui ho bisdogno??
spero di essere stato chiaro anche se ne dubito e me ne scuso, se avete domande fatemele pure!!!
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>
float i;
float o;
int main(void)
{
DDRD = 0b00001000; //pin 3 output
TCCR2A = 0b10100011; // timer2 fast pwm
TCCR2B = 0b00001010; //prescaler 8
while(1)
{
i += 0.1f; //risoluzione 0.1rad
o = sin(i); //seno di i, punti per duty cycle sinusoide
OCR2A =79; // 25khz
OCR2B = (unsigned char)(abs(o *79.0f)); //duty cycle
if(i<=3.14f){ //prima metà della funzione seno (semionda)
DDRD = 0b00001000; //abilita pin3
}
if(i>=3.14f){ //seconda metà della funzione seno
DDRD = 0b00000000; //disabilita pin3
}
if(i>=6.28f){ //360°
i=0; //azzera i
}
}
}
