A simplicidade do nosso dispositivo é extrema: tudo o que é necessário é um microcontrolador e um buzzer piezoelétrico (figura 1). A foto do protótipo montado pelo autor pode ser vista na figura 2. (Lembre-se de que o VDD máximo para o MC9S08QD4 é de aproximadamente 5,5 Volts!)

O princípio de operação é bastante simples: a aplicação gravada na memória do microcontrolador efetua a leitura das melodias (codificadas utilizando o formato RTTTL e também gravadas na memória FLASH do chip). Estas melodias são decodificadas e uma rotina de geração de áudio reproduz os tons utilizando ondas quadradas.
Firmware
O firmware da aplicação foi totalmente escrito em linguagem C e ocupa menos de 1Kb da memória FLASH (uma boa parte da memória restante é ocupada pelas músicas). Podemos dividir o firmware em módulos distintos: geração de som, interpretador RTTTL e loop principal.
O módulo de geração de sons é composto basicamente por duas funções de tratamento de interrupção: a interrupção de comparação do canal 0 do TPM1 controla a duração (em milisegundos) da nota musical; e a interrupção do canal 1 do TPM1 controla a geração da onda quadrada de frequência programável. Para tanto, ambos os canais são configurados para operar no modo de comparação com geração de interrupção.
A utilização do modo de comparação na geração de sinais baseia-se no seguinte princípio: quando, operando no modo de comparação, o comparador digital do canal compara continuamente a contagem do contador principal (TPMCNT) com o valor armazenado no registrador de canal (TPMCxV). Ao detectar uma coincidência, um evento é gerado. Este evento pode ser a modificação do estado do pino do canal e/ou a geração de uma interrupção. No presente caso, configuramos o canal de forma que a saída do mesmo tenha o seu estado invertido a cada comparação bem sucedida.
Desta forma, podemos observar que, para gerar um sinal periódico com ciclo ativo de 50%, é necessário realizar duas comparações por ciclo, cada uma com um período igual à metade do tempo total de um ciclo do sinal.
A figura 3 ilustra esta situação, demonstrando os eventos relacionados à geração de um sinal de 1 kHz. Neste caso, é necessário que ocorra uma comparação a cada 500 µs.
