製作モジュール一覧

ラベル 100円ショップ流用 の投稿を表示しています。 すべての投稿を表示
ラベル 100円ショップ流用 の投稿を表示しています。 すべての投稿を表示

2016年7月15日金曜日

業務連絡

ATMega88V(150円@秋月)で音階を出せる工夫をしています。

3.3V駆動でもAVRで直接スピーカーを駆動するとAVRが死ぬようです。記憶に間違えがなければ音はでた。

100均のボリューム・アンプ(基板だけでも)に渡してからスピーカーに戻すとかしないとだめかも。

PWMなので3.3V駆動だと、AVRからの出力が3.3V(p-p)になるので、スピーカーが8Ωだと仮定すると、

3.3V / 8Ω = 412mA

も流れる計算になるのか(@@;

Github:
https://github.com/ryood/DAISO_piano/blob/master/PWM/PWM.c

2014年11月19日水曜日

万歩計液晶 その後

ご無沙汰しております、電磁です。

まずはRyoさんに重要で残念な伝達。

☆ 冬 コ ミ 落 ち ま し た ☆

嫁が受かったので冬は嫁の手伝いです。
 コスプレやりそうです。
 HUNTERxHUNTERのモラウさん(笑)
 画像ググるとこれなら俺でもできそうだなって思いますよ。

Ryoさんの電源がかなり進んでいる(デジタル系はほぼ完成)のに驚き。

ところで万歩計は何日前に書いた話か忘れてしまうくらい前の事ですが
間に色々ありました。

腎臓結石にかかって痛い思いをしました
attinyでVGAに表示するってーのに少しはまってました。

そして万歩計基板は幾つもつくりました。
これは小さい万歩計用。

プロトタイプ1、パターンのピッチを誤っていた。

ネジとパターンが干渉して実装できず。
 何に問題があったか忘れた。
 斜めパターンがショートする。
 細かすぎてショートする。


いろいろやったけど。
トナー溶融アイロンプリント法ではパターンが潰れてしまったり、ネジの締め付けができなくて接触不良だったり、ATtiny2313を実装すると筐体に干渉してダメだったり、抵抗がジャマだったり、試行錯誤の連続。


先週嫌になって下のような基板で先に進むこととしました。
左下の4信号はCommon端子です。
プルアップとプルダウンの抵抗をつけて(3V電源なら)ポートのハイインピーダンスにて1.5vを出そうという試み。


☆そして紆余曲折の後、万歩計液晶の制御方法は理解しました。 

 

今んとこ16bitカウンタの内容を16進表示しているだけ。
3Vで駆動します。

☆USIかUSARTで2バイト送る通信系をどっかでコピペすれば、最初に考えていたデバッガができるけど、問題はやはりAVRのチップを干渉させずに内部実装すること。

まず意外に手間がかかるのが基板の整形、とくに角をヤスリで整えたり、ネジ位置のRに合わせた穴あけ加工をしないとどうしても実装できない。

さらに万歩計筐体のネジ部が弱くて、2−3回付けはずしをするとネジの噛みがユルくなって端子を圧接できなくなってしまうという難点があるので、そう何度もカット&トライできない。

実装しなきゃならないのは抵抗8本と20pinのIC。それを片面基板でパターンに…ってとこに無理があるのやも。
 
かっちょわるいけど内蔵は諦めて基板を筐体外に伸ばすかなーなんて考えてます。

2014年10月14日火曜日

もう一種の万歩計も調査。

ダイソーにはもう一種類万歩計がある。



設計は古い(基板上には2010年とある)が構造はこちらのほうがきっちりしている。


ただ、リセットが長押しではなく、即効いてしまうので、カウンターとして制御するには、信号が一本多く必要となる。そのためtiny13のデバッグには採用しなかった。

しかし、液晶を完全に乗っ取るなら話は別。
この液晶、比較すると横に長く、数字はでかい、個人的見解ではちょっとダサい、良く云えば味がある。
基板側を見ると2.54mmピッチゆえ、ユニバーサル基板や、ブレッドボード上では使いやすいかもしれない。

ガイガーカウンタ実験時に購入しておいた奴をバラしてセロハンテープ作戦を決行した。

調査結果は以下のとおり、信号線は14本、4コモン10セグでした。
制御信号が2本多く必要でATtiny2313ではIOが残り4本になっちゃう、ってマイナスがあるけど、どの信号がどの液晶部を担当しているかという点においてはものすごく把握しやすいか。

一長一短ですね。




2014年10月12日日曜日

万歩計液晶調査

前から調べたかったのですが、時間がなかなか取れず、ようやく万歩計液晶の回路を調べました。

前にも書きましたが、小さくて無駄のない液晶ってなかなかないわけです。

☆調査方法ですがロジアナなんて持ってないからセロハンテープです。

液晶に接続されるパターンをセロハンテープでマスクして一旦組み全液晶表示して、状態を手で書き写す。それを一つづつ全部の信号に適用。
表示されない液晶が、マスクした信号線の担当箇所だよな(笑)という地味ーな作業。
謎のパターンがあり、これをGNDに落とすと全ての数字に8を出すスイッチとなることがわかってたので、こいつが利用できたわけです。


調査結果がこんなかんじです。5コモン7セグでした。



電圧はテキトーに3Vくらいで試してみます。(0V 1.5V 3V)
おそらくtiny2313を一個、フルに液晶表示専用に供すればいけそう。
12本の信号使ってもまだIOは6本あるので表示データもtiny13から送れそうだ
…ソフトでi2c実装するって手もあるか。


2014年9月29日月曜日

興味の矛先(万歩計液晶)

こんな無骨で、ソリッドで、コンパクトで、最低限度のギリギリの機能しか持たない液晶はないので、なんとかモノにしようと、こんなパターンの基板を作りました。(笑)
 I/Oが12本あれば…ってことはTiny2313でできるってことです。


コモンラインが何本あるかかな。
液晶は7セグメントが5文字分。つまり35箇所のスイッチングなわけです。
12本の信号なのですがどう割り振られているやら

2コモンですと最低18本の信号が要。
ステートコモンが3本で信号線9?3x9=27じゃ計算にあわないなー。


2014年9月21日日曜日

こんな激安実験パッケージ如何すか?


セリアや100円ローソンで売ってる108円アンプの基板を眺めてたら

…これ、基板、そのまま使うの良くねーか?っとおもいついたので
attiny13を駆動させる実験パッケージにしてみました。

 使ってるのは以下のモノです。
 1、セリアオーディオアンプ 108円
 2、ダイソー万歩計 108円
 3、ATtiny13 54円
 4、8pinICソケット 20円
  5、配線材少々

 300円弱のパッケージですね。

○108円アンプの加工。

単4が2本で3Vがとれ、スイッチボリュームがあり
入力用オーディオプラグケーブル、出力オーディオジャックがついております。




裏を開くとこんなです。
ハンダづけも微妙にアレですが、問題なくアンプとして駆動しております。
なぜかGNDに赤い配線という違和感。



電池の配線と、オーディオプラグ(後で使います)の配線をはずして基板だけ取り出します。
よくこれだけの部品を使いながら100円で売れますね。


こっから以下の部品を除去します。部品箱行きです。
 オペアンプ
 1Ω抵抗
  1kΩ抵抗(後で使います)
 10uF電解コンデンサ
 103セラミックコンデンサ
 104セラミックコンデンサ(1Ωの抵抗の近く)

取り外しにはハンダ吸い取り器を使いました。
自分は学生時代から部品とりはこれでやってます。
上手に使わないと基板のパターンを痛めますが。

基板上に残るのは
 スイッチボリューム
 220uF電解コンデンサ
 104セラミックコンデンサ(ボリュームの近く)
  オーディオジャック
の4部品です。


 オペアンプのついてたとこに
 ICソケットをつけ、
 取り外した1kΩの抵抗を、写真のようにナナメにつけます。



  さすがに思いつきのままには行かず、基板加工要でした。
  4箇所パターンカットします。 
 1、電源からICの2番ピン(OPアンプへの電源供給)パターン
 2、ICの6番ピン根元
 3、ICの3番ピンとオーディオジャックGNDを接続するパターン
 4、ICの1番ピンとオーディオジャックの上端子を接続するパターン    


  更に3箇所ジャンパします。
  1、GNDからオーディオジャックのGND端子
 2、VCCからICの8番ピンへ電源供給。
 3、ICの6番ピン根元からオーディオジャックの出力へ外部Out



 前回の「tiniy13デバッグ」とほぼ同じプログラムをtiny13に書き込みソケットにさします。
 (パルス出力をPB1に、ADコンバータ入力をADC2に変更、実は他にもいじったけど)
 



回路構成です。シンプルです。
IOポートはまだ3本空いています。センサやスイッチやLEDがつけられます。
PB0からボリュームへの電力供給してますがVccからにすれば
もう一本ポートがあけられます。(電池の消費は大になりますが)





○万歩計の加工

 取り外したオーディオプラグを、ダイソー万歩計内部のRESETスイッチに
 写真のように接続します。
 RESETスイッチの右側にはGND、左側に信号がくるように。
 また万歩計内の赤配線もRESETスイッチ左側に接続します。



  オーディオプラグをショートさせるとカウントアップされることをチェック。




  で、ふたつをつなぎます。当然、前のと同じ動きをします。
  何がいいかって、乾電池とスイッチですがな(笑)
 miso mosi reset sck gndを外に出してプログラム書き換えたいな。

  



○このパッケージの枠でなんか作りたいなと。


★ちなみにオーディオ出力に無理矢理PB1を使用したのはPB1がtiny13のPWM出力ゆえ。
 上手く使えばボリューム値=>tiny13で加工した音声信号がヘッドホンに出せるかもなわけです。

 可変要素は1つだけだが、Tinyぴこぴこが作れるか?



#include <avr/io.h>
#include <util/delay.h>

#define cbi(addr,bit)     addr &= ~(1<<bit)
#define sbi(addr,bit)     addr |=  (1<<bit)


void delayms(int ms) {
    int n;
    for(n = 0 ; n<ms ; n++)
        _delay_ms(1);
}

void pulseOut(int ms,int wait) {
    cbi(PORTB,1);
    //指定ミリ秒間出力0を維持
    delayms(ms);
    sbi(PORTB,1);
    delayms(wait);
}

//指定チャネルからADC値を8ビット取得
uint8_t getADC(uint8_t ch)
{
    ADCSRA |= _BV(ADEN);
    ADCSRA |= _BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0);
    sbi(ADMUX,ADLAR);//上位8bit
    ADMUX |= ch;//ADCchセット
    sbi(ADCSRA,ADIF);
    sbi(ADCSRA,ADSC);
    loop_until_bit_is_set(ADCSRA,ADIF);
    return ADCH;
}


int main(void)
{
    int rstwait = 400;//resetパルス幅
    int clkwidth = 2;//Sigパルス幅
    int clkwait = 10;//パルスの待ち時間
    uint8_t outvalue = 0;//万歩計への出力数値
    uint8_t innervalue = 0 ;

    int timepassed = 0 ;//だいたいの時間経過
    int timeth = 60 ;//強制resetをかける経過時間
   
    //AD変換可能なポートを入力に設定
    DDRB = ~0b00111100;
    PORTB = 0b00111100;
   
    //ポートB0(pin5)を出力に設定
    sbi(DDRB,0);
    cbi(PORTB,0);
    //ポートB1(pin6)を出力に設定
    sbi(DDRB,1);
    //万歩計に0.5秒間0を入れて初期リセット
    pulseOut(rstwait,clkwait);
    innervalue = 0 ;
   
    //メインループ
    while(1){
        //①ADC1(pin7)より電圧のAD変換値を取得。
        sbi(PORTB,0);//抵抗に電圧を与える
        _delay_ms(5);//安定するまでちょっと待つ
        outvalue = getADC(1);
        cbi(PORTB,0);

       
        if ( outvalue > innervalue ) {
            //②現在保持している値よりADC2の値が大きければ
            //1パルス入れカウントアップ
            pulseOut(clkwidth,clkwait);
            innervalue++ ;
        } else if (  outvalue < innervalue  || timepassed > timeth ) {
            //③逆に小さければ、万歩計をリセット。

            //時間経過で液晶がOffになるので適当にリセット入れる
            pulseOut(rstwait,clkwait);
            innervalue = 0 ;
            timepassed = 0 ;
        } else {
            //変化がない場合は0.1秒待つ
            _delay_ms(100);
            timepassed ++;
        }
    }
    return 0;
}