mixture-art@Q
技術+アイディア+世俗+なんとなく思ったこと、すべての融合がmixture-art
Arduinoを模倣するときは内部クロックに気をつける必要がある

Arduinoはオープンプラットフォームである。
なのでちょっとものづくりの腕に覚えのある人ならArduinoを応用した何かを
自分で基板ごと作りたくなるようなケースもあることだろう。

そういう時に気をつける必要があるのが『内部クロック』だ。

特に外部との通信を行う場合はクロックが合っていないとさっぱり動かない。

普通何か自作デバイスを作った場合はそれをArduino IDEから使えるようにするためには
IDEにデバイスを登録する必要がある。

この設定ファイルはArduinoのパッケージの中に入っているので、
例えばMacの場合は下の写真のようにしてパッケージ内部を覗く。
iPhotoとかで写真の実態を探すときと同じ要領だ。

Screen Shot 2013-10-20 at 11.44.46 PM

Contents > Resources > Java > hardware > Arduino > programmer.txt
を編集することで新しいデバイスの登録ができる。

Screen Shot 2013-10-20 at 11.45.42 PM

どういう記述をすれば良いのかは、すでに登録済みのやつと見比べたり
自分がどのArduinoを参考にしているかに従ってちょっと調べれば分かると思うので割愛。

コンパイルはここで記述したスクリプトに沿ってされるはずなのだが、
クロックの設定が上手くいっていないときがある。

そういう時はソースに設定のコードを記載することで直接設定してしまう。

具体的にはsetup()の中に例えばATMEGA32の場合ならこう書く

    CLKPR = (1<<CLKPCE);

    CLKPR = B00000000;

これは内部クロックディバイダーの設定は1/1ですよ、という意味だ。

ちなみにこの部分はデバイス依存なのでどのCPUを使うかによってきちんと調べる必要がある。

クロック設定が合っているかどうかの確認は
何か信号を出してみてそれをオシロで見ればわかる。

例えば

————————————————
#define UART0_BAURATE 9600

setup()
{
    Serial1.begin(UART0_BAURATE);
}

unsigned int send_data[3] = {0xAA, 0x55, 0xA5};

loop()
{
    for(int i = 0; i < 3; i++){
        Serial1.write(send_data[i]);
    }
}
————————————————

というカンジでポートをパタパタさせて、ボーレート設定通りに動いていればOKだ。