問題タブ [dspic]
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.
lcd - dspic33f 液晶 4 ビットモード
私は mplab xc16 で dspic33fj128mc802 を使用しています。LCD を 4 ビット モードで使用したいのですが、初期化できないようで、何が間違っているのかわかりません。デバッグの助けをいただければ幸いです。私は他の例を見てきましたが、私のコードは他のものと似ていますが、それでも動作しません
c - マイクロC、UART。複数バイトのリクエスト
- マイクロコントローラ:
dsPIC33EP512MU810
- コンパイラ:
MikroC
経由でリモート デバイスから複数のバイトを要求しようとしていますUART
。必要な情報を取得するには、単一のデータ バイトを受信するために単一の要求バイトを送信します。複数のデータ バイトを要求するときに、データ バイトを特定するのが困難です。
UART の受信は、割り込みを介して処理されます。
1 つのデータ バイトのコードは次のようになります。
これはうまくいきます。
それ以上必要な場合は、次のように 1 データ バイトだけを使用します。
この方法の問題点は、最後のデータ バイトが適切に受信されたことを確認せずに、次の要求バイトがすでに送信されている可能性があることです。
これにより、データが「スクランブル」されます。つまり、最後のリクエストのデータ バイトを現在のリクエストで解析できるということです。
これに対する適切な解決策を見つけることができないようです。どんな提案も素晴らしいでしょう!
循環バッファーの実装:
UART 割り込み:
メインループ処理:
UART 送信ルーチン:
受信データの処理:
communication - UART通信 dsPIC33EP256MU810
私はマイクロコントローラープログラミングに非常に慣れていません。
私は使用しています
- MplabX v3.26 を IDE として
- XC16 コンパイラ
- ピックキット 3
- p33EP256MU810 (dspic)
プログラミング用
LED を点滅させ、UART 経由でいくつかの文字を送信する非常に単純なプログラムを作成しました。次のソース コードを参照してください。
LED の点滅部分は問題なく動作していますが、シリアル モニタ ツール (X-CTU) を使用してデータを監視している UART の反対側で文字化けが発生します。
私の主な問題は、ボーレートを計算できないことです。私が何か間違ったことをしている場合はお知らせください。
ありがとうございました
dspic - 16 ビット dsPIC33F の 32 ビット計算には 460 命令サイクルが必要ですか?
関数のハードウェア遅延として 16 ビット タイマーを使用していますdelay_ns(UINT32 ui32_delay_val_ns);
。関数内でdelay_val
は で除算されていTcy
ます。タイマーTcy
は 25ns (40MHz での命令サイクル時間) で実行されるため、すべてのティック (または TMR4 val ビット) は 25ns になります。
優れたソフトウェア エンジニアが行うべきこととして、この関数を使用していくつかのテストを実行したところ、何か疑問に思ったことがありました。
タイミングを参照してください: delay_ns: 10、a=2 b=27 c=485 d=494 e=504
私は 250ns を要求しました。これは 25ns の 10 TMR4 ティックです。
a は BOOL bStart = 1 および TMR4.ON = 1 の後です。(2サイクルは奇妙なことではありません)。
b = 前の 16 ビット キャスト ui 32 ビット val 値を 25 で割った後の TMR4 val;
c = TMR4 val (b の直後!!) 元の 32 ビット val を 25 で割ったとき。
ご覧のとおり、16 ビットの val を使用すると 25 命令サイクルのコストがかかりますが (もしかしたらかなり多いのでしょうか?)、32 ビットを使用すると +450 サイクルのコストがかかりますか? つまり、32 ビット val の単純な除算には 11.5 us かかります!!
特に、これは Microchip の dsPIC33 バリアントであり、いくつかの改善 (パイプライン、ダブル ACU など) があるためです。16ビットMCUなのはわかっていますが、なぜそんなにサイクルがかかるのですか?
c - 「if」に関するステートメントに従わない
dsPIC を使用して C で少しプログラミングを行っていますが、理由や方法がわからない小さな問題を見つけました。MPLAB 用コンパイラ C30
私はこのコードを持っています:
----申し訳ありませんが、指定しませんでした。ifに入らないと仮定!=
します。プログラムに実行させたいのは、両方の変数が等しい場合、while(1)
最初に戻る必要があるためです。 .----
MPLAB (8.92) の Watch で変数を調べましたが、それらは同じです。問題がコードの前後または他の場所にあるとは思いませんが、間違っている可能性があります。体験中に同じ問題を見つけた人はいますか?
お時間をいただきありがとうございます。