Hallo Geier,
Wie man der Tabelle entnehmen kann ist im oberen Teil das Port als Gegentakt-Endstufe geschaltet.

In der unteren Hälfte hast du die OC-Variante, welche nur gegen Masse schaltet.
Allerdings stimmt dein Aufbau immer noch nicht mit dem Original überein. :-P

Also weiter im Text, Das schaffen wir!

Das kann man noch umkehren und nur gegen Vcc schalten, wenn man den Ausgang auf 1 schaltet, an Statt 0.
Dann kehrt sich die Tabelle um, also gegen GND hast du sound, gegen Vcc ist Ruhe.

Was jetzt bei deinem Versuch noch nicht berücksichtigt ist, ist der Pull-Up, welcher im ATmega eingebaut ist, den kann man auch noch an/abschalten und der liegt in der Grössenordnung von 50k, wenn ich das gerade richtig im Kopf habe.
Dieser liegt noch parallel zu deinem externen Widerstand.

Schwingkreise berechnen ist gar nicht nötig, RC-Berechnungen genügen.

Die Kapazität deines Piezo hast du mit 26nF angegeben, wobei sich diese mit Frequenz und Spannung ändern kann. Aber als Hausnummer kann man damit rechnen.

Frequenz ist 4kHz, also 250µs Perioden-Dauer.
eine Halbwelle sind also 125µs

Also rechnen wir mal:
Tau = R*C = 125µs

R = 125µs / 26nF = 125-6s / 26-9F = 4.8073 Ohm

So in etwa ist ein Kondensator nach 5*Tau geladen/entladen.

Theoretisch bringt dann ein Wiederstand von etwa 1k die grösste Spannung am Piezo.
Mit 5k hast du etwa 70% der maximalen Spannung, das wären akustisch aber nur -3dB, für's Ohr also praktisch gleich laut
Ohne einen parallelen internen Pull-Up sollte aber ein hörbarer Unterschied zwischen 1k und 100k sein.

------------------

So, ich habe jetzt noch meine Faulheit überwunden und im Datenblatt nachgesehen:
http://www.atmel.com/Images/Atmel-42..._Datasheet.pdf

Der Pull-Up hat 20-50k dieser liegt parallel zu deinem externen Widerstand.


Also, setze PDR auf 1 und hänge den Piezo gegen GND. Dann liegt der interne Pull-Up parallel zum Schalter und spielt keine grosse Rolle mehr.

Dann sollte ohne externen Widerstand annähernd nichts zu hören sein.

Figure 15-2, Seite 97 zeigt den Port-Aufbau.
In der Mitte ist der Tri-State Ausgangstreiber, dieser wird über das PDDR-Bit (oberstes Flip-Flop) Hochohmig/aktiv geschaltet.
Der Transistor oben links, schaltet den Pul-Up Ein/Aus.
Wie ich gerade sehe, lassen sich die Pull-Ups bei ATmega 1284 nur global für alle Ports über ein Bit schalten.

Ich kenne andere µC, da lassen sich die Pull-Ups per Port oder sogar per Pin einzeln schalten.
Könnte also Ärger geben, wenn du alle Pull-Ups abschaltest
Da macht die Variante mit 1 im PDR keine Probleme.

MfG Peter(TOO)

- - - Aktualisiert - - -

Zitat Zitat von oberallgeier Beitrag anzeigen
Einen Aufbau mit Transistor habe ich nicht erstellt/getestet. Die mageren 7 mA, die der Buzzer bei Aktivität zieht sollte ja den Controller noch nicht wirklich belasten. (ok, nur die grobe Schätzung per DMM - über den gesamten Stromverbrauch der Platine per DMM)
Da ist natürlich noch eine kleine Falle versteckt.
Was du mit dem DMM misst ist das der durchschnittliche Strom.
Der kann theoretisch auch aus Stromspitzen von 1A bestehen.

Beim theoretischen laden eines idealen Kondensators ist die Stromspitze unendlich.

Praktisch wir er in deinem Fall durch den Ausgangstransistor des Ports begrenzt.
Mit einem Oszilloskop kann man das dann sehen, da liegt am Pin nicht wirklich eine Rechteckspannung an, Das ist dann mehr eine Trapezspannung.