
Zitat von
Peter(TOO)
.. 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; //
}
// - - - - - - - - - - - - - - - - - - -
...
Lesezeichen