2011年12月19日月曜日

8bit CPUからSDカードのFATへ書きたいんだけど

STMicroのマイコンボードSTM8S-DISCOVERYについては以前の記事で少し触れました.非力な8bit CPUでもC言語で書けば浮動小数点演算もできてしまうわけで、なかなかたいしたもんなので、ごにょごにょいじっているわたしです.その学習成果をこちらのページにupし始めてかれこれ1年以上経ちます.

それにしても今時のエレキホビーって参入障壁が高くてお気の毒ですね.

昔は、2石レフレックスラジオとかいって-----2石というのはトランジスタ2ヶ使いの意味-----ちんまりとラジオを作るぐらいで御満悦のトランス状態につれていってもらえたのですが、いまはマイコンボードを購入し、開発toolをDLし、開発toolの使い方を学び、Cを学び、ターゲットCPU固有の周辺回路や割り込みを学び、コンパイルして、ターゲットCPUに焼いて、ようやく動かせるんですから覚えるべきことが多くてたいへんです.

MP3の再生回路を作ろうとしたら、これにSD card interfaceとLCD表示もつけなくちゃいけない.DACがシリアルインターフェースだったりするとSPIかI2Cも学ばなくちゃいけない.FAT制御もできなくちゃいけない.....  ここまで出来たらもうプロレベルですね.

プロでもここまで網羅的に個人でやれる人は案外少ないものでして、実際、わたしもそんなことは仕事でもホビーでもやったことがなかったので、失業したので時間があるのでやってます.せっかく学んだのでネットに公開してます.

STM8S-DISCOVERYにUARTやLCDは取り付けたので、いまはSDカードを取り付けるべくごにゅごにゅやっています.512BYTE block read/writeはできたので、FAT16かFAT32を実装するべくネット上の情報を採取しているところですが、どこをどう参照してファイルデータにたどり着くのやらわからじ.もっとわかりやすく解説してくれよと思っちゃいました.

オレがやれって??


=== STMのアフィリエイト始めました ===
STM32のwelcome-kitです.試用レポはいずれ...
 

10 件のコメント:

  1. STM8S discovery データシートの解説を読みました。
    大変よく調べておられるので感心しました。
    これからもがんばって下さい。

    返信削除
  2. どうもです.今後もよろしく.今後もがんばりましゅw

    返信削除
  3. ADCのページをダウンロードしようとしたら繋がりませんでした。
    うちは僻地で1.5のADSL回線です。

    前に読んだ解説では1chか10chが載っていました。
    小生がしようとしているのは2chを交互に読んで
    アナログウオッチドッグ、をしようとしています。
    1chずつ交互に動作させるのか、1,2chの指定をして連続に動作できるのかが判っていません。

    返信削除
  4. ADCの使い方の記事が遅れていてすみません.Raisonance CコンパイラでADCを動かす方法をいま編集中です.昔の記事ですとCosmic Cコンパイラを使っていますので、今ビルドするのは難しいかもです.Cosmic版ではありますがEEPROMに補正値を保存できるバージョンがこちらのページからDLできるようです.いまDLできました.
    http://hrp.pa.land.to/ondo_logger/EEPROM-save.html

    返信削除
  5. そのサンプルプログラムでのADCの動かし方はこうなっています.ADC1_StartConversion()をコールすると、ADC0~9まで連続して一気に変換してSTM8Sのレジスタに変換データが格納されます.その後でADC1_GetBufferValue(i)関数でi=0~9の引数で任意のレジスタ値をゲットできます.わたしはこの使い方が便利だと思っています.では.

    返信削除
  6. 有り難うございます。ダウンロードできました。
    (これで何度でも読み返せます)

    さて、後出しみたいで恥ずかしいんですが、
    外部カウントに2bit、電流検出に2bit(ADC)モード設定に5BIT
    出力に4bit+状態表示1bitを使います。
    内部には比較テーブルを持っています。

    10ch通しでやるなら奇数偶数と分けて10BITを使って合計2bit相当ですが、
    1ch*2ですと2bitで済みそうに思いました。

    インダクタンスに流れる電流の制御をやっています。
    1つの方法にDACかPWMで基準電圧を作りそれとコンパレーとして
    電流を遮断しながら制御する方法と、
    ADCで電流を測りながら内部数値と比較して遮断するやり方です。
    比較値になったらデータが暴れるので検出を6uS休んでからADCをまた再開します。
    この間2chの検出は片方が休んでいてももう一方は働かせます。

    PICはコンパレータがあるのでそれを考えていたんですが、なかなか上手く行かなくて、
    (フルブリッジの場合インピーダンスが低いので、
    楽なんですが、うちのコイルはフルブリッジに向いていません)
    それで
    STM8のADCでやる方法が良さそうと思っています。
    (秋にSTM8S105K4B6を注文したつもりだったんですが抜けていたようで、ディスカバリーで検証してから移植を考えます)

    何をすればよいというのは判ってもプログラムにするのにちんぷんかんぷんで、これからも勉強をしなけらば追いつけません。

    返信削除
  7. やりたいことはなんとなく判りました.STM8SのTIM1にPWM機能がありまして、モーター回転数制御にはPWM機能を使うことが多いと思います.電流制御も同じようなものと考えて、PWM機能でやれるかもしれません.まぁどこをどうやってfeedback loopを形成するかはあれこれ考えなくちゃいけませんが.では.

    返信削除
  8. 大部の間PWMとモーター電流は比例関係にあると信じて、試行錯誤を繰り返していましたが、フルブリッジでない(インピーダンスが低くない場合)OFFステートを持つ回路の場合は実際に電流が流れ出すのは50%付近からになります。
    これでは困るので実際の電流を測定しながらの動作を実現しようと思いました。
    (つまり2CHのfeedback loopが必需なんです)

    また時々伺います。(ではまた)

    返信削除
  9. Raisonance C で Cosmic C ソースをコンパイルすると
    エラーになりました。
    main の頭に voidoを付けて 
    レジスタ宣言が二重になってると言うので
    コメントアウトすると通りました。

    ADCにたどり着くまでの道矩はまだ遠いようです。

    返信削除
  10. 今夜、Raisonance CコンパイラによるADCソースコードをupする予定です.

    返信削除