@zx81, pues la verdad lo que he hecho es inspirarme en tu post y leer algo sobre diferencias entre polaridad y cambio de fase en la onda.
El mérito es todo tuyo..
Lo primero que hice fue grabar en wav con audacity la salida del maxduino, y efectivamente ví que salía de arranque con forma de onda invertida (negativa). La siguiente prueba fue hacer un invert en audacity y ver que cargaba el juego.
Conclusión, la imagen especular funciona. Lo siguiente estaba más o menos claro, hay que invertir toda la onda, cuando pongo un cero es un uno y cuando pongo un uno es un cero... i.e invierto los comportamientos.
#ifndef polarity //antes
#define WRITE_LOW PORTB &= ~_BV(1) // El pin9 es el bit1 del PORTB
#define WRITE_HIGH PORTB |= _BV(1) // El pin9 es el bit1 del PORTB
// pin 0-7 PortD0-7, pin 8-13 PortB0-5, pin 14-19 PortC0-5
#endif
#ifdef polarity //tras el cambio
#define WRITE_HIGH PORTB &= ~_BV(1) // El pin9 es el bit1 del PORTB
#define WRITE_LOW PORTB |= _BV(1) // El pin9 es el bit1 del PORTB
// pin 0-7 PortD0-7, pin 8-13 PortB0-5, pin 14-19 PortC0-5
#endif
.. No me funcionaba ... el otro punto es que me dí cuenta que en cada interrupción cuando había pausas se forzaba a un estado (pinState) concreto, y lo que hice fue invertirlo también.
void wave2() {
..
} else {
if(workingPeriod >= 1 && wasPauseBlock==false) {
pinState = !pinState;
..
if (pinState == LOW) WRITE_LOW;
else WRITE_HIGH;
if(pauseFlipBit==true) {
newTime = 1500; //Set 1.5ms initial pause block
#ifndef polarity
pinState = LOW; //Set next pinstate LOW
#endif
#ifdef polarity
pinState = HIGH; //Set next pinstate HIGH
#endif