PICAXEのRAMを使う

    PICAXE
    09 /19 2016
    すみませんがし失敗記事です。

    PICAXE(PIC)には当たり前だがRAMがある。
    これに演算結果等を入れておけば変数が少ないというPICAXEの弱点から逃げられる。 ただ、変数を介して出し入れ(poke peek)しないと演算出来ないので一手間はかかる。
     
    PICAXEのマニュアルにRAMは上級者向けの機能とある。
    実はPICのRAMの構造が面倒なのである。
    ・128バイトが何バンクかある。
    ・128バイトが全て使える訳でなく一部、特殊機能レジスタとして割り付けられている。
    ・バンクを切り替える操作が必要。 (peeksfrpokesfr
    ・これらはPICの英文マニュアル読んで理解する必要がある。
    と、ハードルが高いのである。 もう、完全にPICの領域です。
     やる気があればPICの英文マニュアルを読んでPICAXEの命令のpeeksfr、pokesfrでFSRレジスタを操作してバンク切り替えしてRAMを使えるということ。 おまけにPICAXEのBASICが一部のバンクを使うのだがその情報もない。
     
    ここまで分かった時点であまりに面倒で急速にやる気をなくした...
    が、バンク切り替えをしなければpeek、pokeだけなので面倒ではない。
    パワーオンのリセットのままでバンク切り替えはしないということ。
    これでできるのか試してみることにする。
     
    08M2+、14M2、18M2+で使われているPICのRAM 1バンクの構造は下図のようになっている。
    PICAXE_RAM01.png
    まず、先頭の28バイト(1Bh)分はPICAXEのマニュアルに変数として使うとされている部分。
    変数b0~27に値1~27を入れると下図のように入る。(16進表示)
    PICAXE_RAM02.png
     
    次のGeneral Purpose(汎用) RAMが純粋にメモリーバンクとして使える部分。
    ここに書いてみると...ダメ。 00のまま。
    変数に読みだすと合っているのでどこかには書かれているようだがPICAXEの動作に影響しそうなので諦める。
     
    最後のCommon(共有) RAMはメモリーバンクを切り替えても変わらない部分である。 つまり、バンク切り替えが必要ないはずなので期待できる。
    少ないがM2の変数が28バイトなので16バイトでも結構助かる。
    が...ここでFTDIのUSB-シリアル変換ケーブルの調子が悪くなり確認できませんでした。

    以下は変換ケーブルの具合の説明です。
    PICAXEのアプリで仮想COMが見えるのだがオープンできないのである。
    変換ケーブルが壊れたのかと思ったが、ドライバーを消して変換ケーブルを挿すとネットからドライバーを探してインストールするし、デバイスマネージャー上は正常に動作しているのでどうもそうではなさそう。
     
    実はこの記事は8月上旬に始めたのがWindows 10 Anniversary Updateの後辺りからおかしくなった。
    断続的にいろいろやったがダメで、今月のWindows  Updateでも改善されなかったのであきらめて記事にまとめた次第です。
    その後、調べてみるとドライバーの仮想COM番号を変えようとすると使っている人(アプリ)があるのに本当に変えますか?みたいなメッセージがでる。 干渉しているようである。 ノートPCにはメーカーのいろんなソフトが入っているので厄介です。
     
    でも、そもそもFTDIのドライバーは変換ケーブルを挿すとマウスが3秒程使えなくなるので以前から怪しげなんですよ。 昔FTDIのチップを使ったマウスがあったせいではないかと想像しています。 参りましたorz

     →原因が分かりました。

    追記
    変換ケーブルの問題が解決したので続きのCommon RAMをやってみたがダメでした。
    PICAXE_RAM04.png
    番地70hに03と書き込んでいるのだが見えない。
    読み出して変数b27(1Bh)に入れると見えるのでどこかには書かれている。
     
    変数領域の0、1番地に1、2とは書けるので書き方は間違っていないようです。
     なお、前のメモリーダンプの図は変数に入力したものでした。

    という訳で、簡単にはRAMを使えないという残念な結果でした。
     そもそもどこのメモリーバンクが見えているのか分からないというのも問題。(汗)
    追記終わり。

    以上
    関連記事

    コメント

    非公開コメント

    PICAXE始めました

    こんにちは&初めまして。
    秋月が「信越」であった時代から秋葉原通いと電子工作を続けてきたものです。秋月がPICAXEの取り扱いを始めたころに物珍しさから購入した08M2が手付かずのまま引き出しに眠っていましたので、引っ張り出してきて二次電池の放電ロガーを作ってみました。今さらながらですが、なかなか使い勝手の良いコントローラだと感心しました。電流も測定して放電電流容量もログできるようにしたり、データをSDカードに記録できるようにしたりして、手持ちのNiMH電池、リチウムイオン電池の生セルの容量をすべて測定しました。電池の性能がクリアに分かるのはとても有用です。おかげで中国ブランドのリチウムイオン電池の大半を処分する決心がつきました。
    PICAXEを使うと欲しいと思ったガジェットをとてもお手軽に作れるので、ますます電子工作に取り組む元気が出てきます。参考にさせていただいた貴殿の記事に大変感謝しています。
    以上、まずはご挨拶とお礼まで。

    Re:PICAXE始めました

    Koizumi 様
    初めまして。

    秋月は「信越」だったみたいですね。知りませんでした。
    私は亜土電子が分かるくらいの秋葉原経験です。(何の自慢?)
    最近は遠くなった(行く根性が無くなった)ので行っていませんが。

    PICAXEの記事がお役に立ったようで良かったです。
    PICAXEはアイディアがあると直ぐに実現できるのがいいですね。
    ただ、直ぐ壁にもぶち当たりますが...

    今後ともよろしくお願い致します。

    Re:PICAXE始めました

    こちらこそよろしくお願いします。
    ところで私のコメントの中のSDカードへの書き込み方法に疑問を持たれたかと思いますが、OpenLog V4(githubに作成に必要な資料あり)というモジュールの互換品をユニバーサル基板を用いて作成して使っています。Arduino、AVR、PIC等の開発環境においてもメーカー提供やユーザー作成のライブラリが色々あるのですが、開発環境の更新・変更の際に使用できなくなってしまう危惧があります。SDカード書き込みの機能を別モジュールにしておけば安心です。OpenLog V4はFAT32対応ですし、シリアルデータを送り込むだけでファイルができますので扱いがとても簡単で気に入っています。手配線で4つも作ってしまいました。部品代は一個あたり600円位でしょうか?こいつにPICAXEのシリアル出力を繋ぐというパターンで色々なことができそうです。

    Re:PICAXE始めました

    確かにSDカードの件はチョット引っかかったのですが、何かいいコントローラーがあるのかなと思っていました。
    ご説明頂いた内容は私の疎い分野なので調べてみました。
    自作には色々な知識とAVRライターが必要そうですね。
    私には無理そうで市販品を買った方が話が速そうです。
    https://www.switch-science.com/catalog/2716/

    Re:PICAXE始めました

    しつこくて済みません。このモジュールを作るのは意外と簡単だと思いますよ。
    ArduinoのLチカ実現までの経験&環境があれば作れます。
    このモジュールは端的に言って以下のようなものです。
    ・ハードウェアはArduino UnoにLEDと抵抗各1個とSDカードスロットを追加しただけのもの。3.3V動作なのでSDカード接続用の分圧抵抗すら必要ない。(私自身はATmega328を買ってきてArduinoのブートローダーを書き込むところから始めていますが)
    ・ファームウェアはArduino Uno用の専用スケッチを書き込めば出来上がり。
    ・外付け16MHzクロックにもかかわらず3.3Vで動作させている点が唯一気にかかる点。

    小生もやはりブログを開設して説明すべきかなぁ??

    ところで話は変わりますが、今回作成した放電ロガーでは65536秒までのtime(elapsed time counter)の制限の問題を時間カウント用に変数を一つ使ってクリアしています。ご存知だとおもいますが、PICAXEのマニュアルの記述に従ってdisabletime、time = 0、enabletimeという一連のコマンドで3600秒毎にtimeをクリアし、時間カウント用の変数をインクリメントしています。また、電池挿入後の放電開始時にもtimeをゼロクリアしています。動作は今のところ問題ないようです。

    Re:PICAXE始めました

    ・詳しく書いて頂きましたが、Arduinoはやっておらず当面やる予定もありません。
    ・ブログは開設してみてはいかがでしょう。
     私のブログのコメントは月10名位しか見ないので折角の内容がもったいないです。
    ・タイマーをクリアするのはとりあえず必要ないのでやっておりません。

    Re:PICAXE始めました

    ブログの件、やってみようという気になってきました。
    過去の製作物が沢山あるのですが、それらについての情報は写真、回路図、プログラム、Word文書として整理しておりますので、マイペースで整理して載せていけばよいのかな、と考えています。(ブログの特徴の一つである、コンカレント性は薄れますが)
    また、ブログサービスとしてはFC2の無料ブログに開設しようかなと考えていますが、どうですかね。
    同じ趣味を持つ訪問者と情報共有をすることが目的なのでそれ以外の特別なこだわりはありません。
    運用開始の際にはお知らせします。よろしくお願いいたします。

    Re:PICAXE始めました

    各種ブログは一長一短でFC2ブログはまあ普通だと思います。
    商用利用できるのが特徴だったと思います。
    1か月新しい記事がないと下の方に広告が出るがプレッシャー?ですが...
    始められたらお知らせください。

    Re:PICAXE始めました

    こんばんは。
    やっと初ブログ開始です。操作を覚えるのにとても時間がかかりました。
    また記事はたったの一件だけです。かなりのスローペースになると思いますが、少しずつコンテンツを増やしていきたいと思います。よろしくお願いいたします。

    Re:PICAXE始めました

    こんばんは。
    ブログ開設おめでとうございます。
    最初は覚えることが多くて大変ですよね。
    旅の記事も書かれる予定なのですね。
    チョクチョク拝見させて頂きたいと思います

    Re:PICAXE始めました

    こんにちは。
    ブログにPICAXE関連の新しい記事を掲載しました。
    記事の内容にFriendship7さんのブログ、記事へのリンクを貼っております。
    何分ブログ初心者ですので無作法があるかも知れません。
    お手数ですが、一度訪問して頂いて問題があればお知らせください。
    よろしくお願いいたします。

    Re:PICAXE始めました

    こんばんは。
    立派なケースに入れられて凄いですね。 仕上げも丁寧で私とは大違いです。(汗)
    リンク有難うございます。 私の記事へのリンクは問題ありません。
    リンクといえば記事へのリンクはリンクフリーなのトップページだけなのか許可制なのかできれば書いておいた方が良いのではないでしょうか。
    リンクフリーなら気軽にリンクしてもらえるので私はそう書いています。

    それとここに書くのは難だし余計なお世話なのですがオリジナルから回路を多少いじっておられるので、ADCで私が注意した点を書いておきます。(ご存知の上でなら勿論構いません。)
    ・PICの場合、ADC入力に繋ぐ信号源の出力インピーダンスは誤差が少なくなるように10kΩ以下と規定されています。
     電源電圧が低い程下げる必要があり、私は4.7kΩ程以下にしています。
     これについてはgomisaiさんがブログ「ねがてぃぶろぐ」でシミュレーションされています。
      http://gomisai.blog75.fc2.com/blog-entry-71.html
    ・私がADCの入力に保護ダイオードを入れていないのは逆リーク電流が少なくきちんと高温まで規定されたもの(pAダイオード)が簡単には入手できないためです。
     小信号高速スイッチング・ダイオードを使っても1uA~数百nAあり信号源インピーダンス10kΩ程度で数mV~数十mV程度の誤差がでるのではないかと思います。
     まあ、電池の電圧測定程度ではさして問題はないと思いますが。
     入力に4.7kΩと高い抵抗を直列に入れているのはADC入力のダイオードに期待してです。

    Re:PICAXE始めました

    実はFriendship7さんのオリジナルの回路やプログラムの取り扱い(引用の仕方)が一番不安でしたが、受け入れてくださって本当に有り難うございます。
    またリンク可否の宣言の件やPICのADC入力の件などアドバイス有難うございました。電源を入れる前に電池を接続したら回路が傷むかも、という考えでダイオードを入れたのですが、考えが浅かったです。

    ところでこの記事は今朝削除しました。というは当初配線抵抗やら抵抗の誤差等が気になって直截に1Ω(選別するのが難しいが)の両端で電圧を計り電流を算出すればいいではないかという気持ちで仕様を考えましたが、その後、手持ちのすべての二次電池(25本)を測定して改めてデータを眺めたところ、危惧したような事象の影響はほとんどないことが分かりました。そこでせっかくですからこのやり方をもう少し生かすように回路を修正したいと思いました。具体的には測定時間を適当にできるようにパネルに負荷抵抗切り替えスイッチを付けたり、負荷抵抗の一部をラグ端子へのはんだ付けですが、容易に変更できるようにします(プログラムの変更はありません)。
    修正が終わりましたら再度記事を載せたいと思います。
    今後ともよろしくお願いいたします。

    Friendship 7

    浅く広くのハード屋です。
    コメントへの返信には過大な期待をしないで下さい。 非公開コメントは停止しております。 不適切なコメントはFC2で自動的にはじかれます。
    リンクフリーですが盗作は禁止です。
    本ブログの内容を参考にされる場合はあくまで自己責任でお願い致します。