問題タブ [arduino-due]
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.
gcc - SysTick->LOAD vs SysTick->CALIB
現在、DCF77 ライブラリ(ソース コードは GitHub にあります) を Arduino (AVR ベース) から Arduino Due (ARM Cortex M3) に移植しています。
ライブラリには、正確な 1 ミリ秒のタイミングが必要です。明らかな候補は、syssticks の使用です。便利なことに、Arduino Due は 1 kHz のシステムスティック用にすでにセットアップされています。
ただし、私の (AVR) DCF77 ライブラリは、DCF77 にロックするとタイミングを調整できます。これは、タイマーのリロード値を次のように操作することによって行われます。
これをARMプロセッサに移植したい。ARM インフォメーション センターで、次のドキュメントを見つけました。
SysTick の構成
...
SysTick を設定するには、SysTick イベント間に必要な間隔で SysTick Reload Value レジスタをロードする必要があります。タイマー割り込みまたは COUNTFLAG ビット (SysTick Control and Status レジスタ内) は、1 から 0 への遷移でアクティブになるため、n+1 クロック ティックごとにアクティブになります。100 の期間が必要な場合は、SysTick Reload Value レジスタに 99 を書き込む必要があります。SysTick Reload Value レジスタは、1 ~ 0x00FFFFFF の値をサポートします。
SysTick を使用して 1ms などの時間間隔でイベントを生成する場合は、SysTick キャリブレーション値レジスタを使用して、リロード レジスタの値をスケーリングできます。SysTick キャリブレーション値レジスタは、TENMS フィールド (ビット 0 ~ 23) に 10ms の期間のパルス数を含む読み取り専用レジスタです。このレジスタには SKEW ビット (30) もあり、クロック周波数の変動が小さいため、TENMS セクションの 10ms のキャリブレーションが正確に 10ms ではないことを示すために使用されます。ビット 31 は、基準クロックが提供されているかどうかを示すために使用されます。
...
残念ながら、SysTick->LOAD と SysTick->CALIB がどのように接続されているかについては何も見つかりませんでした。つまり、システムスティックを抑制または加速したい場合、LOAD または CALIB 値を操作する必要がありますか? また、これらのレジスタにどの値を入力する必要がありますか?
インターネットで検索しても、これ以上のヒントは見つかりませんでした。多分私は間違った場所を探しています。これらの質問に対するより詳細なリファレンスはどこにありますか? それとも、いくつかの良い例でさえありますか?
android - nrf24l01 を使用して arduino と android 携帯の間で簡単に情報を交換することは可能ですか?
arduinoからの無線通信をアクティブにリッスンするアプリをいくつか持って、arduinoからAndroidフォンに情報を送信する必要があります。nrf24l01 を使用することは可能ですか?
最良のシナリオは、ハンドシェイクがなくても、直接通信することです。Arduino は、Android が受信することを期待している数列を送信し、アプリはその数列を受信するとアラートを出します。
c - デジタルピン 3 の PWM 制御 Arduino Due (C)
Arduino 独自のモーター シールドを使用して Arduino Due ボードのファンを制御しようとしていますが、問題が発生しました。ファンに PWM 信号を送信したいのですが、ここで問題が発生します。ピン 3 はチャンネルがありません。
デジタルピン 3 用のチャネルがありません。
コードは機能し、他のピンでテストしたところ、マルチメーターで測定すると要求された値が得られました。
Due のデータシートには、それに関する記述は 1 つもありません。モーター シールドの Web ページで、ピン 3 が使用するピンであることがわかりました。Arduino Uno ではうまく機能します。
デジタルの11番ピンを使う方法もありますが、こちらも同じで、チャンネルはありません。
誰かがこの方法で解決策または答えを持っていますか?
c - これは Arduino modulo のバグですか、それとも私ですか?
モジュロ演算子を使用して、Arduino Due (1.6.1 を実行) 用に次の簡単なスケッチを作成しました。
出力は次のようになります。
私の期待は、残りの値が 0 から 3 まで何度もカウントアップすることです。代わりに、4 回の 0 と 4 回の 4 を交互に繰り返します。
私は自分が何か間違ったことをしているという考えを完全に受け入れていますが、それが何であるかを理解することはできません.
c++ - uint_8ビット変数を介して関数の引数として48ビットMACアドレスを渡す方法は?
最近、私は emac に関連するプロジェクトに取り組み始めましたが、実装に関していくつかの疑問や障害に遭遇したため、経験豊富な人々からアドバイスや提案を得るために Q をここに投稿することにしました。
現在、EMAC-DM9161A モジュールを SAM3x - Taiji Uino ボードと高速イーサネット通信用に接続する作業を行っています。Palliser によって開発され、Github に elechouse/EMAC-Demo としてアップロードされているライブラリを使用しています。ソース コード (ethernet_phy.c) で、次のように DM9161A PHY コンポーネントを初期化するこの関数を見つけました。
問題: 引数 uint8_t uc_phy_addr は、70-62-D8-28-C2-8E などの 48 ビット MAC アドレスを渡したい 8 ビット レジスタです。2 つの 32 ビット レジスタを使用して、MAC アドレスの最初の 32 ビット、つまり 70-62-D8-28 を 1 つの 32 ビット レジスタに格納し、残りの 16 ビット MAC アドレス、つまり C2-8E を別の 32 ビット レジスタに格納できることを理解しています。 . ただし、48 ビットの MAC アドレスを渡すために unit8_t が使用される上記の ethernet_phy_init 関数を使用する必要があるため、これを行うことはできません。それで、私は知りたいのですが、これを実現する方法は?
別の質問: いくつかの試行方法で理解するためにいくつかのコードを実行しましたが、いくつかの疑問に遭遇しました。コードは次のとおりです。
出力結果:
だから私の疑問は、8 ビット変数を使用して値 49 を格納するときに出力が ASCII 文字で表示されるのはなぜですか。これは起こりますか?そして最後に、MACアドレスを8ビットレジスタに保存する方法は?
header - ヘッダー インクルード ファイルが原因でビルドが失敗するのはなぜですか?
Arduino Due のプロジェクトに spi.h ファイルを含めようとしています。私は Atmel Studio 6.2 を使用したいと考えています。これは、より柔軟性があり、率直に言って Arduino ツールよりもはるかに優れた IDE であるためです。Arduino と通信するバッチ ファイルから呼び出される Bossa.exe プログラミング ユーティリティを使用して、ボードを正常にプログラムできます。これは、バッチ ファイルからの基本的な呼び出しです。
ここでの問題は、コードが次のように残っている場合、Atmel スタジオがボードをプログラムするのに問題なく動作することです。
しかし、私がこれを行う分:
ビルドは失敗します...
しかし、ソリューション エクスプローラーを見ると、sam.h ファイルが表示されます。
それで、ここで何が起こっているのですか?
(編集:スクリーンショットでsam.hファイルを表示するのを忘れましたが、「依存関係」というフォルダーにあることを信じてください)
c++ - Arduino DUE での EKfilter C++ ライブラリのコンパイルに関する問題
更新: 実際に operator[] を this->operator[] に置き換えるだけで、最終的なエラーが修正されました。
更新 2: logic_error が修正されました! _P エラーだけが残っています。(UNOや他のボードではなく、DUEにのみ表示されます...)
更新 3: temp マトリックスの名前を _Pt に変更するとうまくいきましたが、予約済みのマクロだったのでしょうか?
新しいエラー:
-fexceptions を使用する必要があるようです...
このレポートには、[ファイル] > [設定] で [コンパイル中に詳細出力を表示] を有効にすると、より多くの情報が含まれます。
ここにはたくさんありますが、これに対する良い答えを得るために私がすべきことは、すべてを与えることです.
OSX上のarduino DUEにArduino 1.6.1を使用。
このライブラリを使用して std 名前空間 ' https://github.com/maniacbug/StandardCplusplus/ 'を取得します
そして、これはコンパイルに問題があるライブラリです: ' http://kalman.sourceforge.net/index.php '
フィルタ ライブラリをこの形式に移動して、arduino で使用できるようにしました。ヘッダー ファイルが見つからずに、少なくともインクルードを実行できるようになりました。
ご覧のとおり、ファイルの名前を .h ヘッダーに変更し (これが実際にどの程度必要かはわかりません)、フォルダーの名前を .cpp および .h と同じタイトルに変更し、もちろん、含まれているすべてのファイルを参照するように編集する必要がありました。ファイルの違い: 例
代わりにこれです:
だから、今、コンパイルしようとすると:
以下に示すように、この混乱したエラーが発生します。
この StandardCplusplus ライブラリは std:: 名前空間を処理する必要があり、そのコードベースの実装で表面上は間違っていると思われるものは何もないため、最初のエラーは本当に気が狂います。
私が見たところ、_P に続くほとんどのものは、最初のエラーが _P 変数を kmatrix.h で定義されている行列としてキャストできないという問題です。奇妙なことに、これは解決策を示している可能性があります。これらのエラーは、Arduino UNO 用にコンパイルすると表示されません。
最後のエラーのペアは、正直なところ、それが何を意味するのかさえわかりません。
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:37:0 から、/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33 から、TestKalmanLibrary.ino から含まれるファイル: 2:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:74:48: エラー: '{' トークンの前にクラス名が必要です
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h: コンストラクター 'Kalman::KalmanError::KalmanError(const string&)': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h: 82:9: エラー:
クラス 'Kalman::KalmanError' には 'logic_error' という名前のフィールドがありません
/Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/cctype:19:0 からインクルードされたファイルで、/Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/istream:21 から、/Users/insertnamehere から/Documents/Arduino/libraries/StandardCplusplus-master/iostream:27、/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:35 から、/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter から.h:33、TestKalmanLibrary.ino:2 から: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h: グローバル スコープ:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:807:20:
エラー: 数値定数の前に unqualified-id が必要です
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:817:0 からインクルードされたファイルで、TestKalmanLibrary.ino:2 から: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: Inメンバ関数 'void Kalman::EKFilter::init(Kalman::EKFilter::Vector&, Kalman::EKFilter::Matrix&)':
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:196:8: エラー:
'16' のメンバー 'swap' の要求は、非クラス型 'int' です
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: メンバー関数内 'const Matrix& Kalman::EKFilter::calculateP() const': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl. h:435:10: エラー: 非クラス型 'int' の '16' のメンバー 'resize' の要求
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:439:15: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:443:17: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:17: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:35: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:447:19: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:17: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:27: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: メンバー関数内 'virtual void Kalman::EKFilter::sizeUpdate()': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h :572:26: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:583:10: エラー: '16' のメンバー 'resize' のリクエストです。これは非クラス型 'int' です
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:586:17: エラー: 式は関数として使用できません
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:34:0 から、/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33 から、TestKalmanLibrary.ino から含まれるファイル: 2: /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/string: 'std::basic_string::size_type std::basic_string::find_first_not_of(const std::basic_string&, std::basic_string:: size_type) const [with Ch = char; Tr = std::char_traits; A = std::アロケータ; std::basic_string::size_type = unsigned int]': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector_impl.h:66:42: ここから必要 /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus- master/string:518:64: 注: 依存ベース 'std::vector >' の宣言
/Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/string:518:64: 注: 代わりに 'this->operator[]' を使用してください コンパイル中にエラーが発生しました。
ここで修正することはたくさんありますが、これはすべて、ライブラリが既にフォーマットされている方法に関するいくつかの問題を修正した後のものです。
「/boards.txt」コンパイル設定に -fpermissive を追加する必要がありました
彼らのコードにはコンパイルできない奇妙な実装がありました。私はこれを変更しました:
これに: