Hallo Geier,
Dein Aufbau ist falsch!
Beim ursprüngliche Aufbau wurde nur ein Transistor verwendet, welcher nach 0V schaltet und im anderen Fall hochohmig ist, also ein OC-Ausgang.
Dein PD2 hat aber eine Gegentakt-Ausgangsstufe.
Der Port-Ausgang schaltet zuerst nach 0V und lädt den Kondensator, anschliessend wir der Pin gegen 5V geschaltet und der Kondensator wird entladen.
Wenn man an einen Piezo-Kristall eine Spannung anlegt verformt er sich. Die Verformung ist proportional zur angelegten Spannung. Polt man die Spannung um, verformt er sich in die andere Richtung. Entsprechend werden Piezo auch als Aktoren im µm-Bereich verwendet.
Umgekehrt kann man den Piezo verbiegen und er erzeugt dann eine Spannung, welche proportional zur Kraft ist.
Wurde in billigen Plattenspielern verwendet, als Mikrofon, vandalensichere Tasten, EnOcean betreibt damit auch noch einen Sender für Funktasten ohne Batterie, im Feuerzeug hat ein Hammer drauf um einen Zündfunken zu bekommen usw.
Achja, der Schwingquarz gehört auch noch dazu. Das Plättchen schwingt dann tatsächlich mechanisch mit 16MHz im Gehäuse. Der Trick ist dabei, dass die mechanische Eigenresonanz-Frequenz entsprechend abgeglichen wird. Wenn man den Quarz also wie eine Glocke anschlägt, würde dieser mit den 16MHz nachklingen.
Jetzt habe ich etwas gelogen, praktisch verwendet man in diesem Bereich eine der Obertöne. Der Quarz würde vermutlich nur mit 1 MHz klingen.
Zurück zur Frage!
Mit dem OC-Ausgang schaltest du gegen Masse, der Kondensator wird geladen und der Piezo-Kristall verbiegt sich.
Dann schaltest du den OC ab :-(
Der Kondensator bleib geladen und der Piezo ändert seine Form nicht!
OK, ein klein bisschen hat er sich über die Leckströme entladen, ganz leise war er hörbar.
Mit dem Widerstand wird nun der Kondensator entladen und der Piezo verbiegt sich wieder zurück.
Der 1k war nur so ein Schätzwert um den Fehler aufzuzeigen. Je kleiner man den Macht umso schneller, bzw. mehr kann sich der Kondensator entladen. Macht man ihn zu klein brennt irgendwann der Transistor durch, weil er überlastet wird.
Wie sich der Kondensator entlädt, kann man über die normalen RC-Gleichungen berechnen, dazu braucht man die Kapazität des Piezos und den Widerstandswert. Zusammen mit der Ansteuerfrequenz kann man R dann so festlegen, dass sich der Kondensator nur auf die halbe Spannung oder 1/4 entladen kann. Entsprechend ändert sich die Lautstärke, bei einer festen Frequenz.
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)