SSブログ

DigisparkのPLLとlow-pass filterとアンプと [Arduino]

上位のArduino Uno(ATmega328)にはなくて、Digispark(ATtiny85)にはあるものとして、PLL(位相同期回路: phase locked loop)があります。

まず、使用するには、、
PLLCSR(PLL Control and Status Register)
 Bit 1 - PLLE: PLL Enable はシステムクロック元としPLLが選択されているので元々1。
 Bit 2 - PCKE: PCK Enable を1にすることで、タイマー/カウンタ1のクロック元をPLLにします。
 Bit 7 - LSM: Low Speed Mode(32MHz) ですが、そのまま 0 で高速モード(64MHz)。


・注意点

★システムクロック(16/8/1MHz)に関わらず64MHz(LSM: Low Speed Mode時は32MHz)
(ただしOSCCAL (Oscillator Calibration Register)をいじるとシステムクロックと一緒に微調整はできます)

★タイマー/カウンタ1だけ
(ただしDigisparkではボードマネージャでDigistump AVR Boardsの場合でISR(TIMER1_OVF_vect)が使用されてしまっている)


・使用用途

とりあえず、高速PWMによる疑似DACかな。
64MHz / 256(8bit) = 250kHz が、キャリア周波数ということでした。
まあ、Uno(16MHz)で9bitだと 16MHz / 512(9bit) = 31.25kHz だとノイズらしいノイズは分かりませんでしたが、半分の15.625kHzだとノイズが分かりました。
あと、外部出力の際には、low-pass filterがないとアンプが壊れるよっていうのが各所に書いてありました。
low-pass filterの具体的な値の計算式は理解できなかったので、以下のサイトのPLL音声出力時の回路図を参考とさせていただきました。
PB4(OC1B)から1kΩの抵抗と、そこからGNDとの間に0.1μFのコンデンサとなっていました。

waveformgenerator.png
Technoblogy - Waveform Generation using an ATtiny85
http://www.technoblogy.com/show?QVN

とか
Technoblogy - Four Sample Player
http://www.technoblogy.com/show?2XJD

また、次のページには、PB4(OC1B)から220μFの電解コンデンサを介してスピーカとつないでありました。

Technoblogy - Tiny Synth
http://www.technoblogy.com/show?Q7H

他では、100μFだったりするのもありました。

Technoblogy - Audio Pitch Shifter
http://www.technoblogy.com/show?1L02

できあいのアンプとつないでみました。
sp_amp.jpg
そのままアンプにつなぐと、音が大きすぎて音が割れるので、回路図のとおり10kΩの半固定抵抗をつけました。



nice!(0)  コメント(0)