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

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

2
ブートローダーの書き込み後にATTiny85が機能しない
ATTiny85に問題があります。私はそれをプログラムするためにISPとしてArduinoを使用していることを言及しなければなりません。 クロック速度を1MHzから20MHzに上げる必要があると判断するまで、私のATTinyは問題なく機能したので、BoardsメニューからATTiny85を20MHzで選択し、Tools> Burn Bootloaderをクリックしました。しかし、今は私のATTinyがまったく機能しないため、それは愚かでした。スケッチをアップロードできず、試してみると次のメッセージが表示されます。 avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check. だからあなたへの私の質問は、私がしたことをリセットする方法はありますか?それとも、20MHzで動作させるには?

2
AVR割り込みサービスルーチンが期待どおりに実行されない(命令オーバーヘッド?)
7つの入力を持つ小さなロジックアナライザーを開発しています。ターゲットデバイスはATmega16820MHzのクロックレートです。ロジックの変更を検出するには、ピン変更割り込みを使用します。今、私はこれらのピンの変化を検出できる最低のサンプルレートを見つけようとしています。私は、最小5.6 µs(178.5 kHz)の値を決定しました。このレートを下回るすべての信号は適切にキャプチャできません。 私のコードはC(avr-gcc)で書かれています。私のルーチンは次のようになります。 ISR() { pinc = PINC; // char timestamp_ll = TCNT1L; // char timestamp_lh = TCNT1H; // char timestamp_h = timerh; // 2 byte integer stack_counter++; } キャプチャした信号の変化はにありpincます。それをローカライズするために、4バイト長のタイムスタンプ値があります。 データシートで私が読んだ割り込みサービスルーチンは、ジャンプするのに5クロック、メインプロシージャに戻るのに5クロックかかります。私の各コマンドのISR()実行には1クロックかかると想定しています。要するに、5 + 5 + 5 = 15クロックのオーバーヘッドがあるはずです。1クロックの持続時間は、20MHzのクロックレートに従う必要があります1/20000000 = 0.00000005 = 50 ns。秒単位の合計オーバーヘッドは、次のようになります15 * 50 ns = 750 ns = …

3
RTCのバックアップ電圧をチェックすると、バックアップバッテリーが消耗しますか?
私は時間を維持する予定のATMegaプロジェクトに取り組んでおり、ソフトウェア時間(millis()ベース)、DS1307、またはDS3231(ChronoDot)RTCのオプションを選択できるようにしています。 最も基本的に、私がやりたいのは、はんだ付けに使用できるChronoDotのヘッダーを用意し、ソフトウェアでなんとかしてChronoDotが接続されているかどうかを検出し、それを使用するように切り替えることです。通常、DS1307またはDS3231が同じI2Cレジスターを使用しているため、DS1307またはDS3231が存在することを確認するのは簡単ですが、最初の確認後は少しずれ、後者にはより多くの機能があります。したがって、どちらが接続されているかを判断したいと思います。一般的に、私はデフォルトのオプションとしてDS1307をはんだ付けするためにボード上に直接配置することを計画しており、DS3231サポートはデュアル4ピンヘッダーを介してのみ完全なChronoDotを使用します。ChronoDotは基本的に、DS1307が通常行く場所に適合します(この場合は装着されません)。私が特にChronoDotに焦点を合わせている主な理由は、普及しており、入手が簡単で、エンドユーザー(これはキットの場合)にSMDはんだ付けを必要としません。だから、これが私が考えていることです... DS1307とDS3231はどちらもチップにVbatラインがありますが、実際には何も必要ありません。ただし、ChronoDotにはブレイクアウトボード上に実際のVBatピンがあります。DS1307ではなくChronoDotヘッダーからVbatのみを接続して、それをATMegaのデジタル入力ピンに接続することができます。しかし、その入力ピンは抵抗によってグランドにプルダウンされていますか(本当にどの値なのかわかりません...おそらく4.7k?)。私のEE理論が正しければ、そのピンを読み取ることができます。ローになった場合、クロノドットはありませんが、クロノドットはあります。 このようなもの: この回路のシミュレーション – CircuitLabを使用して作成された回路図 ここでの私の主な質問は、これを行うと、RTCのバックアップバッテリーが消耗してしまうかどうかです。通常、メインの5V電源が供給されている間はバックアップバッテリーから電流が引き出されませんが、これをデジタル入力に接続すると、常にバッテリーから電力が引き出されますか?または、いわばピンを「切断」するために、ピンを読み取った後にピンを挿入する必要があるモードはありますか?出力に変更できることはわかっていますが、出力とローに設定されている場合、基本的にはバッテリーを接地していると思います。 とにかく、私のEEコースはずっと前のことです。ここでの理論に関するどんな助けもいただければ幸いです。

2
サーミスタ用のバイアス抵抗の選択
Rtサーミスタです。Rbバイアス抵抗です。この値を計算する必要があります。私が興味を持っている温度はのRt抵抗範囲を与えています4k...115k。私が欲しいのです全体ADCの分解能、これを拡張することである10ビットすなわち0...1023。したがって、Rt = RbADCがそれをに変換するとき511。それは可能だが、理想的に私が取得したいと思いわからない場合は0、ADCの読み取りRt = 4kおよび(または他の方法で)。1023Rt = 115k MCの内部には、サーミスタデータシートに記載されている曲線に従って、ADC値を温度に変換するルックアップテーブルがあります。

2
USB HIDデバイスを作成する最も簡単な方法
所有しているRCリモコンのハッキングに取り組んでいます。私がやろうとしていることは、それを開いて、電位差計を利用することです。ポテンショメータから提供されるアナログ値を読み取り、信号をPCに送信したい。基本的には、HID USBインターフェースを備えたジョイスティックのように機能させるために、それを再利用したいと思います。もちろん、HIDインターフェースは必須ではありませんが、これを実現するには最良の方法だと思います。 私はAVRマイクロコントローラーファミリに精通しているので、最初はATMega8でV-USBのようなものを試すことができました。それと同時に、私はそれがいることを考えるようになったことがあり、不必要に困難になります。銀行を壊すことなくそのような接続を実現する簡単な方法はありますか?
8 usb  avr  atmega 

5
AVRのCコードでのこのキャストの何が問題になっていますか?
2つの変数を定義しました。 uint8_t a[2]; uint16_t b; 次にa、型の変数として使用しますuint16_t。例: b = (uint16_t)a; しかし、これは間違っています!私のプログラムはそのようなコードでは正しく動作しません。要素ごとの操作に置き換えbてuint8_t b[2]使用すると、すべて問題ありません。 どうして?
8 avr  c 

3
このタイプの数字のみのLCDは何と呼ばれていますか?
このタイプのLCDを重量計、電卓、ゲージ、マイクロメーターなどで何度も見ました。かなり伝統的なディスプレイであることは知っていますが、TFTやスマートフォンよりもコンパクトでシンプルで、コストも安いのが気に入っています。タイプタッチディスプレイ。 [ なんていうの?@ kevlar1818および@stevenvhによる回答:「7セグメント表示」] このタイプのLCDを操作したいと思います。たとえば、DigikeyカタログからVIM-878と呼ばれるこの8桁のLCDを見つけました。こちらがデータシートです。 どうやってインターフェースするのですか?Atmega8のような単純なAVRマイクロコントローラーから、できれば物理的に大きくないインターフェース回路/部品とインターフェースするための良い/一般的な方法を教えてください。 ある種のドライバまたはマルチプレクサが必要になると思いますか?私は、このタイプのLCDとのインターフェースの経験がより良い他の人から、いくつかの最初の視点を探していると思います。

3
趣味のARMセットアップは、このAVRのセットアップと同じくらい簡単ですか?
私は、Atmel AVRのセットアップが趣味のアセンブリ言語プログラミングでいかに簡単かを気に入っています。例えば: ブレッドボードにプレーンなATmega DIPチップ{A}を置く コンピュータに接続されているUSBプログラマ{B}に 6本のピンを接続します(例)。(チップは、書き込み中と通常の動作中の両方で、この接続の一部によって給電されます)。 任意のテキストエディターを使用してアセンブリ言語プログラムを記述します。 avra {C}を使用してプログラムをアセンブルします avrdude {D}を使用してプログラムをチップに書き込みます ARMの世界は、基本的にはより高いレベル/より複雑なものですか、それとも{A} {B} {C}と{D}に相当する、同様の簡単なセットアップを可能にする同等のものを教えていただけますか?Windowsのみのものは関係ありません。 ありがとうございました。 注:単純なセットアップの動機はアセンブリプログラミングであり、コンパイラとIDEを完全に回避したいと考えています。
8 avr  arm  assembly  avrdude 

3
アナロググランドプレーンを実装する方法
多くのAtmelデータシートでこの写真を見てきました。これはATTiny48 / 88データシートからのものです。 これを2層ボードに適切に実装する方法を誰かが詳細に説明できますか?PCBでアナロググラウンドプレーンをデジタルグラウンドプレーンに接続する必要があると想像する必要がありますか、それともAVRの内部で発生しますか?破線は、文字どおりアナロググランドプレーンの形状と範囲を表すためのものですか(図に寸法がないため、疑います)。
8 avr  adc  analog  ground 

1
AVR Atmega328pの静的ライブラリを作成するにはどうすればよいですか?
CのArduinoによく似たライブラリを作成しようとしています。 私は過去に試しましたが、コードを失いましたが、すべてのオブジェクトファイルを含む(avr-objdumpによってチェックされた)ヘッダーファイルとライブラリで指定された関数への未定義の参照を大量に取得したことを覚えています。 ライブラリ(サンプルmakefile)をコンパイルする方法と、プログラムをライブラリにコンパイルする方法を知りたい。また、すべてのAVRおよびクロック速度用にライブラリを再コンパイルする必要がありますか、それとも回避策がありますか? さらに情報が必要な場合は、質問してください。 ありがとう 編集:例(機能しない) program.c #include "test.h" int main(void) { test_function(); } test.c #include "test.h" void test_function() { int i; i++; } test.h #ifndef __TEST_H_ #define __TEST_H_ void test_function(void); #endif
8 avr  c  library  avr-gcc 

2
MCUピンからの圧電ブザーの駆動
ピエゾブザーをMCU(私の場合はSTM8S)に接続するための正しい回路を探しています。特定のブザーのpartnumber \ datasheetはありませんが、データシートに類似の回路図がいくつか見つかりました。 それらのいくつかは、(この質問で説明されているように)保護ダイオードも備えています。圧電ブザーに接続されたこのドライバのダイオードの機能は何ですか? MCUピンに直接接続するとブザーが機能します(測定電流は約3mA)。 だからここに質問があります: ブザーを流れる電流が非常に少ない場合、本当にトランジスタが必要ですか? MCUに非ピエゾ(磁気)スピーカーを接続するための良い回路とは何ですか?私は500オームの直列抵抗を備えた8オームのスピーカーを試しました-音が非常に低いです。


4
AVR自体のプログラミング解除
AVRが数か月後に不思議なことに動作を停止したインスタンスを他の誰かが持っていますか? ワイヤレスセンサーネットワークで多数のatmega328を実行しています。そのうちの1つが機能を停止したばかりのとき、私は3回(約1年で)過ごしました。プログラムを再度書き込み、再び動作します。必ずしも同じユニットとは限らないため、チップの不良ではないようです。 それは人々がAVRを使用するのを妨げるかなり悲惨なことのように思われるので、それは明らかに私の特定の状況についての何かです。他の誰かがそれに遭遇し、いくつかのポインタがあるのではないかと思っていました。 バッテリーを3.3Vで使用しているので、電圧が低下して数か月に1回は作動できなくなり、充電式バッテリーを交換する必要があります。モジュールは、スリープモードとウォッチドッグタイマーを使用して60秒間スリープし、測定値を取得して無線で基地局に送り返し、その後再びスリープします。モジュールはarduinoと互換性があるため、「これを再書き込みさせない」ビットを反転していません。
8 avr  flash  arduino 

7
MCUを使用した0〜1MHz(0.25Hz分解能)方形波の測定
0から1MHzの範囲で変化し、0.25Hzの分解能を持つ方形波の周波数を測定する必要があります。 私はまだどのコントローラーを決定していませんが、それはおそらく20ピンAttinyの1つでしょう。 通常、より低い周波数の信号を測定する方法は、タイマーキャプチャモードで設定された2つのタイマーを使用して、外部信号の立ち上がりエッジで割り込みを行うように設定し、別のタイマーを毎秒割り込みするように設定することにより、前のタイマーは1秒後のレジスタ値をカウントします信号の周波数に等しくなります。 ただし、この方法は明らかに0.25Hzの解像度で0〜1MHzの範囲の信号をキャプチャするには機能しません。これには22ビットカウンターが必要です(AFAIK 8ビットマイクロには8/16ビットカウンターしかない)。 私が持っていたアイデアの1つは、信号をマイクロに適用する前に分割することでしたが、信号を61で除算する必要があるため、これは実際的ではなく、周波数は61秒ごとにしか更新できず、数秒ごとにしたい場合があります。 頻度を4秒ごとに更新できる別の方法はありますか? 更新: 最も簡単な解決策は、外部割り込みまたはタイマーキャプチャを使用して、信号の立ち上がりエッジで割り込みを行いisr、変数の型をインクリメントすることですlong int。4秒ごとに変数を読み取ります(0.25Hzまでの周波数を測定できるようにするため)。 アップデート2: JustJeffが指摘したように、8ビットMCUは1MHz信号に追いつくことができないため、すべての立ち上がりエッジで割り込みを中断し、long int... 私はtimororrが提案した方法を選びました。実装に取り​​掛かったら、投稿して結果を共有します。ご提案いただきありがとうございます。 経過報告: ここで紹介するアイデアのいくつかをテストし始めました。まず、vicatcuのコードを試しました。頻度の計算後にTCNT1がクリアされないという明らかな問題がありました-大したことではありません... 次に、コードをデバッグするときに、約2〜7回の頻度で計算されたタイマー1(外部イベントをカウントするように構成されたタイマー)のオーバーフローカウントが2だけ短いことに気付きました。これをタイマー0 ISRのレイテンシに置き、ifステートメントブロックをISRからメイン(以下のスニペットを参照)に移動して、ISRにフラグを設定することにしました。いくつかのデバッグは、最初の測定は問題ないが、その後の読み取りごとに、タイマー1のオーバーフローカウントが2を超えることを示しました。これは説明できません。 int main() { while(1) { if(global_task_timer_ms > 0 && (T0_overflow == 1)) { global_task_timer_ms--; T0_overflow = 0; } ..... } } 次に私はティムロスの提案を実装しようとすることを決めました。Atmega16の唯一の16ビットタイマーが外部信号の立ち上がりエッジをキャプチャするために使用されているため、必要な間隔(各timer_isr割り込みの間に約15ms)を生成するには、2つの8ビットタイマーをカスケードする必要があります。 オーバーヘッドのほとんどがタイマーにシフトされ、CPUが処理する短い残りが1つしかないため、このソリューションが機能し、はるかに効率的だと思いました。しかし、私が期待していたほど正確ではなかったため、測定値は約70Hzだけ前後にシフトしましたが、高周波数では問題にはなりませんが、低周波数では許容できません。私は問題の分析に多くの時間を費やしませんでしたが、2つの16ビットタイマーを備えた非常に遅い8051コントローラーにtimrorrsの提案と同様の構成を実装しており、結果は非常に正確だったため、タイマーのカスケード構成はそれほど正確ではないようです。 これでvicatcuの提案に戻りましたが、周波数計算をTimer 0 isr (下のスニペットを参照)に移動しました。このコードにより、一貫して適度に正確な測定が行われました。少しの校正で、精度は約+/- 10Hzになります。 ISR(TIMER0_OVF_vect) { TCNT0 = …

2
BLDCおよび三相インバータ
私はDVD / CD-romプレーヤーからBLDCモーターを実行/制御したいと思っています。これを行う方法、いわゆる3相インバーターの回路図を見つけました(このページの右側の回路図を参照してください:http : //en.wikipedia.org/ wiki / Inverter_%28electrical%29#Three_phase_inverters)。 いくつかの異なるタイプのトランジスタと、信号/タイミングおよびトランジスタのオープン用にATtiny2313を使用してすでに作成しましたが、BLDCを実行していません。LEDは正しく点灯しますが、BLDCには十分な電力がないと思います。私のこの構成には「逆並列ダイオード」はありません。 さて、私の質問ですが、BC639の回路図でNPNを作成できると思いますか?私は3,50ユーロで50をもらえるので、他のものにも使用できます。逆起電力用の「逆並列ダイオード」についてはどうですか、それらは必要ですか?モーターは非常に速く回転する必要はなく、簡単な速度で十分です。そして、タイミングについてはどうですか、オープン/パルスはどれくらいの時間がかかりますか(何ms)?または、他のもの/別のトランジスタ/回路図を使用する必要がありますか? 助けてくれてありがとう。
8 avr  motor  driver 

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