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

ATMegaは、AtmelマイクロコントローラーのAVRシリーズのファミリーです。これは、Arduinoプロトタイピングプラットフォームのメインマイクロコントローラーです。質問には特定の部品番号を指定してください。

7
atmega328をバッテリーで1年間動作させるにはどうすればよいですか?
シナリオ 私は寮の部屋に素敵な電子ドアロックを作成しました。現在は、ドアをロックする[un]サーボを備えたArduino Diecimilaです。3x4ボタンと5つのLED(2つのセリエペアと1つのLED)を備えた数字キーパッドがあります。現在、携帯電話の充電器でも動作します。 スタンドアローンのArduino(ATmega328)で動作するように再設計しましたが、単三電池または9V電池でも動作させたいと思っています。 ソフトウェアの部分についてはsleep、ATmegaの電力消費を可能な限り低く抑えるために、ループメソッド内で一定の時間呼び出しを行うことができると考えました。そして、可能な限り長い時間をオフにして、LEDを「点滅」させます。 質問1 ボードがスリープする数ミリ秒の間にボタンが押されると、スリープから抜け出すまで「記憶」/「保持」され、ボタンが押されるとピックアップされますか? スリープ時にこのボタンを押すのに最適な方法は何ですか?ボタンのアクティビティで起動するようにコーディングできますか、それともたとえば10秒間スリープさせる必要があります。すべてのループで? 質問2 このデバイスを10か月間使用するために必要な単三電池の数を計算する数学にどのようにアプローチしますか? また、1分あたりの平均電力使用量を測定する方法がわかりません。これは、交互にすばやく変化するためです。 デバイス

7
I2Cラインのプルアップ抵抗を省略するとどうなりますか?
たった今、I 2 Cデータとクロックライン(SDAとSCL)にプルアップ抵抗が必要であることに気付きました。 さて、以下の回路図に従って、DS1307 RTC(データシートを参照)を使用していくつかのクロックを作成しました。両方のプルアップ抵抗が省略されていることに注意してください。 どちらの時計も正常に動作し、そのうちの1つは現在3か月以上動作しています。そんなことがあるものか?いずれにせよ、私は知りたいと思いました: I 2 Cプルアップが省略されるとどうなりますか? プルアップがないと、ボードのこれら2つのICのいずれかが損傷する可能性がありますか? 私が提供した回路図のようにATmega328PをDS1307 RTCに接続する私の特定のケースに対処する答えを求めていますが、質問が広すぎない場合、プルアップが一般的に省略されたときに何が起こるかを知ることは役立ちます、つまり、I 2 C操作の他のシナリオで。 PS。ネットで検索して答えを見つけましたが、プルアップの寸法に関する記事を見つけることができました。 更新:私はArduino IDE 1.03を使用しており、ファームウェアはDS1307RTC Arduino libを使用してRTCを処理します(その機能RTC.read()とを通じてRTC.write())。そのライブラリはWire.h、RTCとの対話に使用されます。 更新2:以下は、外部プルアップなしでI 2 Cがどのように動作するかを説明するために撮影した一連のスコープショットです。 更新3(I 2 Cプルアップを追加した後):適切な(4K7)プルアップ抵抗を(同じボードの)I 2 Cラインに追加した後に撮影した別のスコープショットです。立ち上がり時間は約5 µsから290 nsに低下しました。I 2 Cは今ではずっと幸せです。
33 atmega  i2c  pullup  rtc 

5
ATMega8:なぜVCCとAVCCを接続する必要があるのですか?
VCCをAVCCに接続することをお勧めします。ATMega8データシートでも、次のように書かれています。 AVCCは、A / Dコンバータ、ポートC(3..0)、およびADC(7..6)の電源電圧ピンです。ADCを使用しない場合でも、外部でVCCに接続する必要があります。ADCを使用する場合は、ローパスフィルターを介してVCCに接続する必要があります。ポートC(5..4)はデジタル電源電圧VCCを使用することに注意してください。 しかし、どこでそれらを接続する必要があるのかについての説明はどこにもありません。LEDを点滅させる簡単な回路は、VCCとAVCCを接続せずに機能します。 私はそれを受け入れる必要がありますか、それとも正当な理由がありますか?
20 avr  atmega  basic 

5
ATmega16でデジタル入力を読み取るにはどうすればよいですか?
ATmega16でデジタル入力(プッシュボタン)を読み取るにはどうすればよいですか?プルアップ抵抗を有効にする必要がありますか、10kΩを使用できますか?簡単なコードはどうなりますか?単純な「押されたときにLEDをオンにする」だけです。 初心者向けのチュートリアルはありますか?私はグーグルとAVR Freaksを試しましたが、すべてがそこで戦いに発展し、答えが得られません。私はこのことに関するチュートリアルを実際に見つけていません。たくさんの特定の事柄がありますが、私のAVRマイクロコントローラーについて簡単なことはありません...
18 avr  atmega 

9
膨大な数のアナログセンサーをリアルタイムで読み取る
ギターのような首を持つMIDIのようなコントローラーを構築しようとしています。その首には、圧力センサーの巨大なマトリックスがあります。コントローラーは3つのストリングをエミュレートします。 これが機能する方法は次のとおりです。電源(3.3Vまたは5V、おそらく今のところは問題ありません)に接続されている3枚の長尺の両面銅テープ(首まで幅0.5 cm)があります。これらのストリップには、圧力に基づいて抵抗率を変化させるベロスタットの層があります。ベロスタットの上部には、何かに接続された銅テープの列またはセルの別の層があり、ベロスタット層を介して電圧の読み取り値を吐き出します。首の長さは約40 cmなので、少なくとも80列あります。 首に沿ったチャートの列として銅テープの下部の3つのストリップを想像すると、センサーは測定方法に応じてセルまたは行のいずれかになります(列を多重化することもできると思ったので、ただし、これを簡単にする特別な条件がいくつかあります。これはギターのようなコントローラーなので、すべての相互作用を測定する必要はありません。コントローラーの本体に最も近いタッチのみが重要です。また、8ビットの解像度でも十分に正確である必要があります。とにかく、255の圧力レベルはおそらく必要以上です。 難しい部分: 測定は、ハンマーオンなどを検出するのに十分なリアルタイムyである必要があります(サンプルレートをどれだけ高くする必要があるかわかりません-良好な測定と再生可能性のために数kHzで推定)およびコントローラーのデジタル出力はMIDI(3つの独立したチャンネル-文字列ごとに1つ)またはRaspberry Piで処理できるデジタル信号。 今、私の知識は本当に限られているので、仕事に適したツールを考えることができませんでした。しかし、私が知っていることは、それは可能です。非常によく似た手法を使用する同様の異なるコントローラーがあります(私が気づくまで、実際にリバースエンジニアリングしました。特許があり、その方法に関する情報は思ったほど難解ではありません)、それはROLIと呼ばれますシーボード。 TL; DR: 約240個のセンサー 同じ回線で動作する80のグループに分離できます これはリアルタイムのアプリケーションです。タッチされるたびにすべてのセンサーから圧力を取得する必要があります(いくつかの条件が適用されます。上記を参照) 事前に感謝します、私はそれが読むことがたくさんあることを知っています。私はどんな提案にも感謝しており、あなたが私が作り出すために着手した恐ろしい混乱を達成するのを手伝うことができれば非常にうれしいです! 私がこれまで考えてきたこと: 行と列を多重化し、MCP3008以上のADCで各セルを読み取り、位置信号の最小の相互作用のみを最終信号にプッシュする(デイジーチェーンまたはツリーのような)ATmegas通信のオーバーヘッド。また、初期のモデルにはリボンポテンショメータが含まれていましたが、デザインが悪い(何度か試行しましたが、十分にクールではなかった)ため、私はそれを破棄しました。 編集/更新: これまでのところ良い提案をありがとう!彼らのおかげで、問題をより明確に表現できるようになりました。 80行×3列の圧力センサーのマトリックスがあります。人間がセンサーマトリックスと対話しているとき、近接している複数のセンサーがタッチを検出しますが、これは列に沿っている場合のみです。カラムは機械的に分離されています。センサーの抵抗は100Ω〜1kΩです。これらのセンサーはすべて、8ビットの深さで読み取り、処理する必要があり、結果は少なくとも1 kHzのレートで送信する必要があります。したがって、1回の読み取り/処理にかかる時間は1ミリ秒未満である必要があります。列ごとの最終出力は、float32では4バイト、uint8では1バイトである必要があります。float32は、列に沿った最初のインタラクションの平均位置を示します。相互作用は、特定のしきい値を超える圧力を持つセンサーの連続クラスターとして定義されます。これが処理がミックスに入る場所です:読み取り値がしきい値を超えるまで、列は下方向に走査されます。これは、インタラクションの開始としてカウントされます。すべてのセンサーの圧力と位置は、最初のセンサーまで記憶され、最大(おそらく)最大4つの連続センサーでしきい値を下回ります。記録された相互作用のすべてのセンサーから、2つのセンサーのみが処理されます-最高圧力(最低抵抗)を読み取るセンサーと、そのすぐ上または下にある最高センサー。浮動小数点位置は、圧力で重み付けされた2つのセンサー位置を平均することで計算されます。相互作用の全体的な圧力は、0と255の間にクランプされた両方の圧力を加算するだけです(unit8の両方の圧力をuint16に追加し、丸めることなく2で除算し、不要なビットを破棄します-これは高速です)。これはすべての列で発生する必要があります。15バイトのサイズの結果は、SPIを介して、シンセサイザーとして機能する小さなコンピューター(Raspberry Pi B3)に送信されます。私は、送信方法については設定されていません。SPIが仕事にふさわしいツールではない場合、Raspberry Piで処理できる通信の方法を採用しても構いません。これは音楽とインタラクティブなアプリケーションであるため、レイテンシは非常に重要です。 私の正確な質問は次のとおりです。これは、銀行を壊すことなく単一のマイクロコントローラーで解決できますか?趣味のプロジェクトのために数百ドル相当のICを買う余裕はありません。どのハードウェアをお勧めしますか?警戒する必要がある非自明な警告はありますか? これまでの回答から得たアプローチは、各列に個別に電力を供給し、SPIを介してArduinoに接続された5つの16チャンネルADC(ADS7961)で行を読み出すことでした。これは、最も簡単で安価なアプローチではないか、1 kHzを超えるレートに達するのに十分な速さではないのではないかと心配しています。 免責事項:私は通常、理論化学者であり、電気工学に関しては恐ろしいアマチュアです。私が知っていることはすべて自習であり、専門的なバックグラウンドがありません(これが私がより知識のある人々から助けを求めている理由です)。しかし、私はソフトウェアに関する私のやり方を知っています。ソフトウェアに関することなら何でも、十分な時間をかけて考えます。また、私はドイツ人ですので、時折文法の欠陥を許してください。

6
ATMega328と内部発振器を使用していますか?
ATMega328Pに最適なプロジェクトがあると思います。しかし、私が見たすべての単純なプロジェクトでは、人々は常に16MHzの外部発振器を接続しています。私が見ることができるものから、それは8MHzの内部発振器を持っているはずです。私のプロジェクトは、多くの処理能力を必要とせず、タイミングも非常に正確である必要はありません(UARTおよびI2Cを除く)。プログラマーもいるので、ブートローダーについて心配する必要はありません。 外部発振器を使用する理由はありますか?
17 avr  atmega  oscillator  clock 

2
SMD Arduinoを使用して別のDIP ATmega328をプログラムするにはどうすればよいですか?
表面実装(SMD)マイクロコントローラーを備えたArduinoを使用しています。 DIP arduinoをDIP ATmega328のプログラマーとして使用する方法を知っています。簡単です。マイクロコントローラーをホルダーに入れるだけです。 ただし、表面実装Arduinoでは、明らかなことはありません。マイクロコントローラーのはんだ付け解除は1つの方法ですが、それは厄介で破壊的です。 ボードに致命的なダメージを与えることなく、このArduinoをDIP ATmega328のプログラマーとして使用できますか?もしそうなら、どのように?

2
ISPからの読み取りからAVRフラッシュを保護しますか?
ISPを介した読み取りからフラッシュ全体を保護しようとしています。ブートローダーがあり、アプリケーションセクションを自己プログラムできます。 ロックバイトの設定: LB1/LB2 ユーザーがブートローダーを使用して新しいファームウェアをアップロードすることを許可しません。 BLB12/BLB11そしてBLB01&BLB02、私は間違っていないよ場合は、ISPを通じてフラッシュを読んで防ぐことはできません。 それでは、ユーザーがカスタムブートローダーによってファームウェアを更新し、同時に読み取りからフラッシュを保護する方法はありませんか?
15 avr  atmega  protection 

1
V-USBはATmega328pのビルトインSPIをどのようにねじ込むことができますか?
ATmega328pを使用してキーボードとして表示されるV-USBプロジェクトに取り組んでいます。USB部分はうまく機能しています(最初のV-USBプロジェクトではありません)が、でV-USBスタックを開始した後usbInit()、SDカードライブラリへのすべての呼び出しが失敗します。以前usbInit()に同じ関数を呼び出した場合、すべてが完全に機能します。 Diavolinoと呼ばれるArduinoクローンを使用していますが、Arduino / wiringフレームワークは使用していません。USBをデジタルI / O 2および3に接続し、SDカードを10-13(内蔵SPIライン)に接続しています。 SDカードライブラリを調べたところ、以外の割り込みまたはレジスタを使用してその兆候は見つかりませんでしたSPxx。私もgrepV-USBコードを使いましたが、SPxxレジスターにさえ触れません。 問題の最初の兆候は、SDカードにアクセスすることになっているときにデバイスが切断されたときでした。それから私は置きますusbPoll()wdt_reset()、すべてのSDカード処理ループて呼び出しますが、書き込みの場合、カードは最後の2バイト(CRC-16)を送信した後、カードからの確認応答を永久に待機します。 私が使用するSDカードライブラリはsd_raw、Roland Riegelによるものです。
14 avr  atmega  spi  usb-device  sd 

3
MOSFETとマイクロコントローラーを使用してDCモーターを駆動しますか?
3.3Vで動作するAtmega328マイクロコントローラーと非常に小さなブラシ付きDCモーターを使用して、ナノクワッドコプターを開発しています。これらのモーターで使用される平均電流は、3.7Vで約800mAです。 最初は、それらを駆動するために、L293Dモータードライバーを使用しましたが、このコンポーネントは非常に非効率的でした。モーターが最大出力で動作したときに測定された電流は約500mAであったため、推力は本来よりもはるかに低くなりました。 ここで、この問題を解決するために、そのモータードライバーを4つのロジックレベルMOSFETに置き換えます。長い検索の後、私はこれを見つけます(2SK4033)。 それが機能するかどうか知っていますか?ダイオードと組み合わせて使用​​する必要がありますか?答えが「はい」の場合、これ(MBR360RLG)はどうですか? これらのコンポーネントを選択したのは、同じオンラインストアから購入できるからです。

1
Arduinoをプログラマとして使用することから外部プログラマにどのように切り替える必要がありますか?
ArduinoからプレーンAVRマイクロコントローラーへの移行に関する3部シリーズの第2部と最小限のサポートコンポーネント(第1 部、第3部) 多くの人がインターネットでこれを尋ねるのを見たので、ここに行きます: プログラマーとしてArduinoを使ってベアボーンATmega328をプログラミングして使用する方法をすでに知っています。Arduino IDEで外部プログラマーを使い始めたいと思います。 この移行をどのように進める必要がありますか?何を学ぶべきですか?(一部の部分のミニチュートリアルが回答の一部として提供されていればいいと思います)

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
新しいマイクロコントローラーに欠陥があるかどうかをどのように判断しますか?
私はパーツを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の問題を抱えている他の人に役立つかもしれません。

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

3
ピン変更割り込みの正しい使用法
ピンの変更割り込みを使用して、押されたボタンを検出しようとしています。これまでは、この種の割り込みを扱ったことはなく、いくつかの問題があるので、これが正しい使い方かどうかを確認したいと思います。 データシートが正しい場合、ピン変更割り込みを使用するには、次のことを行う必要があります。 制御するPINをPCMSKレジスタに設定します ピン変更割り込み制御(PCICR)のPINレジスタを有効にする 割り込みを有効にする 対応する割り込みベクターを使用する プロジェクト:シンプルなムードランプ、4つのボタンで色を制御。 セットアップ: Atmega168A-PU 4つのミニプッシュボタンスイッチ 私の3ワットRGB LEDを制御するMOSFET これが私が使用しているコードで、期待どおりに機能していません: #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <util/delay.h> #define BUTTON1 (1<<PC5) #define BUTTON2 (1<<PC4) #define BUTTON3 (1<<PC3) #define BUTTON4 (1<<PC2) #define GREEN (1<<PB1) #define BLUE (1<<PB2) #define RED (1<<PB3) void init() { // enable LED DDRB |= …

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