2009年3月29日

Tiny2313書き込み用アダプタ 作成

ずいぶん間が開いてしまったが、
秋月で部品を補充して、
前回の設計した2313用アダプタを実装した。

コネクタ側

Tiny2313ソケット側


なかなか密な実装になったが、
ヒューズ情報、signatureも読み込めた。


Tiny26用実験ボードに乗せてみた感じ。

横から見ると、ICソケットがTiny26用ソケットの1~10ピンを
跨ぐように設置されているのがよくわかる



作成中に、気になった事が数点、

ピンソケットの切り分けタイプは、
手持ちのニッパーが安物のせいか、
高確率で樹脂部分が破損し使えなくなった。


写真中で、割れてピンの内部が確認できる。

アダプタの固定用に、動作確認用のピンに繋げようと思っていたが、
あまりの歩留まりの悪さに、今回は使用は見送った。


もう一つ、
緑のユニバーサル基板(紙フェノール基板と言う素材らしい)を
任意のサイズに切断したかったのだが、
金鋏で切断を試みるも、半ば以降で基板が割れてしまった。
幸い、10ピン分のランドは無事だったので、そのまま使用した。


Webで調べてみると、金鋸かプラカッター辺りが妥当らしい、
金鋸ならあったのに…切りクズの発生を嫌って、横着したのが仇になった。

そして、今回使用した。
秋月のICソケットだが、はんだ付けしないソケットにICを深くまで指すと、
ソケット側の金具が抜ける事があった。

ICソケットの足は全てはんだ付けした方が無難なのだろうか?
しかし今回は、使わない足は結線の関係上、切り落としてある。
いっそ、ソケットから金具を取り除くのも有りかもしれない。

そもそも、そこまで深くICを挿す必要がないか。

さてさて、高電圧書き込みのためのソフトをなんとかしなきゃ~

2009年3月11日

Tiny2313書き込み用アダプタ 設計

ATiny26用のマイコンボードにATiny2313を
無理矢理載せるためのアダプタだが、
どうも設計がうまくいかない。

ATiny26とATiny2313では、決定的にピン配列が異なるのだ。
ピンヘッダーとICソケット間で、素直にピン配置を変換しようとすると、
結線が交差しまくって、如何ともし難い状態になる。

むぅ、困ったもんだ。

だが、そこは考えて作られているモノだけのことはある。
ちょっと視点を変えれば、こんがらがった結線も、
ちゃんとシンプルに解決する方法があった。

ATiny2313を180度回転させればいいのだ!
これでピン変換が格段にシンプルになった。



そのピン変換と接続が上記図。

これなら、剥き身の銅線を使っても、結線が交差しないので、
問題なさそうだ。

と、ここで問題発生!

なんてことだ。
ピンヘッダのピンが、ICソケットに刺さらない!
たしかに太さが全く違う。

ど、どぎゃんしよう……

2009年3月10日

Tiny2313書き込み用アダプタ 準備

やってしまった。

不手際で、残りのTiny26を全て動作不能にしてしまった。
何とかして、Tiny26を復旧したい。

幸い、fouseを書き直せば復旧できそう、
RSTDISBLをやってしまった場合、
高電圧プログラミングが出来れば、復旧できる…らしい。

RESETピンに12Vを加えながら、何かをするらしいが、
何かの部分はTiny2313辺りで制御しながら何とかするそうな。

幸い手元にはTiny2313が数個あるので、
これを使って、高電圧プログラマ…というか、
高電圧フューズイニシャライザを作成したい。

そのためには、Tiny26用に作成されているマイコンボードで
Tiny2313を書き込める用にしなければならない。

幸い、20ピンのICソケットはまだ数個残っているので、
Tiny2313用にピン配置を変更するアダプタ様のモノを
でっち上げるだけで何とかなるだろう。

ただLEDを光らせるだけで、エライ遠回りだ…

2009年3月4日

ナイトライダー風LED作成 その2

マイコンボードの不良、ありました。
プログラムモードスイッチの、プログラム側と、実行側が逆でした。
と、いうわけで、基板上のマークを書き直して、
修正完了。

LED点滅テストプログラムを実行するも、やはり、PB7はHIになりっぱなし。

むー

そうすると、PB7のRESETの機能自体が悪さをしているのかしらん?
データシートをひっくり返すと、
ありました。

FOUSEのRSTDISBL。
これにフラグがたっていないと、入力も出力も無効にされるらしい。
おまけに、RESETはLOW活性、つまり、何もしない状態では、
常にHIを出力しているらしい。

なるほど、それで辻褄が合った。

では早速、FOUSEのRSTDISBLをチェックし、
書き込み!

そして実行。

テスタで電圧を測ると・・・
おぉ~、揺れている、PB7の出力電圧が揺れているではないか。
おっけー!

んじゃ、気を取り直して、ナイトライダー風LEDのプログラムを書き込んでみよう。

ん?


書き込めない。
というか、読み込めない。
なによりも、AVRISP mkIIのstate LEDがオレンジに点滅してる…
明らかに、やばそうな雰囲気…(汗
オレンジのてんめつは「コネクタの極性が間違ってるよ」らしいが、
ピンの位置は合っている。

と、いうことは…
RESETを無効化したのが、効いているのか!


やってしまった。
はい、破損マイコン一号の完成。   orz

数少ないTiny26チップを…
ということで、FOUSEをいじる場合は、十分気をつけよう。

残弾:2

2009年3月3日

ナイトライダー風LED作成 その1

ナイトライダー風LED点灯プログラムの作成だ。

使うマイコンボードは、先日作成した
簡易実験用マイコンボード。

今回は、PORTBのPB0~PB7までの8ピン使って
点滅表示させる。

欲を言えば、点灯後の残像もほしいところだが、
それはまた今度、とりあえず光点が8つのLEDの間を、
往復する事を確認する。

まっさらから、プログラムを組むのは、ちょっと面倒なので、
LED点灯テストに用いたプログラムを改造する。

ただし、projectは新規に起こす。

// ナイトライダー風LED点滅プログラム

#include <avr\io.h>

#define PB0_OUT 0x01 // ポートPB0を出力設定
#define PB1_OUT 0x02 // ポートPB1を出力設定
#define PB2_OUT 0x04 // ポートPB2を出力設定
#define PB3_OUT 0x08 // ポートPB3を出力設定
#define PB4_OUT 0x10 // ポートPB4を出力設定
#define PB5_OUT 0x20 // ポートPB5を出力設定
#define PB6_OUT 0x40 // ポートPB6を出力設定
#define PB7_OUT 0x80 // ポートPB7を出力設定

#define HI 0x01          // Hiにする。

void wait();

int main() 
{
    int pos = PB0;
    int l2r = 1;    // PB0→PB7:1 PB7→PB0:0
//    DDRB = PB0_OUT | PB1_OUT | PB2_OUT | PB3_OUT 
//         | PB4_OUT | PB5_OUT | PB6_OUT | PB7_OUT; 
    DDRB = 0xFF;
    
    while(1){
        
        if ( l2r == 1 ) {
            for ( ; pos <= PB7; pos++ ){
                // ポートPBposを点灯
                PORTB = HI << pos;
                wait();
            }
            l2r = 0;
            pos = PB7;
        } else {
            for ( ; pos >= PB0; pos-- ){
                // ポートPBposを点灯
                PORTB = HI << pos;
                wait();
            }
            l2r = 1;
            pos = PB0;
        }
    }

    return 0;
}

void wait()
{
    int i;
    for ( i = 0; i <= 20000; i++ ) {
        // nothing to do. 
        // wait loop
    }
}



このコードで動くかと思ったが、どうも上手くいかない。
PB7が常にHIになったまま、
その他のピンがHIにならない。

こういう時は初心に返るに限る。
LED点滅プログラムを改造して、全ピンを点滅するようにする。

// LED点滅テスト

#include <avr\io.h>

//#define PB0_OUT 0x01 // ポートPB0を出力設定
#define PB0_OUT 0xFF // ポートPB0~7を出力設定

//#define PB0_HI 0x01 // ポートPB0をHiにする。
#define PB0_HI 0xFF // ポートPB0をHiにする。

int main() 
{
    long i;

    DDRB = PB0_OUT; 

    while(1){
        for ( i = 0; i <= 20000; i++ ) {
            // nothing to do. 
            // wait loop
        }
        // ポートPB0を反転
        PORTB ^= PB0_HI;
    }

    return 0;
}


これも、PB0~PB6はピコピコと点滅信号を出しているが、
PB7だけが常にHI
PB7はRESETポートと兼用なので、ひょっとすると、マイコンボード側にミスがあるのかもしれない。
ちょうど、プログラムモード切替スイッチを付けたりして、複雑な形状をしているから、あり得ない話じゃない。

というわけで、ちょっとマイコンボードを再点検する必要がある。