楽天市場
[無料でホームページを作成] [通報・削除依頼]

ご質問などはこちらからどうぞ

ご質問などございましたら、こちらにお願いいたします。
名前
題名
コメント
画像
対応形式:JPEG, GIF, PNG 4MBまで
画像サイズを選択
URL
削除キー
コード入力
表示されているひらがなを入力してください
認証コード

Re:PIC16F18857のcal/return命令につい

bequest333 2021年2月16日 17時13分


GOさんこんにちわ

PICを習得するためにはBANKの概念だけではなくPAGEの概念の理解も必要です。

PIC16F87Xのマニュアルには以下のように記載されていますが、これはF1についてもあてはまります。

2.4 プログラムメモリページング
PIC16F87X デバイスは継続した 8K ワードブロックのプログラムメモリをアドレス指定できます。
CALL および GOTO 命令には 11 ビットのアドレス指定ができます。
この 11 ビットのアドレス範囲によって、2K のプログラムメモリのページサイズ内での分岐ができます。
CALL または GOTO 命令を実行するときは、上位 2ビットのアドレスは PCLATH<4:3> からプログラムカウンタへロードされます。
CALL または GOTO 命令の前に、ページ選択ビットを設定して、分岐先のページをアドレス指定するようにします。
CALL 命令(または割り込み)が実行されたとき、13 ビットのプログラムカウンタがスタックにプッシュします。
したがって、リターン命令(スタックからアドレスをポップする)ときは、PCLATH<4:3> ビットの操作は不必要です。

>電源投入後、先にi2cのプログラムを読みに行きます。
とのことですが、サブルーチンコールに先立ちページの指定を行う必要があります。
>その後、アドレス0457のサブルーチンタイマーをcallするのですが。
とのことですが、ここでもサブルーチンコールに先立ちページの指定を行う必要があります。


例)
pagesel i2c
call i2c
pagesel subroutine-timer
call subroutine-timer
(現在PCLATHはpage0を示している)

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

call方法

GOさん 2021年2月17日 17時23分

たいへんお世話になります。
bequest333様・例題大変ありがとう御座いました。
トライしてみます。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

PIC16F18857のcal/return命令について

GOさん 2021年2月16日 11時34分

前回より873A からのプログラム移植中なのですが、
プログラム中call命令で移動しようとすると想定外の場所に移動するのですが、f1シリーズでは旧タイプのICと同じ考えでは移動しないのでしょうか?
プログラム領域は次の通りです。
main/サブルーチンは0~07f0迄
0800~0E66迄 ここにはI2Cプログラムが入れてあります。
電源投入後、先にi2cのプログラムを読みに行きます。
その後、アドレス0457のサブルーチンタイマーをcallするのですが、ここへも移動できない状況です。
但しcallでは指定場所にたどり着かないが、lcallの疑似命令だとたどり着くが命令数が大きくなり、現状での利用は容量上きびしい。


返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

16F18857スタックレベルについて

GOさん 2021年1月20日 12時56分

たいへんお世話になります。
説明が後手になりましたが、F1シリーズ・MPLAB Xについては初めて使うのですが、(今まではIDEだけで操作していました。8**系しか使っていなかった為)
添付の画像のスタックレベルで同じラインナンバーが並んでいるのは何故なのでしょうか?
またリセット後は、スタック0ですが、1行だけプログラムを進めると、スタックレベルが15に移動しますが、この動きもよくわからないので教えて下さい。
よろしくお願い申し上げます。
*動きは添付参照

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:16F18857スタックレベルについて

Bequest333 2021年1月20日 18時42分

GOさんご質問ありがとうございます。

アプリの挙動についてのご質問ですが、
私が作成、あるいは携わったアプリに関するご質問であればお答えできますが、
その他のアプリの挙動についてお答えする術を持ち合わせておりません。悪しからずご了承ください。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:16f18857スタックレベルについて

Bequest333 2021年1月18日 20時01分

Goさん質問どうもありがとうございました。

PIC16F873Aのスタックは8段、F1シリーズのスタックは16段ですので、873Aのプログラムを忠実に移植することが出来れば問題は発生しません。

スタックがオーバーフローする原因としては、

1.CALL命令(またはCALLW命令、割り込み)とRETURN命令(またはRETLW命令、RETIE命令)の回数アンマッチによるプログラム暴走

2.プログラム中でスタック値を変更したことによるプログラム暴走

3.その他のプログラム暴走

が考えられますが、IDEのシミュレータを用いてサブルーチンコールの前後でスタック段数が変わっていないか、戻り値が変わっていないかを確認する必要があります。(ネストの少ないものから)


>スタックレベルを見るとプログラムをスタートさせる前から既にスタックレベル15迄の所まで表示されます。

いいえこれで合っています。PDFファイルの3.0 MEMORY ORGANIZATIONのTABLE 3-14の表でSTKPTRの
リセット時の初期値を確認してください。リセット時はb0~b3まで"1"が立っています。

PICのスタックが16段で循環していることを理解しなければいけません。CALL命令が実行されると
次の命令のアドレス(戻り値)を保存するのですが、保存に先立ちSTKPTRの内容をインクリメントします。 STKPTRは循環しているので、内容は 15+1=16 ->0 となります。

"PICで電大版TINYBASIC 実装編その3"のページの最後にF1シリーズのハードウエアスタックの図を載せていますので合わせてお読みください。

大事なことはSTKPTR初期値は何であれ循環バッファーにより16段のスタックが保証されていることです。


返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

スタックについて

GOさん 2021年1月19日 11時52分

ごれんらくたいへんありがとうごうざいます。
確認してみます。
ただ、873Aのプログラムは製品化されており市場でも問題は出ていないのですが・・・。
*添付したスタック表示欄でFinish Debugger Sessionをクリックしても消えない事が判りました。
アプリを一端閉じ、再起動させないと書き換わらないようです。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

16f18857スタックレベルについて

GOさん 2021年1月18日 10時16分

16f18857スタックレベルについて画像 Bequest333さんたいへんお世話になります。
F1シリーズではスタックレベルが増えたとWEB上のHPに記載があり、以前アセンブラーで書いた16F873AソフトをそのままF1シリーズに移植している最中ですが、同じアセンブラーで動かそうとすると何故かスタックレベル3(プログラム内のcall回数確認にて)でオーバーフローしてしまいます。
(873Aの時にはスタックをフルに使っていて動かしておりました。)
IDEXのスタックレベルを見るとプログラムをスタートさせる前から既にスタックレベル15迄の所まで表示されます。
アセンブラーでのスタック操作を行い、回避する方法は有るのでしょうか?
xIDEバージョン5.35;チップリビジョンのバージョンA2
それともxIDEの不具合なんでしょうか??
よろしくお願い申し上げます。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:16f18857のRA7出力について

Bequest333 2020年12月31日 4時10分

Goさん質問どうもありがとうございました。


PIC16F18857のデータシートのpdfに基づいて説明します。

①PA7の機能 (TABLE 2参照)

RA7 デジタルI/Oポート
ANA7 ADコンバータ(入力)
OSC1 水晶入力
CLKIN 外部発振器入力
IOCA7 ビン変化割込み(入力)


➁RA7をデジタル出力ポートとして設定するには

0.RA7にPPSの割りつけをしない。

1.PICを内部クロックで作動させる。--> CONFIGレジスタの設定で内部クロックを選択、セカンドオシレーター禁止

上記設定によりOSC1とCLKINが無効となる。

2.ピン変化割込みを使用する場合は、IOCA7の設定を除外する。

3.ANSELAレジスタの第7ビットをクリアしてPA7へのアナログ入力を禁止する。

ANSELAレジスタはバンク62に存在する (TABLE 3-11参照)

4,TRISAレジスタの第7ビットをクリアしてPA7を出力に設定する。

TRISAレジスタはバンク0に存在する (TABLE 3-3参照)

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

p16f18857のポート設定について

Goさん 2020年12月31日 19時16分

たいへんお世話になります。
原因がわかりました。
当方の資料が初版で、延々と確認しておりました。
最新版を(Rev,E板)に記載がありました。
CONFIG1のbit2のみ「1」にしないとI/Oとして利用できないと事が判りました。
(どうもRA6は普通にI/Oとして動くのに変だなーと悩んでおりました。)
大変ありがとうございました。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

16f18857のRA7出力について

Goさん 2020年12月30日 20時57分

初めてご連絡致します。
現在デバック中で不明点が有り、ご連絡致しました。
RA7のビットを出力に設定しているのですが、オシロで確認するよ入力状態同じ様な状況です。
(mplabx i/oビューで確認しても変化無し)
初期Aポート設定は次の通りです
ANSEL=03h;TIRSA=1fh
他に、このチップは設定する箇所が有るのでしょうか?
以上サポートの程よろしくお願い申し上げます。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:PICKIT2での書込み方法について

bequest333 2018年1月29日 17時42分

たけさん、初めまして。
ご質問いただきどうもありがとうございます。

>PIC16(L)F183XX Memory Programming Specificationを参考にデバイスID等を変更しましたが、
>こちらに載っているシリーズであれば書込み方法は共通と思ってよろしいでしょうか?

基本的にそのとおりですが、PDFをよく読んで、デバイス毎に異なる点についてはデバイスファイルに
正しく記述する必要があります。

例えばConfigMaskの値など。

また、MicrochipのPDFは誤記が多いのでなるべくエラッタのPDFも確認することをお勧めします。
一時、デバイスIDが誤記ばかりで、大変難儀したことがあります。

<スクリプトを新たに作成する必要がある場合>
また新たな書き込み方式に変更されるとは考えにくいのですが、書き込み方式やコマンドが変更された場合
現状の書き込み方式を踏襲していても、ConfigやEEPROMのアドレスが変更された場会
Configレジスターの数が変更されたり、メモリの電気的特性が変更された場合。

<16F18857での問題点>

現在、デバイスIDを並べ替えてから入力していますが、勝手に逆順にしたためIDがダブる可能性があります。
私の実力不足が原因ですが、誰か腕の立つかたにフォローしていただけるとありがたいです。

<PICKIT2の今後>

PK2のコマンドに目をとおしてみましたが、PIC16は。使えるコマンドが少なく、PICKIT2でもっとも制約の多いデバイスです。この制約がある中で最新のデバイスの書き込みが行えましたので、上位のPICでもまだまだがんばれると私は考えています。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:PICKIT2での書込み方法について

たけ 2018年1月30日 10時36分

返答ありがとうございます。

その後、PIC16F18324の書込みに成功し動作も確認しました。
他の18XXXも使いたいので、取り寄せて確認してみます。

アドバイスありがとうございます。

PICKIT2がまだまだ使えると良いですね。
MPLABXやIPEでの書込みがもっと使いやすければいいのですが、PICKIT2での書込みの楽さに慣れているとなかなか移行が難しいです。
たくさんのPICに書込みたい場合、みなさん何で書込んでいるのでしょうか?

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

PICKIT2での書込み方法について

たけ 2018年1月29日 13時30分

初めまして。

PICKIT2でPIC16F18XXXシリーズに書込む方法を探していました。
大変貴重な情報ありがとうございます。

以前PICkit2 Device File Editorで対応PICを増やせるまでは分かっていたのですが、
書込み方法が従来と違うということであきらめておりました。

PIC16F18313を参考にPIC16F18324の読み込みまで出来ました。
質問なのですが、PIC16F183XX(ピン数違い、容量違い)であれば書込み方法は共通でしょうか?

PIC16(L)F183XX Memory Programming Specification
を参考にデバイスID等を変更しましたが、こちらに載っているシリーズであれば書込み方法は
共通と思ってよろしいでしょうか?

よろしければ教えてください。

p.s 今までPICKIT2で対応出来る古いPICを使用していましたが、新しいPICの選択肢が増えそうで嬉しく思っています。





返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

AVRアセンブラの使い方

老技師 2017年7月28日 2時30分

当方AT90S2313でAVRを使い始めたばかりなのですが、
ATV Studio4の使い方がよくわからず苦労しております。
PICのアセンブラで使うGOTO $をAVRでRJMP 00(直値)を入れる方法をしりませんか?
NOP*2を1命令にする為です。
AVRは命令実行時間が速いので、ウエイトを稼ぐサブルーチンが大きくなってしまいます。
Tiny系は容量も少ないので重宝するのですが、
今はデバッグ時NOP*2を書いて、デバッグ後に”.ds 0x00,0xc0”にしています。
条件アセンブルすればよいだけなのでしょうが、テクニックがあれば参考にしたいと思います。
それにしてもAVRの命令は良く出来ていますね。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:AVRアセンブラの使い方

bequest333 2017年8月2日 10時46分

老技師さま、ご質問どうもありがとうございます。

PICの$に相当するAVRの擬似命令はPCになります。

たとえばプログラムをホールトさせたい場合
PICでは"goto $" と記載しますが、AVRでは"RJMP PC"と記載します。

2WAITのNOPの場合は、"RJMP PC+1"と記載します。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

REREベースラインをXC8で使う

老技師 2016年10月12日 3時13分

Bequest333様ご指導ありがとうございました。Lチカ参考にさせていただきました。
お陰様でやりたいことが出来ましたが、思いのほかステップを食って10F200には向きませんでした。
次はソフトウェアスタックを実験したいと思います。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

ベースラインをXC8で使う

老技師 2016年10月10日 7時19分

TRIS GPIOやOPTION命令をどのように表現すればいいのでしょう。
ベースラインではFSR割付ではなく専用命令なんですよね。
10F200はピン数が少ないので1本で入出力兼用の実験中です。
よろしければお付き合い下さい。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:ベースラインをXC8で使う

bequest333 2016年10月10日 23時19分

ご質問どうもありがとうございます。

XC8は使っていないのでアドバイスできませんが、以下のページで12F509を用いたLEDブリンキングのサンプルプログラムが掲載されています。

https://gist.github.com/jitomesky/6989014

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:LPC810でUSB

bequest333 2015年10月15日 5時32分

Bunchan747様、ご質問どうもありがとうございます。

ご指摘の症状はクロックが12MHzから微妙に外れているときに発生します。

前の質問者SSKさんのレポートを基にソース上でクロックを補正できるように改良したものを
続LPC810でUSBのページにアップしましたのでご利用ください。

(IRC_Adjustの数値を減算または加算)

通信テストの前にDTR/RTSの出力を確認するのが早道です。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

LPC810でUSB

bunchan747 2015年10月16日 10時42分

早速のご回答感謝します。
継続してテストしての結果、一部は動作確認ができました。
DTR_RTSは動作していて、テストアプリでの設定が反映されます
別の
232cモジュールに繋いでみたら、送信は正しく届いていましたが
受信はとりこぼしているようです。9600-57800までは
良くて、その上は文字化けしてます
コンパイルは環境を構築して試して見ます
ありがとうございました。



削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

LPC810でUSB

Bunchan747 2015年10月14日 21時55分

初めましてBunchan747と申します。
貴重な資料を公開してくださり、大変勉強になります。
LPC810でUSBを参考に回路を組みました。
hexを書き込んでテストをしました。
認識はできています。HID入力装置として。
また、ループバックテストのPGでも、デバイスが認識されていると出ます。
バッファをかまして、テストしてもNGでした。
他のUSB-TTLモジュールとTXとRXをクロスしてみても、なにもかえってきません。
試しに、LPC810-USBのTXにLEDを接続してみたところ、LEDが点灯しました。
何か問題があるのか情報がありましたら、ご教授願います。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:LPC810でUSBの動作についてアドバイス

bequest333 2015年9月27日 19時19分

ssk様ご質問ありがとうございます。 ご質問に回答します。

もしかしてUSB3.0を御使用ではありませんか?
http://www.floatingfragmentz.org/archives/4810
このページなどに記載されていますが、USB3.0の端口とUSB1.1のデバイスは相性が悪いようです。

別のパソコンでも動作確認されることをまずお勧めします。


USB2.0の端口でもUSB1.1のデバイスを認識できないことがあると思われます。
その場合はUSB1.1のハブをかますと問題解決します。


USB1.0の端口でも認識されないとき
本作例はIRCを使用しているため、動作周波数が12MHzを大きく外れるとUSBデバイスと認識されません。
具体的には接続後にホストから送られるKJKJKJKKの信号をデバイスが正しく捕らえ、
デバイスからホストに送る応答信号をホスト側が正しく捕らえる必要があります。
(KJKJKJKKの信号についてはhttp://www3.hp-ez.com/hp/bequest333/page74参照)

LPC810のIRCの公称精度は12MHzに対し1%以下とのことですが、もちろん個体差が存在します。
LPC810はLPC1114と異なり、IRC周波数の補正を行うレジスタのアドレスが公開されていないため、
水晶を使用しない場合、KJKJKJKKの信号を捕らえる部分(RecepcionUSB)のNOPの量を調整してタイミングを合わせるしか手段がありません。

返信
削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:LPC810でUSBの動作についてアドバイス

ssk 2015年9月29日 21時29分

ありがとうございます。
確かに指摘の通りUSB3.0を使っていました。

ただ、USB2.0でも認識されない状態です。
HIDデバイスと認識されるものの、仮想COMポートにはならなかったり、デバイス名は表示されるがやはりうまく動かないPCがあったりとUSB3.0よりはマシな状況ですが、使えないことには変わりないですね。
USB1.1のハブを使ってはとのアドバイスですが、残念ながらUSB1.1は持っておらず試せないです。
USB2.0のハブはダメでした。

個体差も考え、手持ちの他の石でも試してみましたが全滅でした。
IRCのクロックを出力するだけのプログラムを組み、調べてみると11.85~11.95MHzと少し遅めのクロックのようです。

IRC周波数の補正を行うレジスタが公開されていませんが、LPC1114のIRCCTRLレジスタと同じアドレスをいじると調整は出来るようです。(表向き無いことになっていると言うことは恐らく非推奨でしょうが)
+1~+2で12MHzに近づくので、LPC1114の調整のソースを参考にソースコードいじってみましたが、なかなかうまくいかず苦戦中です。

avrマイコンでのUSBライブラリV-USBだと信号を使って調整用レジスタの値を動的に調整するコードがあるようです。これを参考に修正できれば個体差や変動を吸収できるようになりそうです。が、まずはいろいろ勉強しないといじれないので、時間をかけてやってみます。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。

Re:Re:Re:LPC810でUSBの動作につい

bequest333 2015年9月29日 21時53分

>>HIDデバイスと認識されるものの、仮想COMポートにはならなかったり...

本作例はCDCではないため仮想COMポートにはなりません。

http://naitsuku.hatenablog.com/entry/2015/09/07/130349
この方のページをご参照ください。

HIDデバイスと認識される補正値の中間付近で安定動作すると思われます。
ただし、LPC810ではTXとRXとを直結したループバックテストが行えません。

>>IRC周波数の補正を行うレジスタが公開されていませんが、LPC1114のIRCCTRLレジスタと同じアドレスをいじると調整は出来るようです。

これは新たな発見でした。情報どうもありがとうございました。

削除依頼

不適切な投稿の削除を管理人に依頼します。理由を選択またはご記入ください(送信内容は管理人のみが確認します)。

※ご入力のメールアドレスは掲示板管理者には表示されません。