データロガー  

                                           vega  2007.12.18〜
                                          改定 2008.1 .3   
                                          改定 2012.6 .9   

     いかがでしょうか、一家に一台データロガー!!

【データロガー】

      マイコン(AVR)を使用した、自作データロガーです。 
      SDカードに記録するので測定にパソコンが不要です。電池で長時間動かすことも可能です。
      SDカードをパソコン接続し、データを取り込みができます。Excelを使用しグラフにすることも簡単です。

      6チャンネルの電圧データが記録できます。 SDカードに記録するので長時間の記録が出来ます。
      温度の記録、測定器の記録など、さまざまな用途に使用できます。

      SDカードの部分はこれをベースにしました。  
      https://ss1.xrea.com/vega.s58.xrea.com/astro/mirror/avr-sdcard/avr-sdcard.htm
      SDカードのアクセスはすでに出来ていたので、データの蓄積の部分(ソフト)を作りました。

      SDカードアクセスのは、chanさん作成のシステムを流用しています。
      http://elm-chan.org/fsw/ff/00index_j.html

      回路図  https://ss1.xrea.com/vega.s58.xrea.com/astro/mirror/avr-sdcard/logger.gif   Ver1.0

      回路図  https://ss1.xrea.com/vega.s58.xrea.com/astro/mirror/avr-sdcard/logger2.gif  Ver2.0
               SDカードソケット
                 9,10ピンは使用してないので配線の省略可能。
                 1,2ピンで電源制御は実質してないので、電源つなぎっ放しでも問題ない。 
               シリアルポートは、パソコンでモニターしなければ、省略可能。
               AD変換の基準電圧は、外から供給するよりマイコンの電源を使用する方が良い。 





    機能など

          @  AD変換の測定チャンネル 最大6チャンネル
          A ロギング(測定)の周期 10ms単位で指定  最大9999秒 最小不明
          B 測定結果のファイル(ファイル番号のようなもの)は、最大100個
             log00.txt 〜log99.txt   マイコンリセットの度にサイクリックに使用 
          C ファイルは、FATの形式でFAT12又はFAT16(FAT32には対応していません)

          D 動作条件は、ファイルで指定(config.txt)
            ここをパソコンで書き換えれば、動作条件を変更できる
          E ロギング間隔(100ms単位)は、config.txtにより微調整(校正)可能
             実績として、10秒間隔の記録で5時間動作して、4秒以内の誤差
 

       config.txtの設定内容
          @ ログファイルのスタート番号
          A  ログ間隔  10ms単位で 9999.99sec まで 
          A  測定チャンネル数
          C  シリアルポートのデータ出力有無 (パソコンで動作確認) 

       消費電流は不明(測定してない)
       SDカードの書き込みは、1回のロギング毎にファイルの後始末(ファイルクローズ)しますから、いきなりの電源断でも
       データが残る確立大です。
     
       欠点  
          @ クロックは、内臓8MhzのCR発振器を使用し、しかもロガーの単位は100msは、近似値を使用しています。
             絶対的な精度は期待できません。
          A 記録の間隔が1秒以下の短い間隔の測定は、考慮していません。
             ソフトをその為に改造すれば、それなりに効果があると思います。

       ファームのダウンロード
            logger1  2008.01.2 まだエラー処理がいい加減です。 0ch が記録されません。

            logger2  2008.01.3 まだエラー処理がいい加減です。 0ch 記録OK。
           


ヒューズは、こうなっています。
 
C:\combin>avrsp -pb4 -rf -w
Detected device is ATmega168.

 Low: 11100010
    ||||++++-- CKSEL[3:0] Clock source selection
    ||++-- SUT[1:0] Startup time
    |+-- CKOUT (0:Output system clock on the CLKO pin)
    +-- CKDIV8 Clock division ratio (1:1/1, 0:1/8)

 High:11-11111
    |||||+++-- BODLEVEL[2:0] (111:Disabled, 110:1.8V, 101:2.7V, 100:4.3V)
    ||||+-- EESAVE (Retain EEPROM at chip erase 1:No, 0:Yes)
    |||+-- WDTON (1:WDT normal, 0:WDT always on)
    ||+-- SPIEN (1:Disable ISP, 0:Enable ISP) *Available only in Parallel mode
    |+-- DWEN (On-Chip debugging via RESET pin 1:Disable, 0:Enable)
    +-- RSTDISBL (RESET pin 1:Enable, 0:Disable(PC6))

 Ext: -----001
       ||+-- BOOTRST *Refer to data sheet
       ++-- BOOTSZ[1:0] *Refer to data sheet

Cal: 142
 
HIDaspx + ihidspx-GUI での 読み出し結果です。

  Lo : E2
  Hi :  DF
  Ex : F9
 


        

  基板に電源と、外部からAD変換の基準電圧のコードを接続します。

黄色と白のクリップ(?)で電圧を測定したいところへ接続します。

写真で差し込んであるのは、16MBのSDカード。

  これはニッケル水素電池を放電したときの電池

の電圧です。

2秒毎に測定しています。Excelで加工しています。

 

 ロギングしたデータは、SDカードにこのような形でデータが格納されます。 デジタル値そのまま記録しています。
 左端は開始からの時刻で、hh:mm:ss (時分秒)の形式です。 

 AD変換は、64回の平均で求めています。
 デジタル値は、0〜1023 までの値になります。実際の電圧に変換する場合は、基準電圧(vref)が、1023に対応します。
 1023以下は、比例関係より計算します。 AD変換した値がdの場合
 測定値 = Vrtf * d/1023  で求めます。

-------------------------------------------------------------------------------------------------------------

シリアルポートには、測定値が出力されるのでパソコンでモニターできます。 
測定値の後の /op= 0 /wr= 0 が出ていればSDカードの書き込みが上手く行っています。


 

    

       基板製造

         SDカードソケットの回りは、少し細かい半田付けの必要があります。
         プロテクトSWや挿入有無のSW、電源制御を使用しなければ配線が大分減ります。
         又 UPしたファームは、内部の8Mhzを使用していますが、精度を上げたい場合は、外部の水晶発振子を
         使用すれば、精度が上がります。 もちろんソース変更が必要です。
         SDカードのソケットは、秋月電子で購入(¥150)可能。
         データロガー専用にする場合は、ソケットを基板に直付けしたほうが良いと重います。

       ファームウエア

          Atmega168ならばファームをそのま使用できますが、他のもの(H8、SH2、AVRのその他)を使用する
          場合は、chanさんのサンプルをベースにコンバートすれば、可能と思います。 
   
        使い方   

         a) フォーマットしたSDカードを挿し電源を入れる、config.txt(ロガーの設定データ)は自動的に生成され
           5秒毎に6chのデータが記録がされる。

           LEDの動作
             @ 正常動作
                電源を入れると、LED2が1秒間程度点滅した後、消灯する。
                このタイミングで、LED3は、LED2の点滅時には、点灯(点滅ではない)し、その後消灯する。 

               ロギング時は、LED2、LED3が5秒毎(初期状態では)にフラッシュする。
               LED2とLED3のフラッシュのタイミングは、LED2の後一瞬送れてLED3がフラッシュする。

             A 異常動作例(SDカード実装しない場合)
                電源を入れると、LED2は、点滅も点灯もしない。
                LED3は、点灯したまま。

           SDカードのフォーマットは、専用のがあるので再フォーマットする場合はそれを使用した方が
           良い。          http://panasonic.jp/support/audio/sd/download/sd_formatter.html  
            
           大事なデータが入ったSDカードは、使用しないほうが安全と思います。

           シリアルポートからも、SDカードが記録されるデータと同じ内容が出力されるのでパソコン等でモニターできる。

         b) フラシュしないタイミングでSDカードを抜き、パソコンで読んでみる、

           2個のファイルが作成されいるはず。(中身も)
             config.txt     (設定データ)
             log01.txt      (ロギングしたデータ)   

         c) config.txt を 変更すれば ch数や ロギング周期を変更できる。
         
            初期状態はこのようになっている
            01 000500 YYYYYY Y 0005
        @ A   B  C  D
        
        @ 次回起動時に使用するファイル(番号)
         ここの二桁(xx)がlogxx.txt に対応する。 起動するたびに数字が大きくなり
         99の次は00になる。
         logxx.txt が存在しない場合は作成され、存在する場合は、前の内容が消滅する。

        A 測定周期  10ms単位の数字6桁
          ここを微調整すれば、周期の校正ができる。
          誤差は、パソコンでシリアルポート(COMポート)で表示させるれば分かる。
          実際の時間より遅れる場合は、数字を小さくし、進む場合は大きくする。

          たとえば、001000 として、1時間で30秒進んでいる場合は、
          1000*30/3600=8.33 であるから  001000 を 001008とすれば良い。

          実例として10秒周期で 001014で誤差が最小になった。ここ場合Dは、0010 とする。
          当然チップの個体により異なり、温度によっても変わる。
         
        B 測定するチャンネル番号を選択する。左端は5チャンネルで、右端は0チャンネル。
          Y(大文字)することでそのチャンネルが測定され記録される。
          たとえば、 YYnnnY とすれば、5ch、4ch、0ch が記録される。

        C ここをYとすれば、SDカードに記録する内容が、シリアルポートに出力される。
          Y以外にすれば、無駄が省かれ測定周期1秒以下の場合に有効かも。

        D 表示上の記録周期   4桁で秒単位
          Aと同じ(校正時は少し異なるが)にする。 


  今後直すとしたら

      @ クリスタル発振子を使い、時計の精度を上げる。
      A  記録方式を変え、短い測定周期を可能にする。