Zitat Zitat von Peter(TOO) Beitrag anzeigen
.. Dein Aufbau ist falsch! .. Du kannst aber folgendes testen:
Setze den Pin per Software auf 0.
Dann schaltest du in der ISR zwischen Ausgang und Eingang um. Also wie ToggleBit() aber nicht auf dem Port-Register sondern das DDR-Register.
Dann kannst du die Lautstärke noch damit ändern, dass du den Pull-Up zu und weg schaltest.

MfG Peter(TOO)
OK:
Setze den Pin per Software auf 0.
>>..PORTD........&= ~(1<<PD2);........// PD2 auf Null setzen
.. Also wie ToggleBit() aber nicht auf dem Port-Register sondern das DDR-Register.
>>..ToggleBit (DDRD, PD2);..............// DDRD-2 umschalten: Eingang/Ausgang

Geht leider überhaupt nicht => kein Ton (auch kein Blinken einer LED). Die "alte" Variante tönte wenigstens. Hab ich Dein Posting falsch vestanden ?

Code:
...
// Auszug aus main.c
// ============================================================================= =
//      Testweise hier eine Endlosschlaufe, NUR für Piezosummer (anderer Test!!)
//      Verwendete Pinne: RXD1/INT0/PD2 + GND,
// - - - - - - - - - - - - - - - -
  DDRD         &= ~(1<<PD2);            // Setze Pinn auf Eingang
  PORTD        &= ~(1<<PD2);            // PD2 auf Null setzen
// ============================================================================= =
//      Testweise hier eine Endlosschlaufe, NUR für Piezosummer (anderer Test!!)
//      Verwende Ausgänge RXD1/INT0/PD2 + TXD1/INT1/PD3, beide als Ausgang, PD2=0
// - - - - - - - - - - - - - - - -
  DDRD         &= ~(1<<PD2);            // Setze Pinn auf Eingang
  DDRD         |=  (1<<PD3);            // Setze Pinn auf Ausgang
  PORTD        &= ~(1<<PD2);            // PD2 auf Null setzen
  tmpizo        =        5 ;            // Piezo schnarrt mit 20000/5 = 4 kHz
                                        //      siehe ISR(TIMER2_COMPA_vect)
// - - - - - - - - - - - - - - - -
  while ( 1 ) 
  {                     //
  }                     //
// - - - - - - - - - - - - - - - -
// ============================================================================= =
...
// Auszug aus ~tmr~.c
// ============================================================================= =
// ===  Nicht unterbrechbare ISR für timer2 =================================== */
// Routine zählt hoch im Takt 20 kHz = 50 µs.
 ISR(TIMER2_COMPA_vect)         // Vektor 7
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 {                              //
  IzeitA2 --;                   //  ###>>> IzeitA2 ist aktuell int16_t ==>>
                                //  IzeitA2 bleibt bis 32000 in der int16-Grenze
//...
// - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - -
  tmpizo --;
  if ( !tmpizo )
  {                     //
//  ToggleBit (PORTD, PD2);     // Portpin umschalten 0/1
    ToggleBit (DDRD,  PD2);     // DDRD-2 umschalten: Eingang/Ausgang
    tmpizo     =    5;  //
  }
// - - - - - - - - - - - - - - - - - - -
...