問題タブ [pic18]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
microcontroller - PIC18の入力ピンの状態の読み取り
PICで出力を動作させることができ、さまざまな出力ラッチをハイ/ローに設定すると、LEDの束をオンとオフで踊らせることができます。しかし、ピンの状態で読むのが大変です。
以下のコードを参照してください。構成を設定し、TRISCを入力として定義し、TRISBを出力として定義します。無限ループでは、RC6がハイかローかを確認し、結果に応じてBラッチ全体をハイまたはローに設定します。
コードは警告やエラーなしで正常にコンパイルされます。コードロジックが単にラッチをハイとローに設定している場合、それは正常に機能しますが、ピンの状態を正常に読み取ることができませんでした。
何か案は?
PIC18F14K50とMPLABv8.43、およびHiTechANSICコンパイラを使用しています。
私の接続は、VDD(ピン1)への+ 5V、アースへのVSS(ピン20)です。+ 5VからC6(ピン8)まで、100Kの抵抗とB7(ピン10)からグランドまでのLEDがあります。RC6を切り替えるには、ワイヤーをC6に接続/切断します。
c - PIC18Fでの遅延
HiTechANSICコンパイラとMPLABv8.43でPIC18F14K50を使用しています。遅延機能を除いて、私のPICコードはようやく稼働し、機能しています。これは私のアプリケーションにとって非常に重要です。特定のミリ秒、秒、または分数の間、特定の状態にある必要があります。
私はこれの解決策を約2週間探していましたが、これまでのところ成功していません。私はあきらめてasm("nop");
、ループ内で独自の遅延関数を作成しましたが、これは非常に予測できない結果をもたらします。0.5秒または5秒待つように指示すると、十分に正確に機能します。しかし、10分間のように、もっと長く待つように指示するとすぐに、遅延は約10〜20秒しか続かず、2分以上は500ミリ秒の遅延よりも短い瞬きになります。
これが私の設定ヒューズとwait()
機能です:
私が言ったように、私がそれwait(500)
まで電話をかけるとwait(30000)
、私が興味を持っている許容範囲内で0.5秒から30秒の遅延が発生します-しかし、私が電話をかけるとwait(600000)
、私が期待するように10分の遅延は発生しませんが、むしろ約10〜15秒で、wait(120000)
2分の遅延はありませんが、すばやく点滅します。
__delay_ms()
理想的には、組み込み関数を機能させて、自分の内部から呼び出されるようにしたいのですがwait()
、これでは成功していません。私がそうしようとすると#include <delay.h>
、MPLABはそのようなファイルやディレクトリがないと文句を言います。HiTechサンプルのdelay.hを見ると、DelayUs(unsigned char)
定義済みのextern void DelayMs(unsigned char)
ものとまだ試したことがないものがありますが、externをCコードに直接入れようとすると、リンク時に未定義のシンボルエラーが発生します。
短から中程度の遅延と長い遅延の間の不一致は意味がありません。私が持っている唯一の説明は、コンパイラがNOPか何かを最適化したということです。
私が言ったように、それは上記の構成のヒューズを備えたPIC18F14K50です。PICの経験はあまりありませんが、この設定では4MHzで動作していると思います。
ライブラリやマクロの外部関数、またはNOPを使用した手書き関数に満足しています。必要なのは、1分あたり数秒程度の精度であるということだけです。
c - Microchip C18ネイキッド機能
C18コンパイラでネイキッド関数を宣言する方法を知っている人はいますか?
裸の機能とは、エピローグとプロローグのない機能を意味します。
私が使用するgccで:
多分 #pragma または同じ結果を得るためのいくつかのトリック...??
ありがとうございました!
visual-studio - Visual Studioでの埋め込みコード開発(特にC18を使用するPICの場合)
デスクトップアプリケーションの作成にVisualStudioを使用していますが、非常にユーザーフレンドリーで使いやすいと思います。
可能であれば、VisualStudioで埋め込みコードも記述したいと思います。たとえば、PIC18Fxxxシリーズの.hexファイルをC18または他の同様のCベースの言語で生成することは可能ですか?
serial-port - PIC18f4620 SDCC で usart を受信
rs232用のPIC18F4620でPC(linux)の通信を実現しようとしています。送信 (PIC -> PC への送信は問題ありません)。ただし、PC から PIC に何かを渡そうとすると、PIR1bits.RCIF フラグが設定されず、割り込みが発生しません。
それが私の(PIC18f)コードです(1つのバージョン):
PCで私がした:
というわけで、PIC to PCはOK。しかし、私がしようとすると:
echo "何か" > /dev/ttyUSB0
また
または、/dev/ttyUSB0 をファイルとして開いて書き込み、python シリアル モジュールを使用するコードを書いても、何も起こりません。
loading - マイクロチップ:MPLABXに複数のHEXファイルをロードする方法
私はMPLABX(MPLAB 8の場合もあります)を使用していて、プロジェクトを完了させています。私はこれらのHEXファイルを持っています:
- bootloader.hex
- magic_flag.hex
ブートローダーはアドレス0x0から0x7FFにロードされます。マジックフラグの位置はアドレス0x40(ブートローダー領域)にあります。
そして今、すべてをロードするためにMPLAB Xでプロジェクトをセットアップする必要があります(bootloader + magicFlag + app)。ブートローダーをロードし、次にmagicFlagをロードしてから、保存されたフラッシュメモリをセットアップし、アプリケーションで作業して、アプリケーション領域(0x800から0xFFFF)のみをロードすることは可能ですが、私にとってはあまり快適ではありません。たとえば、iSYSTEMのWinIDEA IDEでFreescaleを使用した場合、多くのSXファイルをロードするように設定することができ、非常にシンプルで迅速に機能していました。しかし、MPLAB XIで試してみると、常にエラーが発生します。
(944)appl.hexとbootloader.hexの間のアドレス0hでのデータの競合。
私が試したこと:
- プロジェクトプロパティにロードするためのセットアップファイル(セクションロード)
- プロジェクトプロパティでメモリ範囲を設定する(セクションICD 3)
しかし、ICD3のロードには問題がないことを私は思います。MPLABXがユニファイド16進ファイルを作成しているときにエラーが発生したためです。
そして想像してみてください、これはリンカーの私の部分です:
これは私のプロジェクトだけではなく、magicFlagを備えたブートローダーがあり、applからのソースコードしかないことを思い出してください。もちろん、1つのプロジェクトにapplを含むブートローダーソースコードを含める方がよいでしょう。
だから、MPLABXは私を殺している、助けてください:-)
c - C言語でのpic18f1xk22用のADCセットアップ
ADCのセットアップを学ぼうとしている初心者ですが、残念ながらオンラインのほとんどの例は他のpic18モデル用であり、リソースとしてadc.h定義を持っていません. (または、Cコードの場合はそうではありません。)答えをスプーンで与えられたくはありませんが、誰かが素晴らしいウォークスルー、オンラインリソースなどを提案できれば、本当に感謝しています、ありがとう!
また、私が書いたこの疑似コードについての助けは素晴らしいでしょう。エラーが発生する可能性があります...正しい軌道に乗っているかどうかはわかりません。
assembly - PIC18 の .asm でビットを左にシフト
回転させてからキャリーをクリアすることにより、 rlcf.asm
を介して左にビットをシフトしようとしています。これはうまくいきますか?そうでない場合、私は助けを得ることができますか?なんらかの理由でこれはコンパイルされず、気が狂ってしまいます。これは非常に単純なプログラムですが、取得できません。すべてのヘルプは大歓迎です。
performance - 高速 8x8bit 乗算アセンブリ pic18
私は 2 つの 8 ビット数を乗算し、それらを 16 ビットの場所に格納して 255 より大きい結果を得ようとしています。これを達成する最速の方法は、シフトを使用することです。これは、rrcf 関数を介して実装し、bcf を使用して不要なキャリーをクリアしようとしました。
これがアイブが思いついたものです。すべてのコードにコメントを付けてみたので、私の思考プロセスを確認できます。私はPIC18とASMでのプログラミングの両方に一般的にかなり慣れていません。(うまくいけば)助けを提供するときは、そのことを覚えておいてください。MPLAB SIM を実行すると、カウンターが減少するだけです...?
これは、乗数の最後のビットが繰り返しテストされているためだと思います。これはゼロになるため、毎回追加命令をスキップします。BTFSC をビット 0 ~ 7 から段階的に移動するループの作成を手伝ってもらえますか? これが問題だと思いますが、コードがわかりません。私は本質的にmainを8回書くことができましたが、コードスペースを節約しようとしています