タグ付けされた質問 「avr」

AVRは、Atmelが開発した8ビットおよび32ビットのマイクロコントローラーコアです。AVRは、人気のあるArduino SBCのマイクロコントローラーとして選ばれました。

10
AVRの効率的な逆(1 / x)
AVRで逆数を計算する(または近似する)効率的な方法を見つけようとしています。 速度を直線的に変化させることができるように、ステッピングモーターのパルス周期を計算しようとしています。周期は速度の逆数に比例します(p = K/v)が、これをオンザフライで計算する良い方法は考えられません。 私の式は p = 202/v + 298; // p in us; v varies from 1->100 Arduinoの上のテスト、除算は離脱完全に無視しているように見えるpに固定298(おそらくこれはAVR-GCCで異なるだろうが)。また、をv超えるまでループで合計し、ループ202をカウントしようとしましたが、これは非常に遅いです。 ルックアップテーブルを生成してフラッシュに保存することはできましたが、別の方法があるかどうか疑問に思っていました。 編集:たぶん、タイトルは「効率的な分割」でなければなりません... 更新:pingsweptが指摘しているように、速度を速度にマッピングするための私の式は間違っています。しかし、主な問題は除算操作です。 編集2:さらなる調査で、除算はarduinoで機能しています。問題は、上記の誤った式と他の場所でのintオーバーフローの両方が原因でした。

7
AVR乱数ジェネレーター
TIのappnote(slaa338)を読んで、「擬似」ではなく「実数」の乱数を生成する手法について説明しています。この目標を達成するために、MSP430のややエキゾチックなクロックサブシステムを活用します。「実際の」乱数を生成するために、AVR(特にXMegaに興味があります)に実装できる手法を知っている人はいますか?

3
既知の基準なしで電圧を監視
私は、バッテリー切れの小さなセンサープラットフォームで作業しています。電圧が低くなりすぎたときにアラートをトリガーできるようになりたいです。問題は、その電圧を測定するために使用するものはすべて同じ電圧源から給電されることです。価値のあるものとして、4xAA充電式バッテリー(最初は4.8 Vですが、システムはXBeeトランスミッターを含む2 V程度まで動作するようです)からArduino Pro-miniクローン(3.3 V)を実行しています。 誰もこれを動作させる方法について賢いアイデアを持っていますか?ATmegaチップのアナログ入力を使用するものは、入力電圧をそれ自体と比較するだけのようです。たぶん、レギュレーターから来るものとバッテリー自体から来るものとの違いをチェックしますか?

4
誰かがArduinoのQP状態フレームワークを移植しましたか?
データロギングプロジェクトの可能なアプローチを検討する中で、「C / C ++の実用的なUMLステートチャート」という本は、Arduinoとのより深刻な作業にとって非常に興味深いことがわかりました。QPは、組み込みシステム向けの超軽量、オープンソース、ステートマシンベースのフレームワークのファミリであり、http: //www.state-machine.com/でフレームワーク(GNU GPL2)のコードとポートを配布します。 WinAVR / Gnu C ++ツールセットを使用したAVRおよびAVR megaのポート。 チップ固有のヘッダーは適切ですが、ボードBSPファイルを作成した人やこれらのフレームワークの経験はありますか?私は本から始まったばかりなので、コメントは大歓迎です。
12 arduino  avr 

5
寿命の長い回路の設計
私はpicマイクロコントローラーについて一定期間学び、デジタル電子機器の取り扱いについてかなりの知識を持っています。私は基本的な電子プロジェクトに取り組んできましたが、今ではいくつかの商用アプリケーションに取り組む必要があります。 私の質問は、信頼性が高く長持ちする回路を設計および構築する方法についてです。LDRから入力を取得し、7セグメントパネルにアナログ読み取り値を表示する自動照明コントローラー回路を構築しました。次に、いくつかの計算を行い、リレーを介してライトを制御します。この回路は常時オンにする必要があります(24時間)。最初の数ヶ月間、回路は完全に機能しましたが、約6か月後には誤動作し始めました。7セグメントディスプレイに無意味なものを表示し(数字の一部のみを表示)、インジケータLEDの電球を点灯しますが、リレーはオンになりません。これは予想された動作ではありません。問題は、常にそのように機能するとは限らないということです。時にはそれは完全に動作します。その後、再び誤動作を開始します。正確な順序はありません。 さて、私の質問は、これらの回路がこのように動作する理由です。これは、間隔を空けずに終日機能するためだと思います。この種のアプリケーションは、終日機能する必要があります。PICのみを知っているので、PICを使用します。picよりもatmalの方が信頼性がありますか?(写真が使用されるよりも頻繁にatmalがほとんどのオートメーションアプリケーションで使用されるため、私は尋ねました)デジタルエレクトロニクスの専門家からいくつかのアドバイスが必要です。この種の産業用アプリケーションはどのように構築されますか?従うべき特別なルールはありますか?より信頼性の高い回路を設計する方法は?専門家からのアドバイスやガイダンスは大歓迎です。ありがとうございました... 編集 回答で示唆されているように、デザインのバグを把握するのに役立つ追加のリソースを提供して、回答を編集します。 以下は、構築後の回路の様子を説明する画像です。回路に電力を供給する12Vのセンタータップトランスで、半波整流器を使用して整流し、次に7805 ICを使用して調整します。 以下は回路図設計です。 追加情報が必要な場合は、必要なものをすべて提供します。プログラムが必要な場合は追加します。プログラムはやや長く、割り込みを使用します。

4
AVRフラッシュメモリの破損
この質問は、AVRのプログラミング解除自体に関連しています。 プロジェクト情報: ATMEGA644Pを使用したバッテリー駆動製品があります。アプリケーションはスリープモードで永続的に実行され、1秒間に1回(RTC)または2つの外部割り込みラインの1つがトリガーされたときにのみ起動します。 このデバイスは、UART(RS232インターフェースICを使用)で通信する非常にシンプルなブートローダーを備えています。これは、ハードウェアISPプログラマーが必要ないように、ファームウェアを更新する便利な方法としてのみ機能します。(ブートローダーは、チェックサムで保護された電報を期待しています) 消費電力が2倍になり、長いバッテリー寿命が必須であるため、デバイスは内部ブラウ​​ンアウトを無効にして設計されました(外部ブラウンアウト検出を使用する必要があったと思われます-再設計が進行中です)。 問題: 数か月ごとにデバイスが機能しなくなり、それらのデバイスでファームウェアの更新が実行されませんでした。ただし、さらに調査した結果、これらのデバイスのフラッシュコンテンツは破損しているようです。さらに、これらのデバイスの一部のバッテリーはまだ良好でしたが、何らかの低電圧状態を排除したくありません。 これは、元のフラッシュコンテンツ(左)と破損したコンテンツ(右)の比較です。 いくつかの観察: 破損したブロックは常に少なくとも1つのフラッシュページ(256バイト)で構成され、ページに揃えられます。つまり、影響を受けるのはページ全体であり、1バイトではありません。 破損したコンテンツはほとんどの場合0xFFを読み取りますが、他の値が含まれているか、完全に「ランダム」である可能性もあります。 画像の左側にある小さなバーは、影響を受けるすべての領域を示しています。このデバイスの場合、合計フラッシュコンテンツの約10分の1です。 影響を受けるページが1つだけのデバイスが1つありました。 フラッシュメモリへの書き込み中に低電圧状態が発生すると、フラッシュの内容が破損する可能性があります。ただし、これは、一部のフラッシュに敏感な命令を実行する必要があることを意味します。 おそらく、コントローラーは低電圧のためにランダムに再起動しており、この間、ブートローダーコードはまったく予測不可能な動作をしている可能性があります。不足電圧に関する別のフォーラムの人を引用するには: 「実行されるのはフラッシュからのランダムな命令だけではなく、ランダムな命令期間です(フラッシュからのコードが正しく読み取られ、解釈されるという保証はありません)。メカニズム。」 質問:「不足電圧時のランダムな動作と、フラッシュページ内のデータを変更する命令の実行」 と思われますか?説明は正しいですか?その場合、ソフトウェアの問題(スタックオーバーフロー、無効なポインター)の原因として、この種のエラーを常に表示しないのはなぜですか。 この種の破損を引き起こす可能性のある他のアイデアはありますか?これはEMI / ESDが原因ですか?

2
Cソースから直接AVR EEPROMをプログラム
AVR Cソースに以下のコードを含めると、追加のコマンドや.hexファイルを必要とせずに、ヒューズを直接プログラムすることができます。 #include <avr/io.h> FUSES = { .low = LFUSE_DEFAULT , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , }; EEPROMに値をプログラムする同様のトリックはありますか? /usr/lib/avr/include/avr/fuse.hマクロに関するコメントが見つかる場所を確認しましたが、で同様のコメントが見つからず/usr/lib/avr/include/avr/eeprom.h、プリプロセッサの解釈が私のリーグから少し外れています。 CのソースコードにデフォルトのEEPROM値を含めることができれば、とても便利です。誰でもそれを達成する方法を知っていますか? edit1: このFUSESトリックはISP時間にのみ実行され、RUN時間には実行されません。そのため、コントローラーの結果のアセンブリコードにはヒューズがプログラムされていません。代わりに、プログラマーは追加のFUSESプログラミングサイクルを自動的に繰り返します。 edit2: Linuxではavr-gccおよびavrdudeツールチェーンを使用しています。
11 avr  c  attiny  eeprom 

2
新しいマイクロコントローラーに欠陥があるかどうかをどのように判断しますか?
私はパーツをdigikeyからの欠​​陥海峡で扱ったことはありませんが、受け取った3つの新しいAtmel ATmega164Aは非常に奇妙な動作を示しています。 私はそれをクロックに関係する何かに絞り込みました、そして、おそらく「工場で較正された」内部発振器からの結果として生じるクロック信号は、それがそうであるはずの固体1 MHzの代わりに650-700 kHzの間でジッターしていることがわかりました。私はこれを1 MHzに非常に近づけるためにキャリブレーションバイトに書き込むことができましたが(ほとんどジッターはあります)、ほとんどのものが機能しますが、UARTは正しく動作せず、短いパルスの連続ストリームを出力しているようですあなたが彼らに何をするように頼むか。 私は以前にこのマイクロコントローラーの低電力バージョン(164P)を問題なしで扱い、それを所定の位置にドロップしてその上のクロック出力をチェックすることを決定しました。これらの164Aチップには欠陥があるという結論に傾いていますが、それを確認するために他にテストを試すことはできますか? 編集:私が時計を測定しているプロセスを説明すると思いました。クロック出力ヒューズビットを有効にし、適切なピンをロジックアナライザーで非常に高いレートでサンプリングして測定しました。キャリブレーションレジスタに書き込むプログラムがありOSCCAL、1 MHzまで試行錯誤することができました。 編集#2:さらなる調査の後、マイクロコントローラーは特定のプログラムサイズの後に動作し始めるようですしきい値。単一のソースファイルがLEDを点滅させる最小限のプロジェクトは問題ないようですが、他のファイル(たとえばUARTライブラリなど)をコンパイルしてリンクし、それらのメソッドへの関数呼び出しを行わなくても、マイクロコントローラーが動作します。上記の動作。電源接続は問題なく、適切なデカップリングが行われています。現時点ではこれをデバッグする時間がないので、代わりに低電力バージョンを使用しました。どこに問題があるのか​​正確にわかりません1)164Aと164Pはコード互換ではありません2)これら2つのuCのプログラミング手順が異なります3)ユニットに欠陥があります。私はボード設計に自信があり、電源の問題を除外します。残念ながら、私は実際には正しい答えを選ぶことができないので、この質問はそのままにしておきます-多分私は 将来再び問題に戻るでしょう。洞察に満ちたコメントや回答を提供してくれた皆さんのおかげで、すぐに使えるuCの問題を抱えている他の人に役立つかもしれません。

1
Arduinoブートローダーの詳細
Arduinoブートローダーがどのように機能するかを誰かが説明できますか?ここでは高レベルの答えを探しているのではありません。コードを読んだので、その要点を理解しました。私はこの他の投稿も読みました(私はそれへの応答者の1人でさえありました)。 Arduino IDEとブートローダーコードの間に発生する一連のプロトコルの相互作用により、最終的に、シリアルインターフェイスを介して送信されるプログラムでフラッシュを自己プログラミングする多数のインラインアセンブリ命令が生成されます。 はっきりしないのは270行目です。 void (*app_start)(void) = 0x0000; ...これは、関数ポインタの宣言およびNULLへの初期化として認識されます。ブートローダーがユーザーがロードしたコードの実行に委任することを目的とした場所で、app_startへの後続の呼び出しがあります。 確かに、app_startこれをすべて組み合わせるには、ある時点で何らかの方法でNULL以外の値を取得する必要があります。ブートローダーのコードにそれが表示されていません...ブートローダーによって読み込まれるプログラムによって魔法のようにリンクされていますか?ブートローダーのメインは、チップのリセット後のソフトウェアへのエントリポイントだと思います。 アセンブリの70行程度にまとめると、app_startが実際にどこにあるかをメインプログラムに伝える秘密のデコーダリングである必要がありますか?それとも、Arduino IDEによって利用されている暗黙の知識ですか?私が知っているのは、誰かがapp_startを0以外の場所を指すように変更しないと、ブートローダーコードが永遠にそれ自体をスピンさせるだけだからです。 別の言い方をすれば、ブートローダーコードが割り込みに依存することは可能ですか、それともノーノーですか? 編集 ブートローダーコード用に個別のメモリスペースを持たないTiny AVR(具体的にはATTiny44A)にブートローダーを移植することに興味があります。ブートローダーコードが特定のヒューズ設定とチップサポートに依存していることが明らかになったので、私が本当に興味を持っているのは、これらのヒューズとハードウェアを持たないチップにブートローダーを移植するために何が必要かということです。サポート(ただし、まだセルフプログラミング機能があります)? USIを半二重UARTとして使用するためにAVR307の実装を使用できると考えていました(Timer0割り込みとピン変更割り込みを使用)。誰でも、ブートローダーのハードウェアサポートがないチップのブートローダーコードを作成/移植する方法についてのガイダンスを提供できますか? ブートローダーコードをアドレスmainの通常の場所(たとえば、0x029eまたはコンパイラーがmainを配置する場所)に置くと思います。次に、ブートローダーコードの「アドレス」にオフセットを追加してメインの終わりを過ぎたところに置き、「app_start」をそのアドレスに設定するようにします。私はこれについて正しく考えていますか、それとも完全に何かを逃していますか?ありがとう! 編集2 FWIW、私はArduinoのスケッチをATTiny85にロードする方法の文書化されたプロセスを見つけました。これは、私が最初にこの質問で行っていた場所です...かなりきちんとしていると思います

10
Linux / Mac AVRプログラミングスイート?
私はArduinoをコーディングしてかなり長い間使用しています。しかし、私はarduinoブートローダーなしでストレートAVRチップを使用する準備ができています。私の質問は、これを行うためのリソースは何ですか? Linux / Macを使用したいので、winavrはavrstudioのようには見えません。私が何をしているのかわからない場合は、Windows仮想マシンを使用します。しかし、私が確信するまでは。私が欲しいのは、avr-gccを使用するある種のIDEです。 この質問へのボーナスとして、誰かがavrのためにCを学ぶ上で何か良いリソースを持っていますか?具体的には、さまざまな異なるチップ用にMakefileなどをどのように構成するのですか?
11 atmega  avr  linux  osx 

5
Arduino / AVRのコードのクロックサイクルを監視しますか?
コードのブロックを監視し、コードがArduinoやAVR atmelプロセッサで実行したプロセッサクロックサイクル数を特定することは可能ですか?または、コード実行の前後に経過したマイクロ秒を監視する必要がありますか?注:「このコードがCPUから必要とするクロックサイクル数」と同じくらい、リアルタイム(経過した実際の秒数など)には関係ありません。 私が思いつくことができる現在の解決策はtime.cからです: #define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) #define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() ) lighting.cは以下を追加します。 #define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() ) このアカウントにより、通過したマイクロ秒を監視して通過したクロックサイクルを計算し、それをmicrosecondsToClockCycles()に渡すことができます。私の質問は、より良い方法はありますか? 補足:AVRのパフォーマンス監視のための優れたリソースはありますか?lmgtfy.comやさまざまなフォーラムの検索では、タイマーの調査以外に明らかな結果は得られません ありがとう
11 arduino  avr  atmel  timer 

2
AVRアセンブリ言語の単体テスト
アセンブリコードをどのようにユニットテストしますか? 私はヘキサポッドロボットプロジェクトの一部としてシリアルサーボコントローラーに取り組んでいますが、コードは複雑になりつつあります;)とにかく、C ++サーバー開発者としての日常業務で単体テストを使用することに慣れています。私のAVRアセンブリコードに同じ種類のテストを適用しようとしています。私は問題なく動作する方法を見つけましたが(ここを参照)、標準ツールやテクニックが足りない場合は興味があります。 更新:サーボコントローラの完全なソースと単体テストに興味がある方のために、ここで利用できるようになりました。
11 avr  robotics  serial  servo 


2
AVRでTimer0を使用しない理由は何ですか?
基本的な質問だけです... arduino / avr / ATMega328の場合、Timer1を使用した例がたくさんあります(そのためのライブラリ全体もあります)が、Timer0(またはTimer2)を使用する例はほとんどありません。 これらのタイマーのいずれかを使用してISRメソッドを制御すると、関連するピンでのPWMの使用が無効になることはわかっていますが、Timer0から離れているように見える特定の理由はありますか?内部で使用してはいけない他の何かに使用されていますか? 私の現在のアプリケーションはTimer1を使用して問題なく動作します。他の無視されがちなこれらのタイマーについて何か不足しているのではないかと気になります。

3
Linux PCでArduino Unoをgdbでデバッグするにはどうすればよいですか?
Linux pcでgdbを使用してArduino Unoをデバッグ(ソースコードシングルステップ)するにはどうすればよいですか?私はワインやVirtualBoxでAVR Studioを使用したくないことに注意してください。 質問1:物理的な接続 Unoボードに接続する方法と方法を教えてください。私の推測では、UnoボードにはATmega328が実装されているため、シングルステップのソースコードを使用できるはずです。ICSPヘッダーでAVR JTAGICE mkIIまたはAVR Dragonのどちらかを使用できると思いますか? 質問2: GDBサーバー それから、gdb関数にjtagを提供しているように見えるAVaRICEのようないくつかのプロジェクトがあることに気付きましたが、他のプロジェクトがあるかもしれませんか? 質問3:エルフはどこにいますか? そして、私がそれを立ち上げて実行している場合、Arduino IDEはelfファイルのように生成された出力をデバッグシンボル(1つあるはずです)でどこに隠しますか?または、Ardino libsのみを使用する古典的なMakefileを生成する必要がありますか? 私は何をどのように使用するかについての情報を見つけようとしましたが、私に何ができるかを教えてくれる手がかりを見つけただけです。誰かが私を正しい方向に向けることができますか?
10 arduino  avr  linux  debugging 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.