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) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。