問題タブ [microcontroller]

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 投票する
7 に答える
1169 参照

c - cの「通常の」変数の前の配列の宣言?

現在、msp430 MCU 用のアプリケーションを開発しており、奇妙な問題が発生しています。「通常の」変数の宣言後にスコープ内で配列を宣言すると、未定義のように見える動作が発生することがあることがわかりました。このような:

foo には 2 番目の変数としてポインターが渡されますが、これはarr配列を指していないことがあります。プログラムを 1 ステップ実行してこれを確認し、メイン スコープの arr array-as-a-pointer 変数の値が foo スコープの b ポインター変数の値と同じではないことを確認します。いいえ、これは実際には再現可能ではありません。たまにこの動作を確認しただけです。

これは、foo 関数の 1 行が実行される前でも観察できます。渡されたポインター パラメーター (b) は単に arr のアドレスを指していません。

次のように、例を変更すると問題が解決するようです。

なぜ私たちがこの行動を経験するのかについて、誰かが何か意見やヒントを持っていますか? それとも似たような経験?MSP430 プログラミング ガイドでは、コードが ANSI C89 仕様に準拠する必要があることを指定しています。それで、配列は非配列変数の前に宣言する必要があると言っているのだろうかと思っていましたか?

これに関するご意見をいただければ幸いです。


アップデート

@Adam Shiemke と tomlogic:

宣言内の値を初期化するさまざまな方法について、C89が何を指定しているのか疑問に思っています。次のようなものを書くことは許されていますか?

もしそうなら、どうですか:

それは許されますか?以下は違法なC89に違いないと思います:

前もって感謝します。


更新 2 問題が解決しました。基本的に、関数 (foo) を呼び出す前と変数の宣言後に割り込みを無効にします。簡単な例で問題を再現することができました。解決策は、無効化割り込み呼び出しの後に _NOP() ステートメントを追加することです。

誰かが興味を持っている場合は、問題を再現する完全な例と修正を投稿できますか?

これに関するすべての入力に感謝します。

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

documentation - フローチャートで (マイクロコントローラの) 割り込みをどのように表すことができますか?

誰かに視覚的な例がありますか?

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

algorithm - マイクロコントローラで実行する単純なパターン マッチング アルゴリズムのアイデアを探しています

単純な音声パターンを認識するプロジェクトに取り組んでいます。2 つのデータ セットがあり、それぞれが 4 ~ 32 の音符/デュレーションのペアで構成されています。1 つのセットは事前定義されており、もう 1 つは着信データ ストリームからのものです。強く相関する 2 つのデータ セットの長さは異なることがよくありますが、ほぼ同じ "形状" です。私の目標は、2 つのデータセットがどの程度相関/一致しているかについて、何らかのランキングを作成することです。

入力周波数をピッチに変換し、入力データ ストリームのピッチをシフトして、平均ピッチが事前定義されたデータ セットのピッチと一致するようにしました。また、事前定義されたセットの全体的な持続時間と一致するように、着信データ セットの持続時間を伸縮します。強い相関があるとしてランク付けする必要があるデータの 2 つのグラフの例を次に示します。

http://s2.postimage.org/FVeG0-ee3c23ecc094a55b15e538c3a0d83dd5.gif

(申し訳ありませんが、新しいユーザーとして、画像を直接投稿できませんでした)

リソースが最小限になるように、8 ビットのマイクロコントローラーでこれを行っています。速度はさほど問題ではなく、1 秒か 2 秒の処理が問題になることはありません。

明らかな解決策があったとしても、私は驚かないでしょう。私は問題をあまりにも長く見つめていました。何か案は?

前もって感謝します...

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

windows - イーサネットブリッジへのシリアルとしてのPIC18コントローラ

プロジェクトのシリアルイーサネットコンバーターにPIC18F6***シリアルマイクロコントローラーを使用することを計画しています。送信受信シリアルポートデータ用に16進コードをPICマイクロコントローラーに配置したら、Windowsハイパーターミナルを使用し、イーサネットデータをチェックするためにWindowsにアプリケーションはありますか?

私の質問が明確でない場合、私はそれをよりよく説明する準備ができています...私に知らせてください.....

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

embedded - AVRアナログコンパレータ+内部プルアップ?

AtmelAVRマイクロコントローラーに関する簡単な質問です。そこで、ATTiny85のアナログコンパレータを使用して、信号がしきい値を上回っているか下回っているかを判断したいと思います。この信号は通常「フローティング」であり、「アクティブ」のときはグランドに向かって引っ張られます(つまり、アクティブロー-オープンコレクタ信号です)。入力ピン(コンパレータ入力でもある)のプルアップを有効にするには、次のようにします。

アナログコンパレータを使用し、AIN1としてPORTB.1を選択した場合、内部プルアップが入力信号に適用されますか?私は誰かがこの振る舞いを検証するための個人的な経験を持っていることを望んでいます。この質問がスタックオーバーフローに対して「ハードウェア指向」ではないことを願っています。ありがとう!

編集 「デジタルで扱ってみませんか」という以下のコメントのいくつかに応えて、それは私の「信号」がセンサー(つまり光IRセンサー)によって生成されているためです。デジタルでゼロとして解釈されるのに「十分にハード」にプルダウンされるとは保証できないので、スイッチングしきい値として内部2.56Vリファレンスを使用します。私は「IRイベント」を取り上げようとしているだけなので、これが私にとって最も簡単な方法のように思えました。

また、アナログコンパレータを使用することで、ISRを使用して「非同期に」イベントを検出できます。一部のピンはデジタルエッジで割り込みを呼び出すことができますが、V_ILを下回る応答に依存することは望ましくありません。

0 投票する
6 に答える
5772 参照

algorithm - 8ビットマイクロコントローラーの線形補間

PICアセンブリ言語を使用して、8ビットPICマイクロコントローラー(具体的には16F627Aですが、それは問題ではありません)の2つの値の間で時間の経過とともに線形補間を行う必要があります。私はここで実際のコードと同じくらいのアルゴリズムを探していますが。

8ビットの開始値、8ビットの終了値、および2つの間の位置を取得する必要があります(現在、8ビットの数値0〜255として表されます。ここで、0は出力が開始値であり、255は最終値であることを意味します。値ですが、これを表すより良い方法がある場合は変更される可能性があります)、補間された値を計算します。

現在、PICには除算命令がないため、汎用の除算ルーチンをコーディングして、各ステップで(BA)/(x / 255)+ Aを効果的に計算できますが、これを行うにはおそらくはるかに優れた方法があると思います。 c++のPCで行う方法よりもマイクロコントローラー

このハードウェアにこれを効率的に実装するための提案はありますか?

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

assembly - PICのEEPROMへの書き込み

ここにPICマイクロコントローラープログラマーはいますか?

pickit2とそれに付属の16F690チップを使用してPICマイクロコントローラーのプログラミングを学んでいます。現在、さまざまな施設を試してみています。MPLABでEEPROMvaklueを設定すれば、コードでEEPROMからバイトを正常に読み取ることができますが、PIC自体を使用して値を変更できないようです単に何も起こらず、変更された値を読み戻さないので、常に元の値を取得します。これは、書き込みが機能していないことを意味しますか?

これはそのセクションの私のコードです、私は何かが欠けていますか?私は不必要な銀行の切り替えをたくさん行っていることを知っています。間違った銀行にいることが問題にならないように、それらのほとんどを追加しました。

0 投票する
4 に答える
219 参照

microcontroller - マイクロコントローラのI/O方向を繰り返し変更しても安定していますか?

私はマイクロコントローラープログラミングに不慣れで、マイクロコントローラーボードを、送信されたコマンドに基づいてステータスを提供する別のデバイスに接続しましたが、このステータスは、データの提供に使用されるのと同じI/Oピンで提供されます。つまり、基本的に、マイクロコントローラーからの出力として使用される8ビットのデータラインがありますが、特定のコマンドでは、データラインを読み取ることを選択すると、データラインの1つでステータスが返されます。したがって、ステータスを読み取るためにこの1行の方向を変更して、この行を出力として入力に変換してから出力に戻す必要があります。これは許容できるプログラミングですか、それともI / Oピンのこの変更は頻繁に不安定性を引き起こしますか?

ありがとう。

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

microcontroller - 複数のアーキテクチャにわたる負の数の表現

OKI431マイクロコントローラーを使用しています。適切なソフトウェアがインストールされたPCと通信できます。永久メモリとして機能するマイクロのI2CバスにEEPROMが接続されています。PCソフトウェアは、このEEPROMの読み取りと書き込みを行うことができます。

BとCの2つの数値を考えてみましょう。それぞれ、2バイトの整数です。BはPCソフトウェアとマイクロの両方に知られており、定数です。Cは、BCが符号付き8ビット整数に収まるようにBに非常に近い数値になります。いくつかのテストの後、Cの適切な値はPCによって決定され、後で使用するためにマイクロのEEPROMに保存されます。

これで、マイクロは2つの方法でCを保存できます。

  • マイクロはtwo byteCを表す全体を保存できます
  • マイクロはBCをone byte符号付き整数として格納でき、後でBとBCからCを導出できます。

負の数の2の補数表現は、現在、ハードウェアメーカーによって広く受け入れられていると思います。それでも私は、負の数はさまざまな方法で表現できるため、2つの異なるアーキテクチャによってアクセスされる記憶媒体に負の数を格納することは個人的には好きではありません。参考までに、431は2の補数も使用します。

負の数はさまざまな方法で表すことができるという頭痛の種を取り除きone byte、他のチームメンバーが提案した解決策を受け入れる必要がありますか?two byteまたは、負の数を処理する必要がないため、ソリューションの決定に固執する必要がありますか?どちらが好きですか、そしてその理由は何ですか?

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

embedded - マイクロコントローラに搭載された ADC の最大物理レート (ナイキスト性能制限) の計算

さまざまな PIC マイクロコントローラーに搭載されている A/D の最大物理レート (ナイキスト性能限界) を評価しようとしています。

ただし、計算を行うには、データシートに明示的に記載されていないパラメーター、具体的には Tacq、Fosc、TAD、および除数パラメーターが必要です。

いくつかの仮定を立てて進めましたが、サニティ チェックを行うと役立ちます。最大物理レートの計算を正しく行っていますか?

説明のみを目的として、ADC を備えた最も単純な PIC10F220 を取り上げました。これは、Tacq、Fosc、TAD、および除数パラメータの解釈に特に焦点を当てるためのものであり、この非常に基本的なチップに実用的な機能を実装できることを示唆するものではありません。(これは、以下のコメントでのクリフォードのポイントです。)

計算

そう:

次のサンプルの前にリアルタイムで実行される単純なロード/ストア/しきい値の 10 の命令を想定します (これは単なるスタブです。ポイントは残りの計算です)。

つまり、このシステムの (理論上の) パフォーマンス --- 仮想のリアルタイム処理コードを使用したチップの A/D --- は、28 kHz に帯域制限された信号用です。

これは、Tacq、Fosc、TAD、および除数パラメーターを取得し、それらを使用してこのチップの最大物理レートまたはナイキスト性能限界を取得する際のデータシートの正しい割り当て/解釈ですか?

ありがとう、