ライブラリを整理する

■先日入手したARMモジュールSTBee-mini。IDEもなく、エディタでコーディングして、GCCでコンパイルするだけの環境。SPIやUSARTのインターフェースまわりを使いたいのだけど、データシートだけでは今ひとつ解らない。おおまかな手順はわかるのだけど、適切なシーケンスが今ひとつ解らない。そこは手っ取り早くサンプルソースを探した。もちろん、探せば出てくるものだ。

 USARTでよく解らなかったのはIOピンのモード設定とペリフェラル選択、USARTのモード設定まわり。とりあえずDMA転送はせずに、単純な1文字送受信から。参考にしたのはWikimuraの「STM32でUSARTを使ってみる‎」。
 SPIについても資料の整備は進められているようでしたが、現時点では詳細がわからず、こちらはまた別途探すことになりました。

 USARTはPCとの通信用に必要で、SPIはセンサ類との通信に必要です。ターゲットにしているのは温度センサのLM74。このセンサはAVRで遊んでいた時も使っていて、どういうプログラムモジュールを用意する必要があるのかも解っている。とにかくまずはSPI。WikimuraにSPIモジュールを使う際の注意書きなどはあるけれどコードサンプルが無いので、なにやら茫漠としたまま他をあたる。
 探してみると組み込み系の開発会社である(株)テクノロードの掲示板にSPI.zipというSTマイクロからの提供ソースへのリンクがあることを見つけてどうにか。

 LM74はSPIのスレーブだけど、データソースなので、SPIマスタであるSTBee-Mini側ではダミーで0x0000を送信することでクロックだけ起こしてLM74からデータを貰います。CS(チップセレクタ)の制御はソフトウェアでSPIとは独立して制御しました。そして、これらのタイミング確認はオシロスコープで。前回掲示した画像がその時の波形。

LM74からのデータ受信はできたのですが、ここでさらに加工が必要。LM74は正負サイン付12ビットで、計13ビットのデータを16ビットデータに押し込んで返してくる。なので、受信した後、後ろ3ビットをカットして、それから2進バイナリを2進化10進(BCD)形式に変換する。
 2進からBCDへの変換は、引き算の塊になります。3桁BCDであれば、変換対象の数値から100を繰り返し引いて、次に10を繰り返し引いて、と各桁の値を出していく。意外とこのサンプルが見つからなかった。要領としては次のようになります。実装のやり方は他にもいろいろあると思います。

u32  basedec[7] = {1000000,
                   100000, 
                   10000, 
                   1000, 
                   100, 
                   10, 
                   1};
char bcd[8] ;
void bin2bcd(u32 *src){
  u8 n;
  u8 i;
  u32 wk;
  u32 cls;
  
  wk = *src;
  
  for(i=0;i<7;i++){
    bcd[i] = 9;
    cls = basedec[i];
    for(n=0;n<10;n++){
      if(wk >= cls) {
        wk -= cls;
      } else {
        bcd[i] = n;
        break;
      }
    }
  }
  bcd[7] = 0;
}

 LM74の受信データ加工ではあと1つ注意がいるのは、データが0.0625刻みだということです。なので、BCDに変換する前に0.0625倍しなければなりません。ただ、小数点を扱おうとすると、BCDでは難しくなり、浮動小数点ライブラリが必要になってくるので、単純に625倍しました。つまり、STM32内部ではLM74のデータを1000倍した値としてBCD化するわけです。小数点以下は失われますが、表示する時に適切な桁で小数点を表示すれば済む話です。
 従って、LM74のデータを8で割り、625倍します(負数の処理はまた別として)。面白かったのは1つの式の中で8で割り、625倍すると誤差が出たことです。コンパイラ内部で割って掛けるか、掛けてから割るかの違いだと思うのですが、数式ではx=625*y/8で、内部処理でどちらを先にしても変わってはならないのですが、そうはなっていません。たぶん、最適化の処理でx=y*(625/8)とされてしまい、丸め誤差が出たためではないかと推測しています。
 そのため、まずy=y/8としてから625倍したところ、適切に処理されるようになりました。このあたりのコンパイラのクセも、仕事ではちょっとやってられないところですが、ホビーということもあって、ちょっと面白いところです。

Copyright (C) 2008-2015 Satosh Saitou. All rights reserved.
戻る
日記::一覧展開
2016.06
卒検突破 (2016.06.26)
急制動 (2016.06.05)
坂道発進 (2016.06.04)
2016.05
スラローム (2016.05.29)
一本橋 (2016.05.28)
半クラ (2016.05.22)
2015.12
2015.11
2015.08
2015.07
2015.06
2015.05
EF50mm F1.8 STM (2015.05.24)
Private Private (2015.05.17)
NTPを整備する (2015.05.02)
2015.04
2015.03
2015.02
潮つ路 (2015.02.22)
未見の星座展 (2015.02.07)
2015.01
PSYCO-PASS劇場版 (2015.01.18)
2014.12
DOMANI/シェル (2014.12.20)
PHPでDMC (2014.12.13)
jouornald (2014.12.07)
2014.11
五木田智央展 (2014.11.08)
2014.10
山口勝弘展 (2014.10.26)
コンタクト (2014.10.18)
ケース加工 (2014.10.11)
山形旅行で (2014.10.04)
2014.09
聖地巡礼 (2014.09.27)
SIAF 2014(3) (2014.09.20)
SIAF 2014(2) (2014.09.14)
SIAF 2014 (2014.09.13)
RaspberryPi B+ (2014.09.06)
2014.08
ヴァロットン (2014.08.09)
GODZILLA(2014) (2014.08.03)
絵画の在りか (2014.08.02)
2014.07
クロニクル1995 (2014.07.26)
SDHCカード集め (2014.07.20)
SDカード再び (2014.07.05)
2014.06
2014.05
駆動系の整備 (2014.05.25)
無限の可能性 (2014.05.24)
PIOON (2014.05.17)
2014.04
大洗 (2014.04.19)
2014.03
唯美主義 (2014.03.09)
写真の境界 (2014.03.02)
2014.02
星を賣る店 (2014.02.15)
日常/オフレコ (2014.02.01)
2014.01
ISCP (2014.01.11)
DOMANI/シェル賞 (2014.01.04)
2013.12
ターナー展 (2013.12.14)
2013.11
反重力 (2013.11.02)
2013.10
木の器 (2013.10.20)
2013.09
ヒステリシス (2013.09.28)
LOVE展 (2013.09.08)
宙色 (2013.09.07)
2013.08
3/4だった (2013.08.17)
福田美蘭展 (2013.08.11)
2013.07
Fedora19 (2013.07.20)
2013.06
Google Cloud Print (2013.06.30)
未来の記憶 (2013.06.16)
梅佳代展 (2013.06.15)
片岡珠子展 (2013.06.09)
椿会展 (2013.06.08)
空想の建物 (2013.06.02)
wiringPi (2013.06.01)
2013.05
2013.04
箱詰め終わる (2013.04.13)
母-娘、姉-妹 (2013.04.06)
2013.03
卒展めぐり (2013.03.30)
恵比寿映像祭 (2013.03.16)
XBeeで接続する (2013.03.10)
Fedora18 (2013.03.09)
Black (2013.03.03)
2013.02
Backupその後 (2013.02.24)
Backup (2013.02.17)
音と光 (2013.02.03)
実験工房 (2013.02.02)
2013.01
いろはにほう (2013.01.26)
燻製を作る (2013.01.19)
2012.12
外装に収める (2012.12.23)
MU (2012.12.22)
スモーク (2012.12.01)
2012.11
Whirl (2012.11.25)
MOTアニュアル (2012.11.18)
2012.10
MPL1151A1 (2012.10.07)
2012.09
(2012.09.16)
夢の光 (2012.09.08)
光のアート (2012.09.01)
2012.08
東京湾大回り (2012.08.26)
2012.07
.hack//VERSUS (2012.07.22)
具体展 (2012.07.21)
国吉康雄展 (2012.07.15)
2012.06
2012.05
DHT11 (2012.05.12)
2012.04
PHPでIPCを行う (2012.04.22)
DHCPを立てる (2012.04.14)
DNSを立てる (2012.04.08)
2012.03
IPv6を追加する (2012.03.17)
MTUを調整する (2012.03.11)
2012.02
ICO再び (2012.02.26)
Viewpoint (2012.02.25)
恵比寿・2 (2012.02.19)
イ・ブル展 (2012.02.18)
恵比寿・1 (2012.02.11)
2012.01
星霜 (2012.01.01)
2011.12
2011.11
美女採取 (2011.11.27)
アサーション (2011.11.20)
日常/ワケあり (2011.11.12)
XB24-BとXB24-ZB (2011.11.06)
2011.10
家電入れ替え (2011.10.23)
2011.09
湿度センサ (2011.09.25)
銀座線ライン (2011.09.17)
竜宮美術旅館 (2011.09.11)
2011.08
しろきもりへ (2011.08.27)
2011.07
免許更新 (2011.07.31)
2011.06
京橋、新橋 (2011.06.26)
シンセシス (2011.06.18)
撤収の準備 (2011.06.04)
2011.05
風穴 (2011.05.15)
PLATFORM (2011.05.14)
2011.04
水・火・大地 (2011.04.17)
2011.03
パーティクル (2011.03.19)
恵比寿映像祭 (2011.03.12)
カナリア (2011.03.06)
2011.02
『ソルト』 (2011.02.19)
豊島美術館 (2011.02.13)
2011.01
藝大先端2011 (2011.01.23)
幽体の知覚 (2011.01.01)
2010.12
PWMで赤外線 (2010.12.26)
2010.11
『水辺にて』 (2010.11.06)
2010.10
アショカの森 (2010.10.30)
補遺の庭 (2010.10.24)
2010.09
シッケテル展 (2010.09.26)
音を鳴らす (2010.09.12)
2010.08
ハーフ (2010.08.21)
発電所美術館 (2010.08.01)
2010.07
2010.06
『未来医師』 (2010.06.13)
会田誠巡り (2010.06.12)
2010.05
桑原漁港 (2010.05.16)
欲望のコード (2010.05.15)
『第9地区』 (2010.05.02)
2010.04
春の海 (2010.04.18)
春の錦帯橋 (2010.04.17)
『機龍警察』 (2010.04.11)
2010.03
虹ヶ浜 (2010.03.28)
菊川湖再び (2010.03.14)
『虐殺器官』 (2010.03.13)
梶取岬 (2010.03.07)
絵画の庭@NMAO (2010.03.06)
2010.02
湯野温泉 (2010.02.06)
2010.01
2009.12
菅野ダム行 (2009.12.20)
2009.11
neoneo展 part2 (2009.11.29)
2009.10
広島ノ顔@HMOCA (2009.10.18)
末武川ダム (2009.10.10)
2009.09
吉宝丸@広島 (2009.09.20)
2009.08
2009.07
下松 (2009.07.12)
T4 (2009.07.05)
2009.06
仙台 (2009.06.07)
蕪島 (2009.06.06)
2009.05
2009.03
2009.02
2009.01
2008.12
神津佐仮説 (2008.12.21)
AVR HTTPサーバ (2008.12.20)
風景るるる (2008.12.14)
2008.11
南志摩・宿浦 (2008.11.22)
志摩あたり (2008.11.01)
2008.10
『剣の名誉』 (2008.10.18)
2008.09
石内都 (2008.09.06)
2008.08
宮島・厳島 (2008.08.30)
精神の呼吸 (2008.08.24)
西国行き (2008.08.23)
ICMP Echo応答 (2008.08.16)
MACフレーム (2008.08.03)
2008.07
小さな世界 (2008.07.26)
早送り (2008.07.20)
屋上庭園・他 (2008.07.13)
夢みる世界 (2008.07.12)
2008.06
古都の残像 (2008.06.01)
2008.05
北陸行 (2008.05.30)
ないまぜ (2008.05.24)
SDカード再び (2008.05.11)
GPSロケーター (2008.05.04)
2008.04
2008.03
音が小さい (2008.03.30)
STILL/MOTION (2008.03.22)
IAMAS2008 (2008.03.16)
80.7MHz/81.3MHz (2008.03.09)
橋頭堡 (2008.03.01)
2008.02
1998.11
作成:2010.11.28
公開:2010.12.12

Valid XHTML 1.1

loading image reserved place