440.0 Hz Standard Music Tone Generatior



Figure 1 is a simple but very accurate circuit that generates the 440.0 Hz standard music tone. It can act like a "tuning fork" for musical instruments. For example, you can use it to check whether your piano has been out of tune. If your piano is fine tuned, its A4 key must sound the same tone as this one.


Figure 1. 440 Hz Music Tone generator



To get exact 440.0 Hz tone, both hardware and software must be fine-tuned. Because ATtiny11's built-in RC oscillator is not accurately 1 MHz, we replace it with the 1 MHz crystal oscillator as shown. The speaker needs to have good response to audible frequencies, we choose a 2.5" 100 Ohm speaker.


Since the factory has pre-programmed the ATtiny11's "Fuse bits" and made it shipped with built-in RC oscillator, we need to re-program its "Fuse bits" in order to use external oscillator.


This "Fuse bits" programming facility is not included in AVRHVP-1 programmer since there is no more flash memory to accommodate this. For this reason another special programmer AVRHVP-2 has been developed, which handles only "Fuse bits" programming and writing "Lock bits" (to hide the binary code on chip) functions.


Listing 1 is the software. To generate the accurate 440 Hz frequency tone, an infinite loop of 1136 us (microsecond) High and Low voltage is alternately applied to the speaker, here 1136 us is the half period (T/2) corresponding to 440 Hz.


The key routine here is DL1132us delay routine, but every other instruction counts. For example, setting up PB1=High or Low takes 2 us each, calling DL1132 also takes 2 us. Adding them up gives exact 1136 us.


With such meticulous calculation, the circuit output tone is exactly 440.0 Hz when measured by frequency meter. As a comparison, if you don't re-program the Fuse bits but use the original factory built-in RC oscillator, the frequency meter will show quite different readings, such as 495.7 Hz and with the last two digits changing.






LISTING 1. The Standard 440 Hz Music Tone Generation program


;ATonTn11.ASM: 440 Hz Standard Music A tone generator

.include "TN11def.inc" ; Port definitions here


.org 0

sbi DDRB, 1 ; config DDRB bit-1 as output

sbi DDRB, 0 ; config DDRB bit-0 as output


cbi PORTB, 0 ; LED=ON



cbi PORTB, 1 ; PB1=LOW; 2us

rcall DL1132us ;

NOP ; 1us

NOP ; 1us

; 1136

; ------ --

sbi PORTB, 1 ; PB1=High | | |

rcall DL1132us ; ___| |______|

; 1136

rjmp AGAIN ; 2us


;delay 1132us at 1 MHz



LDI R20, 0 ; 1us


DEC R20 ; 1us \ 3*256 = 768 us

brne LOOP1 ; 2us /


LDI R21, 119 ; 1us


DEC R21 ; 1us \ 3*119 = 357 us

brne LOOP2 ; 2us /


RET ; 4us


;rcall is 3us; Total delay = 1132 us