ATtiny13Aで周波数可変発振器をつくる
~ 比較一致タイマーを使う ~

ラジコンのミニヘリに搭載するロストアラームを製作するために、ブザーを鳴らすプログラムを作成した。

圧電ブザーには、アクティブ型とパッシブ型がある。アクティブ型は電源に接続するだけで鳴るのだが、パッシブ型は電源に接続しても鳴らない。パッシブ型を鳴らすには発振器が必要である。
素直にアクティブ型を使えば良いのだが、発振周波数にバラツキがあり、音のちいさな個体があるので使用するのをやめた。
パッシブ型のブザーとATtiny13Aを使い、音の大きくなる周波数で鳴らすことにした。
ATtiny13Aの比較一致タイマーを使えば周波数可変の矩形波を発生させることができる。

サンプルコード

#include <avr/io.h>

int main(void)
{
	// ポート設定
	DDRB  = 0b00000001;  // PB0:Buzzer(出力) PB1,PB2:Button(入力)
	PORTB = 0b00000110;  // PB1,PB2:プルアップ
 
	// 比較一致タイマー:WGM02 WGM01 WGM00 -> 010
	// 比較A出力選択:COM0A1 COM0A0 -> 01 比較一致でOC0Aピントグル(交互)出力
	// カウンタクロック分周:CS02 CS01 CS00 -> 010 8分周
	// 割込は使用しない
	TCCR0A=0b01000010;  // COM0A1:0 COM0A0:1  WGM01:1 WGM00:0
	TCCR0B=0b00000011;  // WGM02:0  CS02:0  CS01:1  CS00:0

	int i;
	int j=255;
    while (1) 
    {
		while( bit_is_clear(PINB,PB1) ){
			i=1;
		}

		while( bit_is_clear(PINB,PB2) ){
			i=-1;
		}

		j=j+i;
		if (j < 1)  j=1;    // 34.7kHz
		if (j >255) j=255;  // 270Hz
		OCR0A=j;
		i=0;
    }
}

シェアする

  • このエントリーをはてなブックマークに追加

フォローする