問題タブ [atmega]
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.
width - AVR Studioのパルス幅変調(PWM)
ATmega8のLED、ポートBの任意のピンにPWMを使用しようとしています。タイマーの設定が面倒で、OCR1Aをどうすればよいかわかりません。これが私のコードです、そして私はいくつかのフィードバックが欲しいです。
PWMの使い方を理解しようとしています。私はその概念を知っています、そしてOCR1Aは私がパルスをオンにしたいカウンター時間全体の一部であると思われます。
arduino - ArduinoEthernetProでSparkfunのMP3プレーヤーシールドを使用する-SPIの問題
SparkfunのArduinoEthernetProボードとMP3プレーヤーシールドを使用しています(http://www.sparkfun.com/products/10536およびhttp://www.sparkfun.com/products/10628)
Sparkfunが提供する例を使用しようとしましたが、同じエラーが発生し続けます。これは、SDカードの初期化に限定されています(SdFatを使用しています)。
コアの問題を突き止めるために、SdFatライブラリから「SdInfo」の例を実行してみました。これは私の出力です:
SdFatバージョン:20111205
開始する文字を入力します
card.initが失敗しました
SDエラーコード:0X1
SDエラーデータ:0X0
Sparkfunの指示(http://www.sparkfun.com/tutorials/295)に従ってSd2PinMap.hでSS_PINを9から10に変更すると、sdcard.init(...)メソッドがハングします。
問題は、W5100イーサネットチップとMP3プレーヤーシールドの間の競合が原因だと思います。
私が気付いていない競合するポートはありますか?または、W5100チップを無効にする必要がありますか?
arduino - 時間間隔での複数のanalogRead()呼び出し
ATmega 328ベースの製品に波形をキャプチャする機能を追加しようとしていますが、A/D変換を行うときのATmega328の応答性の詳細を見つけることができませんでした。コードはArduinoでプロトタイプ化されていますが、完了するとカスタムボードに移行されます。
私の計画では、合計期間(通常、ローカルACライン周波数に基づいて16〜20ミリ秒)を設定し、その間隔中に1つのピンを50〜100回のオーダーでサンプリングします。ATmega 328は、その数の変換を連続して確実に実行できますか?変換あたりの最小間隔は16ms/100=160usです。
誰かがコードを見る必要がある場合は、コード例を追加できますが、今のところ、複数の連続するA/D変換間の最小期間についてもっと心配しています。
c - チップの予約済みアドレスとマジック ビットに関する公式情報を見つける方法は?
複数のチップのマジック アドレスのリストをチップ メーカーから入手するにはどうすればよいですか? それがサポートする価値についてのまともな説明はありますか?
私はそれを呼び出す/検索する用語さえ理解できませんでした。
組み込みプログラミングを始めたばかりです。あらゆる種類のものに設定しなければならない魔法のビットがたくさんあります。
通常、私は何かに遭遇します:
また
彼らが何をしているのかを説明するコメントが時々あります。私は主に、サンプル コードで見つけたすべてのメモを取っています。通常、msp430 ランチパッド用のものは、親切で冗長な人々によって書かれており、多くのコメントがあり、チップ ファミリ ノートでアドレス マップの一部を見つけることさえできますが、理解できるリストはほとんどありません。それを完全に理解しようとすると、Arduinosでより一般的なチップがさらに望まれます。(確かに、私はまだそれを検索する方法がわかりません:)
私がこれまでに見つけた最良の場所は、私が使用しているチップのヘッダーファイルです...しかし、それでも、次の例を見てください:
今ヘッダーファイル:
個々のビットの説明も、最も一般的なものとの既製の組み合わせもありません。
ボーナス暴言の質問
常に強力でほとんどアイドル状態のパーソナル コンピュータでコンパイルされるため、すべてのコンパイラ/IDE がベア メタルの使いやすさを模倣することを選択するのはなぜですか? それを行うためのより良いフォーマットがたくさんありませんか?パフォーマンスに夢中にならないのであれば、アドレス 0x0120 に値 0x5A80 を設定するとウォッチドッグ タイマーが停止することを平凡なコーディングで知っておく必要がありますか? ヘッダー ファイル/IDE は私にそれを作ることはできwatch_dog_timer( STOP );
ませんか?
codeblocks - AVR、CodeBlocks、および Proteus の CPU 周波数
さて、IDE として Code::Blocks を使用し、コンパイラとして Win AVR を使用しています。F_CPU は 8000000UL として選択されます。Atmega32 のコードを書いています。しかし、作成したコード (*.hex ファイル) を Proteus design suite (ISIS) で実行すると、_delay_ms(1000)で 1 秒の遅延が発生しません。書き込みか間違っているかわかりませんが、編集コンポーネントでCKSEL ヒューズを(0100) Int.RC 8MHzに選択しました。どうしたの?お願いします....
arduino - Arduino でタイマーを使用した遅延の導入
私はArduinoでレジスタレベルのプログラミングを行っています。目標は、タイマーを使用して独自の遅延ロジックを作成することです。コードは次のとおりです。
上記のプログラムは、遅延関数を使用せずにArduinoに遅延を導入し、問題なく動作するようにするためのものです。しかし、以下のコードを見てください。
このように書くと、プログラムはコンパイルされますが、Arduinoでは点滅しません。上記のコードに似た以下のコードが正常に動作している場合、何が問題になる可能性がありますか?
avr - ATMega2560 上の vsnprintf
ツールキットを使用して、ATMega2560 で楕円曲線暗号を実行しています。ツールキットで印刷機能を使用しようとすると、空の文字列が表示されます。x86 バージョンでは問題なく変数が出力されるため、出力関数が機能することはわかっています。私は ATMega の経験がなく、この問題について何か助けていただければ幸いです。印刷コードは以下に含まれています。
大きな数値を出力するコード (それ自体が util_print を呼び出します)
大きな数値変数を実際に出力するコード:
編集: UART が初期化されており、printf ステートメントをコンソールに出力できます。
assembly - LPM 命令が常に失敗する原因は何ですか?
プログラムフラッシュ領域に書き込む自己変更プログラムがあります(プログラムが実行されているフラッシュセクターとは別のフラッシュセクターに書き込むため、プログラムフローを中断しません-保護されたブートローダーセクションで実行されます)。
フラッシュへの書き込みという複雑な部分が機能します。デバッガーで確認できます。送信した値はフラッシュに正常に書き込まれています。
しかし、LPM
命令で内容を確認しようとすると、常にゼロになっています。
LPM
読み取りに失敗する可能性がある場合、次の原因を特定しました。
- ロック ビットが設定されている場合、フラッシュの読み取りを禁止します。ロックビットが設定されていないため、ここでは当てはまりません。
- フラッシュの読み取りは、前の書き込み命令のためにロックされています。ここではそうではありません。設定
RWWSRE
して緑色のライトが点灯するまで待ちますwhile (SPMCSR & 0b01000000) {}
- アドレスの計算を間違えました (Z ポインターのセグメンテーションは難しい場合があります)。ここではそうではありません。最初の単語 (アドレス 0) でも試しましたが、まだ機能しません。
次のコードをテストに使用し、フラッシュの最初の 2 バイトを読み取ります (書き込み命令は正常に完了しました。その位置のプログラム メモリはゼロではないため、デバッガーでチェックされます)。
その前に、Z
ポインターをゼロに設定し、それが本当にゼロであることをデバッガーで確認します (r30
およびr31
)。
ただし、フラッシュの内容に関係なく、常にゼロになりますr2
。r3
LPM
読み取りに失敗する別の状況はありますか?
avr - AVRDragonでATmega88をデバッグしようとしたときにエラーが発生しました
AVRDragonとAVRStudio6を使用してATmega88をデバッグしようとしています。プログラムはC++で記述されています。プログラムをデバッグしようとするたびに、メッセージボックスが表示されます。
"デバッグの開始": "AVR Dragon(00A2000006C63)上のISPはデバッグをサポートしていません。デバイスはプログラムされているだけです。このメッセージを回避するには、デバッグなしで開始を使用してください。"`
AVR Studio 4のアセンブラで記述されたプログラムをデバッグできるため、DragonはISPを介したデバッグをサポートしていると思います。プログラムは次のとおりです。
しかし、これは問題ではないはずです。プログラム自体はうまくいきます。
arduino - ADK2012で非5vアナログ基準電圧を使用
私はADK2012arduinodueのようなデバイスを持っています。私はGoogleのarduinoソフトウェアのコピーを使用しており、さまざまなスケッチを問題なくコンパイルして実行できます。
アナログ入力に接続したLM35があります。デフォルトでは、基準電圧は5ボルトです。これは正常に機能しているようですが、ここに記載されているように、別のanalogReference値を使用したいと思います。
http://arduino.cc/en/Reference/AnalogReference
残念ながら、問題が発生しています。私がこれを使うDEFAULT
かEXTERNAL
好きなとき:
コンパイルすると次のようになります。
INTERNAL
、、、INTERNAL1V1
またはに設定しようとするとINTERNAL2V56
、次のようなエラーが発生します。
私はここで少し行き止まりになっています。私はArduinoやWiringに精通していないため、これが提供されたデバイス構成の問題なのか、物理ハードウェアの実際の制限なのか、内部のバグや非互換性なのかを知ることができません。
私が使用しているハードウェアが比較的まれであり、多くのドキュメントがないように見えるのは残念です。この問題を解決するためにどこから始めればよいかについての提案をいただければ幸いです。