6: 2009-11-18 (水) 03:59:54 takaboo | 7: 2009-11-20 (金) 18:23:07 takaboo | ||
---|---|---|---|
Line 229: | Line 229: | ||
const char gyao[27000] PROGMEM = {0,0,0,0,0,0,}; | const char gyao[27000] PROGMEM = {0,0,0,0,0,0,}; | ||
**BUZZER.c [#e8471f5c] | **BUZZER.c [#e8471f5c] | ||
- | 指定周波数で圧電ブザーを鳴らす。 | + | PD7(OC2)端子に接続されたトランジスタを介して他励式のブザーを駆動する。 |
+ | #ref(bz.png) | ||
+ | この回路ではPD7端子がHIGHになるとトランジスタがONしてブザーの+/-両端に電圧が加わる。LOWになるとトランジスタがOFFしてブザーの-端子がオープンになる。これをゆっくり繰り返すとブザーがプチプチとなるだけだが、数百~数kHzの周期で繰り返すとぴ~ぷ~といった音として聞こえる様になる。 | ||
+ | |||
+ | 周波数はPA7(ADC7)端子に接続したポテンショメータで分圧された電圧を計測する事で設定するものとしている。 | ||
+ | #ref(vr.png) | ||
+ | |||
+ | PD7はカウンタタイマ2のOC2端子が接続されており、コンペアマッチでトグル動作する様に設定すればOCR2に設定できる範囲の値で周波数が設定出来る。また同時にPD7を出力端子に設定する必要もある。 | ||
+ | void ToneOn (int tone) { | ||
+ | OCR2 = UD_ToneTable[tone]; | ||
+ | TCCR2 = _BV(WGM21) | _BV(COM20) | _BV(CS22) | _BV(CS20); | ||
+ | // PD7(OC2)を出力に | ||
+ | DDRD |= _BV(PIND7); | ||
+ | } | ||
+ | 大抵ブザーの類は常時一定の電圧を加えておく事は推奨されていないので、音を出さないときはOFFしておく事で劣化を防ぎつつ無駄に電力を消費する事もなくなる。 | ||
+ | void ToneOff (void) { | ||
+ | // PD7(OC2)を入力(外部のプルダウン抵抗でLOWに) | ||
+ | DDRD &= ~_BV(PIND7); | ||
+ | TCCR2 = 0; | ||
+ | } | ||
**SPI_BRIDGE.c [#j47c03d0] | **SPI_BRIDGE.c [#j47c03d0] | ||
SPIバスで接続されたATA6831(3ch ハーフブリッジドライバ)と通信を行い、任意のパターンで各チャネルのトランジスタをON/OFFさせる。 | SPIバスで接続されたATA6831(3ch ハーフブリッジドライバ)と通信を行い、任意のパターンで各チャネルのトランジスタをON/OFFさせる。 | ||
+ | #ref(spi.png) | ||
+ | SPIは簡単に言えばクロック同期式の双方向シリアル通信で、MISO・MOSI・SCKとチップセレクトの4本の信号でコミュニケーションする。対象によってタイミング等細かい違いはあるが、AVRの場合は大抵のデバイスとと接続する事ができる。 | ||
+ | |||
+ | ATA6831は3chのハーフブリッジを内蔵した主にリレーやランプを駆動するドライバICである。ここのうちハーフブリッジを2つ使えばモータの正/逆転を行うのに十分なHブリッジが構成できるので、小型モータの駆動程度であれば十分に使える。~ | ||
+ | また3chのハーフブリッジに対してモータをうまくつなげば、動作モードの制限はあるものの2台を個別に駆動する事ができない事も無い。 | ||
**RCSERVO.c [#l9555243] | **RCSERVO.c [#l9555243] |