inverter 12/115v 400hz

ciao ragazzi
partendo dal fatto che i miei conti sopra sulle frequenze sono sbagliati :sweat_smile: 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
    }

  }


}