問題タブ [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.

0 投票する
15 に答える
9763 参照

c - Pic18 micro に最適な C コンパイラは何ですか?

マイクロチップ PIC18F252 に基づく新しいプロジェクトを開始しています。使用するのに最適な 'c' コンパイラは何ですか?

0 投票する
3 に答える
2292 参照

c - C プログラミングを使用して特定の時間間隔でトーンを生成する

PIC18FにC言語を使用して、それぞれが特定の時間間隔で再生されるようなトーンを生成しています。PWM を使用してトーンを生成しました。しかし、間隔を作成する方法がわかりません。これが私の試みです。

0 投票する
11 に答える
4664 参照

embedded - タイマーを使用して時間を維持すると、組み込みマイクロコントローラーが中断されます

この質問は、OSなしで小型マイクロコントローラをプログラミングすることについてです。特に今はPICに興味がありますが、質問は一般的です。

私は時間を保つために次のパターンを数回見ました:

タイマー割り込みコード(タイマーが毎秒起動するとします):

メインラインコード(割り込みなし):

メインラインコードが繰り返されたり、カウンターがさまざまな値(秒だけでなく)に設定されたりする場合があります。

sec_counterメインラインコードのへの割り当てがアトミックでない場合、ここに競合状態があるように思われます。たとえば、PIC18では、割り当ては4つのASMステートメントに変換されます(一度に各バイトをロードし、その前にメモリバンクから適切なバイトを選択します)。割り込みコードがこの途中にある場合、最終的な値が破損している可能性があります。

不思議なことに、割り当てられた値が256未満の場合、割り当てアトミックであるため、問題はありません。

私はこの問題について正しいですか?このような動作を正しく実装するためにどのパターンを使用しますか?いくつかのオプションがあります。

  • sec_counterへの各割り当ての前に割り込みを無効にし、後で有効にします-これはきれいではありません
  • 割り込みを使用しないでください。ただし、開始されてからポーリングされる別のタイマーを使用してください。これはクリーンですが、タイマー全体を使い果たします(前の場合、1秒の起動タイマーは他の目的にも使用できます)。

他のアイデアはありますか?

0 投票する
13 に答える
8758 参照

c - PIC18 で C を使用したマルチスレッド

OS がないため、PIC18のプログラミング中に並列で実行されるスレッドをどのように作成しますか?

0 投票する
2 に答える
546 参照

embedded - 単線問題

私はあなたの資格のある助けが必要です!私はC++でプログラミングしており、PIC 18F87J50を使用して、H0ポートでDS18B20に接続しようとしています。

私の基礎となるプログラミングは正しいと思うので....私が抱えている問題(私が持っていると思います)は、ROMコマンドを実行するときに64ビットROMコードを検索していることです。

最初のバイトは、コンポーネントがどのファミリに属しているかを教えてくれるはずです(28h)。次の48ビットは、そのコンポーネントだけの一意のシリアルを提供するはずです。最後のものはCRCに使用されます。

このようにするとき、私は正しく考えていますか?

ROM_CODE [1-6]のコードを要求した場合、一意の番号を取得する必要がありますか?私はいけませんか?

敬具!

0 投票する
2 に答える
818 参照

embedded - 1wireの問題の詳細

これらの関数を以下で定義しました。たとえば、ファミリーコードのDevice_ID関数を要求すると、FF(28である必要があります)のみが取得されます。実際には、ファミリーコード、48ビットシリアル、およびcrc8ビットの両方が取得されます。すべての「1つ」。スレーブデバイスの検出機能が正常に機能しているようです。スレーブを接続すると、彼は「私はここにいます」と言い、それを取り除くと...デバイスが存在しません。1ワイヤーに5kΩのプルアップもあります。

また、Device_IDが機能しない理由がわからないので、なぜ機能しないのかという質問があります。このコード内に何か問題がありますか(PIC 18F87J50と1つのDS18B20を使用しています):

メインでの私の声明:

使用した機能:





そして今、いくつかの重要なdevice_id:





0 投票する
5 に答える
1527 参照

embedded - MCC18、48Mhz、18F87J50の遅延

48MHzの水晶振動子とMCC18のコンパイラを使用してPIC18f87J50の遅延マクロを作成するにはどうすればよいですか。遅れは私たちの中にあるはずです。したがって、たとえば、Delay_us(201)と記述して、実際に201usの遅延を取得できます。

私が今持っているのは:

そして、それは私のオシロスコープでは正しくないようです!:/

敬具!

そしてメリークリスマス!

0 投票する
8 に答える
79073 参照

port - PIC 18FのPORTとLATCHの違い

私はすでにデータシートとグーグルを読みましたが、まだ何かを理解していません.

私の場合、PIC18F26K20 の PIN RC6 を INPUT モードに設定しました。

TRISCbits.TRISC6 = 1;

次に、PORT と LATCH で値を読み取ると、値が異なります。

v1 = LATCbits.LATC6;

v2 = PORTCbits.RC6;

v1 は 0 を返し、v2 は 1 を返します。

それは正常ですか?どの場合に PORT を使用する必要があり、どの場合に LATCH を使用する必要がありますか?

0 投票する
1 に答える
7045 参照

pic - マイクロチップ c18 コンパイラを使用して pic18f に大きなバッファを作成する

pic18f で Microchip C18 コンパイラを使用して、プログラム データ空間に 3000 バイトの「大きな」バッファを作成したいと考えています。

これを main() (スタック上) に入れた場合:

このエラーがあります:

グローバルに配置すると、次のエラーが発生します。

大きなバッファを作成するには? c18でpic18fの大きなバッファを管理する方法に関するチュートリアルはありますか?

0 投票する
3 に答える
7054 参照

assembly - PIC アセンブリ関数の呼び出し

私はPIC18アセンブリでかなり基本的なプログラムを書いています。2 つの 16 ビット数を乗算するサブルーチンを作成する必要があります。これは私が今持っているものです:

私が今書いている方法は、最初のコメントで言及されているレジスタに格納されている数値を乗算し、コメントの4つのレジスタに格納するというものです。これは、この乗算を 1 回か 2 回実行するだけでよい場合にうまく機能します。つまり、次のように言えます。

乗算0x450x47て に格納し0x50ます。問題は、異なるデータに対してこれを複数回呼び出す必要がある場合です。これは、アセンブラーがポインターを 2 回「設定」できないためです。間接アクセス (つまり、被乗数と結果を格納するために LFSR1、LFSR2、および LFSR0 を使用) を使用しようとしましたが、POSTINC0 などの巨大な混乱が発生します。この関数呼び出しをより適切にする方法はありますか?