CoIDEは快適で、コネクターを一切いじらずに、テストまで一気に進める。デバッガーを抜けてスタート。画面に待望のグラフが出た!おやあ、これはグラフではなく、単なる散布図だ。それに、やけに画面表示が早い。タイマーが機能していないのか。オシロで画像表示のタイミングを調べる。何い150μsだとー、早すぎる(設定は2ms)。ARM(STM32F103)のタイマーにコンペアマッチのコードを入れたが、これが機能していないようだ。タイマーの問題はあとにするとして、この散布図状態は明らかにロジックミスだ。何とかしなければいけない。ソースコードを調べる。ここのミスはすぐわかった。保存すべき描画ポイントを間違えている。前の描画ポイントではなく、出すべきポイントを消している。それなのにどうして描画されるのだ?このあたりを追及しているヒマはない。間違っていることは確かなので、正しく描画の後にデータをセイブするロジックに変える。おおー一本線のグラフが出た。いや、何本も線が出る。夜中も2時近い、もう寝よう。表示が早すぎるのはタイマーを間違えているからで、これは時間を調整すれば良いのだが、問題は多重に出る線である。値が不安定になっていることを示している。データの第一バイトと第二バイトが正確に読めていない可能性が高い。寝る前に入った深夜の風呂の中で、また突然、原因に思いあたった。第一バイトと第二バイトをループを別にして読んでいるのだが、描画ルーチンが入ったことによって時間遅れが生じ、第二バイトを飛ばしてしまっているに違いない(第二バイトの読み込みにも時間条件をつけて離れていると無効にしている)。考えてみたら、第一バイトを読んだ後、第二バイトが来るまでここで待っていても全く問題ない。無理に非同期に動く必要は何もないのだ。描画ルーチンのタイミングによっては、第一バイトだけ読んで表示をする可能性もあり、ここは2バイトを読むまで動かない方が良い。風呂に入っていられなくなった。迷ったけれど、風呂から出てジャンバーを着込み、地下の工作ルームに降りてPCの電源を入れ直しCoIDEを立ち上げる。思い立ったら寝られない性質(たち)である。眠気は吹き飛んでいる。Whileを使って第二バイトを待ち、そのあと描画ルーチンに行くように制御を変えた。よし、グラフは一本線になった。描画タイミングが150μsと早すぎるので線はめまぐるしく動くが、少なくとも1本だけのグラフで動くようになった。少なくとも多重な線が出ることはない。時間を遅らせるのは明日にしよう。次の日、タイマーのデバッグに入る。ARMのタイマーについては、4年前の以前の記事を参考にしていたのだが、結局、このサンプルソースに誤りがあることがわかった(修正してあります)。プリスケールを決めるステートメントに重複があり、2番目のTIM_PrescalerConfig()は、無駄だったのだ。これを消去し、やっとタイマーは想定通りの時間で動き始めた。画像もそれらしいゆったりとした心電波形(らしきもの)を表示し始めた。苦労が多ければ多いほどこの喜びはなににもかえがたい。プローブを腕に巻き付けて心電波形が出るのを待ったが、穏やかな直線が続くだけで、一向に心電波形らしきものは出てこない。この状態は前にも経験がある。P-Pなのに4Vスケールで出しているからだ。この改修には少し時間がかかる。どの電圧範囲を広げるかを決めるのは簡単ではない。この前の記事からもう20日が経っているので、そろそろこのあたりでブログに報告することにする。心電計プロジェクト:スケールが出ると心電計らしくなる(2015.01.08)心電計プロジェクト:TFT液晶に念願の心電波形が出た(2014.12.18)心電計プロジェクト:STM32F103の心電波形表示で悪戦苦闘(2014.12.03)心電計プロジェクト:CooCoxでARMの表示系ソフトを開発する(2014.10.16)心電計プロジェクト:表示部のARM基板の開発環境を一新する(2014.09.19)コメントkeiさん、コメントありがとうございます。これなら2バイトだけで、十分識別ができそうです。昔から、「あまり、凝るなよ」と先輩から釘をさされていたところでもあり、(ソフトをわかりにくくするなという戒め)迷うところですね。今の方式で、この先不具合があれば、検討させていただきます。ありがとうございました。000xxxxxbとか。06時34分コメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。心電計プロジェクト:TFT液晶に念願の心電波形が出た。