Marc wrote: > Currently the circuit is: > > 5V > | > | > 3khz 50/50 duty | /c > port pin signal: ------ 2k2 -----|X BC817 NPN > | \e > | > | > piezo beeper > | > /SPEAKER_ON _| > control (HC595) ----------------| | > | |-> BSS84 p-channel > | |_ > | > | > GND OK, many good suggestions made. In particular, if you want maximum drive, do *not* use emitter-follower/ source follower configurations as above because you lose 1V per bipolar, 2 to 4 volts per FET. You'd be lucky therefore to get *any* voltage from the above circuit! The correct version is: 5V | /SPEAKER_ON _| control (HC595) ----------------| | | |-> BSS84 p-channel | |_ +-----------+ | | piezo beeper 2k2 | | +-----------+ 3khz 50/50 duty | /c port pin signal: ------ 10k -----|X BC817 NPN | \e | | GND Next, there are piezos with drivers which you drive from DC, and bare piezos which you drive from AC, attempting to resonate them if possible. If you are using the latter, then you have a *major* problem with the original circuit, since piezos are capacitors and you have no DC path at all! It would only actually "beep" due to parasitic capacitance of the transistors. Ergo the resistor I have added. If you have one pin with which to drive the piezo, then drive one side of the piezo with that pin directly. Also connect the pin to an inverter, either a gate, or if you must, a transistor with 10k base resistor and 2k collector resistor, and the collector/ gate output drives the other side of the piezo. Arrange the port output so that the transistor is turned *off* when idle. 5V | 2k2 | +-- piezo ------+ | | 3khz 50/50 duty | | /c port pin signal: ---+-- 10k -----|X BC817 NPN | \e | | GND -- Cheers, Paul B.