2014/07/05

時計もどきの試作(AVRマイコン)

AVRマイコンとLCDを使った時計もどきを試作しました。なぜ「時計もどき」かと言うと、時刻合わせを行う機能がないからです。

用意するもの


1秒の作り方


マイコン内蔵クロックは精度が悪いため時計には使わないほうが良いでしょう。マイコンボードには20MHzのX'talが搭載されているのでこれを使います。20MHzクロックはマイコン内部で1/8(=2.5MHz)にされ、CPU Coreの動作クロック、およびタイマ/カウンタの動作クロックとして使われます。タイマ/カウンタは20mS周期(=50Hz)でタイマ割り込みを発生させます。プログラムはタイマ割込50回で秒針を1進めるようになっています。


図1 クロック構成

回路図


今回使用したLCDモジュールはマイコンとI2Cバスで接続します。図2に回路図を示します。


図2 回路図

I2Cバスのアクセス方法


マイコン内蔵のTWI機能を使ってI2Cバスにアクセスします。TWIの使い方は面倒そうだったのでAVR315付属のサンプルコードを使いました。ただし、avr-libcで使う場合は割り込み関係のソースを少し修正する必要があります。以下に修正ポイントを示します。

リスト1 TWI_Master.cの冒頭 修正ポイント:1~4行目、7行目を追加

リスト2 TWI_Master.cの割込みルーチン 修正ポイント:9~11行目、14行目を追加

完成


こんな感じで動きます。 電源入れたまま10日ほど放っておいたら10秒遅れました。月差に換算すると30秒ぐらいなのでまあまあの精度です。

2014/06/22

神代植物公園:あじさい

神代植物公園にあじさいを見に行ってきました。


撮影場所:神代植物公園
撮影日:2014/06/21

2014/05/28

Deep Mandelbrotの使い方

 Deep Mandelbrotの引数に'-c'があります。これは色の指定ができます。

-c specify color mode (0-255) [default: 0] or 'auto'

 上記によると入力可能な値は0-255,autoに見えますが、実際に入力可能な値は0-21,autoのようです。それ以外の値を指定するとエラーになります。また0とautoは同じ結果になるようです。

 実際にどんな色になるのか試してみたのでご覧ください。

c=auto (default)


c=0 (default)


c=1 (pink on light steel blue)


c=2 (shades of green)


c=3 (mistyrose and midnightblue)


c=4 (mistyrose, red on midnightblue)


c=5 (grey, dark green, mistyrose)


c=6 (dark slate grey and maroon on bright background)


c=7 (White/DarkBlue/Rose/DarkGreen/Gold)


c=8 (Ice/blue/dark-red)


c=9 (Red/White)


c=10 (DarkBlue/DarkRed)


c=11 (Sand, DarkBlue/RedBrick)


c=12 (Ice, DarkRed)


c=13 (shades of dark red)


c=14 (shades of dark red + dark gold)


c=15 (pink+blue on bright)


c=16 (shades of grey)


c=17 (shades of grey + dark blue)


c=18 (shades of grey + magenta)


c=19 (shades of grey + green)


c=20 (shades of grey + red)


c=21 (darkred,steelblue,gold)


c=255 (Linear functions)


2014/05/27

マンデルブロ集合ギャラリー

 Deep Mandelbrotを使って作成した画像です。


centerx = 0.3007100003
centery = 0.02006000303
radius  = 0.00000000001
maxiter = 30000

centerx = 0.3007100002979624312
centery = 0.02006000303424897
radius  = 0.0000000000000000001
maxiter = 30000

centerx = 0.300710000297962431204
centery = 0.020060003034248969999
radius  = 0.000000000000000000001
maxiter = 30000

centerx = 0.005002063072287
centery = 0.849947000274766
radius  = 0.000000000000001
maxiter = 30000

centerx = 0.00500206307228665347
centery = 0.84994700027476510513
radius  = 0.00000000000000000001
maxiter = 30000

centerx = -1.484
centery =  0.0
radius  =  0.00000000000000000000000000000000000000000000001
maxiter = 600000

バーニングシップフラクタル

bsf.knit 今回は『バーニングシップフラクタル』についての備忘録です。 バーニングシップフラクタルとは? Wikipedia ...