平成-令和またぎのGW 前半

    平成最後の日になりました。
    昭和最後の日は大学一年の冬、一人暮らしをしていた下宿先で迎えました。
    30年以上たっていまは単身赴任先と自宅を往復する日々ですが、当時は今日のこと、今の家族、生活のことなど知る由もなく、ただぼんやりとTVのニュースを見ていました。

    こんな感じで始まった平成ですが、その平成最後のGWは雑多な用事を消化しながら進行しています。
    なんとも不思議な感じです。


    GW初日となった土曜日は別宅で少しだけお仕事をしていました。
    終わってから近所のピザとパスタのお店「モンスターファクトリー」で昼飯。サラダとピザ、デザート、ドリンクバー付きで900円。
    美味しかったのでリピート決定です。
    IMG_20190427_141654.jpg

    ビンに入っているのがデザートの飲むプリン?的なもの。名前を知らないのですがこれも美味しかったです。
    IMG_20190427_143140.jpg

    昼飯食べてから自宅に移動。
    28日の日曜日は下側が腐ってきていたガレージのドアの修理をしていました。
    ずいぶん前から気になっていたのをようやく手当をしたのですが、思ったより腐食がひどく、結構な範囲をつぎはぎすることになってしまいました。
    色塗りはまた今度です。
    IMG_20190428_123617.jpg

    IMG_20190428_174201.jpg

    29日はウチの実家に帰省。
    普段なら片道2時間半ほどかかるのですが、車も少なくスイスイで快適ドライブでした。
    おかげさまで両親は、まあ、相変わらずでした。でも歳をとったかな。


    今日、30日は自室を片付けたりTVを見たり。
    午前中に近所のコンビニで新聞を買ってきました。

    IMG_20190430_142235.jpg

    Japan Newsって読売新聞なんですね。
    写真は一番良い感じですね。
    各紙いろいろで面白い。


    いろいろな人にとって、それぞれいろいろな平成だったことでしょう。
    自分にとってもいろいろありましたが、まあ、悪くはなかったかな。
    昭和の終わりに乗り出したバイクには今も乗っているし。

    「平成」さんお疲れさまでした。


    とりあえずこんな感じということで。

    週末いろいろ

    たまには更新しないとまた塩漬けブログになってしまいそうなので、この辺りで新しい記事を投稿します。


    ◆4月13日(土)

    KSRで筑波山を再訪してみました。
    朝から用事を2つこなして昼前から出発。

    とりあえず県道42号線で経由でつつじヶ丘の駐車場まで移動。
    IMG_20190413_125702.jpg

    KSRにこの時以来6年ぶりにリアキャリが付きましたw
    DIY塗装ですが、3m離れてみればきれいなものです。満足度高し。


    ここから風返し峠の交差点まで戻ります。
    交差点は5差路になっているのですが、登って来た道(=県道42号線)と降りてきた道以外の3方向はすべて終日二輪車通行止めになっていました。
    結局、地図でクネクネ道に見えるところはしっかり通行規制が掛かっており、前回と同じ道をたどって帰ってきたというオチでした。
    行っても行かなくてもどうでもよかった感じです。
    筑波山愛好家の皆さんには申し訳ないですが、やっぱり筑波山はもういいかな。

    途中、農道っぽいところに入ってみると何かの花が満開でした。
    IMG_20190413_131456.jpg


    ◆4月14日(日)

    サクラダファミリアかJR横浜駅かというくらい終わりの見えないKSR用のCDIのプログラムを作成。

    前回までのバージョンはCDIの本体にプッシュスイッチを実装して、スイッチの操作で点火時期の設定をする仕様でした。
    今回、パソコンからUSB経由で設定値を書き込めるようにバージョンアップ中なのです。
    当然、PC側のアプリケーションを作らないといけないのですが、そんなの作ったこともなく…
    去年の秋からC#のお勉強から始めていました。
    超初心者向けと初心者向けの2冊の参考書を買って、あとはインターネッツの検索とコピー&ペーストで↓ここまで来ました。

    CDI.png

    WindowsPCとHIDデバイスとしてプログラムしたPIC24FとUSBで接続できるようになっています。
    点火時期の設定値もPCから変更できるところまで辿り着きました。
    やれやれ、と思ったらまたもや問題発覚。


    ◆4月19日(金)

    この日は働き方改革とやらの事業所全体の休日に指定されており、お休み。
    出掛けたい衝動に駆られるも、CDIのプログラムのデバックに費やしました。

    問題になっていたのはPIC24F側のプログラム。
    PCから送信した設定値がFlashメモリに書き込めていない問題の対策を考えていました。
    CDI用として使用しているPIC24FはEEPROMが無くて点火時期のデータはFLASHメモリに保存する必要があります。

    前回バージョンでは先人のお方の知恵をお借りして目的の機能を実現できていたのが、今回はうまくいかんというモード。
    前回との相違は将来の3Dマップ制御導入に向けて、設定値のデータ数を増やしたことのようです。

    PC側のプログラムとPIC側のプログラムのどちらが原因かの切り分けから始めたのですが、PIC側に問題ありとなるまでにほぼ1日かかってしまいしました。
    何しろ基本コピペプログラマーなのでなかなかすんなりいきません。



    ◆4月20日(土) ~ 4月21日(日)

    引き続きPIC24Fのプログラムを追っかけてました。日曜日の午後、ようやく何とかなったようです。

    ↓こんな感じでヘッダファイルに書きます。
    -------------------------------------------------------------------------
    /*****************************************
    PIC24F フラッシュメモリ
    ・フラッシュメモリ1ページは512命令分、1命令は3バイト  よって、1ページは1536バイト
    ・消去はページ単位
    ・書き込み64命令((196バイト)=8行)単位
    ・1ページ書くのに512/64で8回書き込み操作を行う必要がある

    点火時期テーブル
    ・テーブルのサイズは17x6x4で408バイト
     →3回書く必要ある?
    ・1命令24ビット(3バイト)幅で下位2バイト分だけアクセスできる
     →全部理解できていないかも  
    *****************************************/

    #define FLASH_PAGE 512
    #define PH_TBL_LINE 17       //点火タイミングテーブル要素数 回転数:17 0-16000rpm、1000rpmステップ
    #define PH_TBL_CUL 6       //点火タイミングテーブル要素数 負荷 :6  0-100%、20%ステップ(拡張用)
    #define PH_TBL_SIZE 408      //PH_TBL_LINE:17 x PH_TBL_CUL:6 * 4(PIC24F double型のサイズ)
    #define PAGE_LENGTH FLASH_PAGE*2 //FLASHページサイズ 512*2
    #define PAGE_ADDR 0x4000     //FLASHページ開始アドレス(プログラム領域)


    typedef union{ //点火時期計算用変数、共用体
    double ig_phase[PH_TBL_LINE][PH_TBL_CUL];
    char padding[PAGE_LENGTH];

    } FLASH_DATA;

    extern FLASH_DATA flash_tbl;   //FLASHメモリにアクセスする変数
    extern FLASH_DATA ram_tbl;    //プログラムで使用する変数

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


    ↓ソースファイルで宣言して初期化します。
    前回バージョン要素数17の1次元配列でしたが、今回は17x6の2次元配列になっているのが書き込みできない原因でした。
    -------------------------------------------------------------------------
    /*****************************************
    // 点火時期計算用変数
    // double変数:4byte x 17行 x 6列 → 408byte 0x184
    //  共用体の定義はsystem.h -> ここで初期化する
    //  "section"で指定した名前で領域を確保する
    //  PAGE_ADDR 0x4000から1ページ分(512命令分))確保する
    // 
    *****************************************/
    FLASH_DATA flash_tbl __attribute__ ((section(".flashdata"),space(prog), address(PAGE_ADDR)))
    ={{{10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    {10.0,30.0,30.0,30.0,30.0,30.0},
    }}; //FLASHメモリ格納変数、初期値

    FLASH_DATA ram_tbl; //プログラムで使用する変数
    -------------------------------------------------------------------------

    PCからram_tblを書き換え、その値をfrash_tblに書き込む関数です。
    はじめは128バイト分しか書き込めませんでした。
    その対策版のコードが↓。
    -------------------------------------------------------------------------
    void writeConfigIntoFlashRow() {

    //フラッシュメモリ1ページは512命令*3バイト=1536バイト
    //3byte,24bit幅のため1536バイトとなるが、
    //書き込みできるのは2byte,16bitこれで512命令分は1024バイトとなる?
    //正しいかは?
    //17x6x4=408バイト分であればsize=512でも書き込み可能。
    int size=1024;

    //ram_tbl変数の先頭アドレス
    int *source = (int*)&ram_tbl;

    _prog_addressT p; // get address in program space
    _init_prog_address(p, flash_tbl); // フラッシュメモリのテーブルの先頭アドレス(=0x4000)
    _erase_flash(p); // erase a page

    while(size>0)
    {

    _write_flash16(p, source); // write first row with 16-bit data


    //1回書き込むごとに128バイト(1行、64命令、2バイト/命令)を書き込む
    //Flash_tbl[0][0]-[5][1]まで128バイト
    size -= 128;

    //1回書き込むごとにフラッシュメモリの書き込み先のアドレスを128シフトする
    p += 128;

    //一回書き込むごとにram_tblのアドレスを64シフトする
    //ここが?128ではないのか?
    //souceをint型のポイントで宣言しているから?
    // →libpic30.hのヘルパー関数の定義がintで定義されているから?
    source += 64;

    }
    -------------------------------------------------------------------------
    フラッシュメモリに1行単位で書き込むプログラムなんだけど、前回バージョンでは
    _erase_flash(p); の後に _write_flash16(p, source); を1回だけ実行するコードになっていた。
    ので、128バイト分しか書き込まなかった模様。

    そこでwhile以下のコードを追加して、1ページ分書くようにしたら無事に全データが更新されるようになった。
    だだし、自分の理解及びコメントに書いた内容が合っているかは自信なし。
    人に説明しろと言われても無理です。

    いいのか?いいんです。
    MPLAB SIMでメモリの内容みても書けているようだし。
    何よりも所詮コピペプログラマーなのでプライドはありません。



    やっぱりちゃんと腰をすえてじっくりやらないとこういうのは解決できませんね。
    兎に角、これでUSB版CDIのプログラムの骨格ができた感じです。
    何よりもPC側のプログラムが進んだことがうれしい。
    少しは先が見えたかな。


    とりあえずこんな感じということで。






    楽しいお出掛け

    土曜日の話。
    月末、年度末のイベントもひと段落、雨の心配もなさそうだったのでV11で出掛けてきました。

    どこ行くか迷いましたが久し振りということで伊豆に決定。
    朝、7時過ぎに出発しました。

    半日とか1日とかの単位でちゃんと走るのは去年の年末以来です。
    前回同様西湘のPAで休憩。
    IMG_20190406_085429.jpg

    前回は年末で寒い&雨という気象条件でバイクはほぼゼロでしたが、この日はたくさん。
    バイク乗りも高齢化が進んでいると言われて久しいですが、この日は若者男子に混ざって若いおねーさんもチラホラ見受けられました。
    良きことですな。自分には関係ないですけどね。

    箱根新道に入って芦ノ湖のICで降りてからターンパイクの短い方を走って伊豆スカイラインを目指します。
    ターンパイクはバイクの通行料金が110円でした・・・が、いつから?
    まったく、何年走ってないんだか?(笑)


    亀石。
    IMG_20190406_102124.jpg

    冷川ICで降りて県道59号線。
    ここも超久々でしたが、ほぼ記憶のままでした。相変わらず道は悪い。でも楽しい。
    IMG_20190406_122148.jpg


    西伊豆スカイラインから続く道とぶつかるところ。
    IMG_20190406_123935.jpg
    IMG_20190406_123634.jpg

    空はちょっと白っぽくかすんでいましたが、雲なし、風なし、バイクも車もほぼゼロで最高です。
    いいなぁ。楽しいなぁ。
    やっぱりバイクはこうでないとね。
    もう、毎日走っていたい。


    この後、交差点を左折して松崎を目指しました。
    途中、桜をバックに写真撮って、
    IMG_20190406_130456.jpg

    昼飯は民芸茶房さん。旨いっす。
    IMG_20190406_133445.jpg

    昼飯食べたので帰ります。
    R136で海沿いを北上、途中道が新しくなっていたりしてちょっと迷いながら修善寺の駅前を通って県道12号線で冷川ICまで戻ります。
    亀石まで1区間だけ走って、宇佐美から海沿い走って帰ることにしました。

    本日2度目の亀石で最後の休憩。
    IMG_20190406_160027.jpg

    帰りは、まあ、いつも通りですね。
    西湘BPの終点から少し渋滞していましたが特に変わったこともなく帰宅。
    走行距離は343㎞でした。
    IMG_20190406_191437.jpg

    久しぶりだし天気は最高。おまけにバイクも絶好調で言うこと無しでしたわ。
    また走ろう。


    とりあえずこんな感じということで。