One thing I should mention is that when I first built this electronic components were far more expensive than they are these days (compared to income), so I quickly learned to scavenge whatever I could from any faulty kit, and to have my hand out when production kit had reached end-of-line and there was spare stock that would otherwise have been junked. Things were much more easy-going then and you could rock up at a factory on a bike and ask if there was any stuff being binned you could have.
The result of this is that the generator is a mixture of actual design and using what was available. This is more obvious with the Square/Triangle board than anywhere else!
I have two drawings this time. The original is here and then the revised one with some component changes/improvements.
A square wave is unique in that its R.M.S. value and peak value are the same. Also, with the 'new' CMOS logic chips you can get rail-to-rail swings. Therefore, control the supply voltage and you've got exact output levels.
I wanted to get somewhere near +10dBm (the R.M.S. output from the oscillator). This is 2.434, so peak-to-peak 4.868. Therefore I had the bright idea of setting a supply of 5V with a zener diode. This was for a single element of a gate with a schmitt trigger input. Instant very easy and accurate square waves of 2.5V R.M.S.

However, I needed to get that symmetrical around zero, hence the balancing resistors and preset. Also, I fed the input via a R/C filter (rather oversized cap) and further mark-space balancing to ensure I had a true 1:1 ratio - this is important for the triangle waveshape. What I hadn't taken on board at the time was that the triggering didn't need to take place at the zero crossing point of the incoming sinewave, it only needed to be symmetrical. That cap is now much smaller, and there is a resistor removed.
The other change I've now made is to get a pair of 2.5V reference diodes, which are accurate enough for me to be able to dispose of the 5V zener and DC balancing network.
The triangle conversion is very simple. Feed the inverting input of an op-amp with a square wave via a resistor and apply 100% feedback and you have a current source. Apply a constant current to a cap and you get a linear ramp. Combine the two and you get a triangle wave!
Once again there is an 081 in there, whereas I'm sure I would have actually put my hand in my pocket and bought one of the latest (expensive) brand new 7611 CMOS amps. It didn't have to be fast, but it did need a very low bias current. The 10M resistor and 100n cap ensure there is 100% D.C feedback so effectively no offset, even if the square wave has a slight bias. The values are extreme enough to ensure that they don't change the triangle shape.
The amplitude is determined by the incoming square wave amplitude and the ratio of the resistors and caps in the network. I chose values that resulted in an R.M.S. value very close to that of the square wave.
Trimming the value of the sine wave oscillator output then gave me all three waveforms with the same R.M.S. value and close to +10dBm
