2015年11月13日金曜日

小ネタ実験: ATtiny13Aを外部クロックで動かす(24MHz駆動)

リズムマシンのデバッグにつかれてきたので小ネタ実験。

ATtiny13Aを外部クロックで動かしてみた。

ATtiny13にAがついているのは、製造工程をオプティマイズして消費電流を抑えたものらしい。

ATtiny13Aは直接水晶をつないでクロックを生成できないようなので、京セラのEXO-3と水晶発信器をつないでやってみた。

配線図


EXO-3

水晶発信器


ヒューズビットの設定


いつも使わせてもらっている「Engbedded Atmel AVR® Fuse Calculator」で調べた。
Ext. Clock; Start-up time: 14 CK +64ms; (外部クロックを使う)
CKDIV8=0 (クロックを8分周しない)
の設定で
Low: 0x78
High: 0xFF

ソースコード


 /*  
  * ATTiny13_Blinking_LED.cpp  
  *  
  * Created: 2015/11/11 4:46:48  
  * Author : gizmo  
  */   
 #define F_CPU 12000000  
 #include <avr/io.h>  
 #include <util/delay.h>  
 int main(void)  
 {  
     // PB0, PB1を出力に設定  
     DDRB = (1 << DDB1) | (1 << DDB0) ;  
     // PB0, PB1をHiに  
     PORTB |= (1 << PORTB1) | (1 << PORTB0);  
   while (1)   
   {  
         // Lチカ  
         PORTB |= (1 << PORTB0);  
         PORTB &= ~(1 << PORTB1);  
         _delay_ms(500);  
         PORTB &= ~(1 << PORTB0);  
         PORTB |= (1 << PORTB1);  
         _delay_ms(500);  
   }  
 }  

EXO-3(12MHz)

電源電圧5V, 3.3Vともに動作

水晶発信器(24MHz)

電源電圧5V, 3.3Vでともに動作

ATtiny13Aの仕様では、
• Speed Grade:
– 0 – 4 MHz @ 1.8 – 5.5V
– 0 – 10 MHz @ 2.7 – 5.5V
– 0 – 20 MHz @ 4.5 – 5.5V
となっていて、24MHz@3.3Vは仕様外だが動作はするようだ。

水晶発信器(48MHz)

電源電圧5V: 動作はするがLEDの点滅が不規則で遅い。
電源電圧3.3V: 全く動作しない。

24MHzのクロック波形


使っているオシロが「SDS7102」でスペックは1Gsps、アナログ帯域100MHzなのでまあまあ波形は見れていると思う。

20MHzに帯域制限


SDS7102の機能でアナログ帯域を20MHzに制限するものがあるので使ってみた。

24MHzぐらいになると20MHzのオシロではオーバーシュート、アンダーシュート等の波形の崩れはみれなくなりそうだが、クロックを確認をするには十分かな?

妄想

Tiny13をいっぱい並べてオシレーターとして使えないかという妄想



それぞれのTiny13がPWMで波形を出力し、LPFでなめらかな波形にして、Analog Mixerで合成する。

はっきり音程を分けてやれば和音になるし、サンプリング周波数をちょっとずつずらしてやればSuperSawになるかも?

Super Squareというのもやってみたい。

マスターから子分のTiny13への司令はシリアル通信じゃないとだめっぽいがUARTでいけるんだろうか?マスタークロックで全員同期できるかな?