問題タブ [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.
i2c - Atmega64 ピンの質問です。SCL/SDA は TXD/RDX と同じですか?
私は決して Atmega のプロではありません。実際、彼らと一緒に働いたことはありません。Atmega64 コントローラーを使用するデバイスに、i2c インターフェイスを使用して外部 eeprom を追加しようとしています。データシートから、ピン 25 と 26 には PD0/PD1 というラベルが付いており、i2c の SCL/SDA であることがわかります。それはいいですし、ダンディです。それで、私はボードに行き、トレースを開始します。それらは、まだよく見ていないいくつかの単純な回路を備えたロッカースイッチに接続されていることがわかりますが、i2c互換のものであると想定しました。しかし、このデバイスにはそのようなロッカーが 2 つあるので、もう一方のロッカーを同じ 2 つのピンにトレースすることを期待していました (i2c は複数のスレーブを持つことができるバスであるため)。代わりに、PD2/PD3 および RXD1/TXD1 とラベル付けされた 2 つの隣接するピン 27 および 28 にトレースバックしました。さて、それは私を混乱させました。
SCL/SDA ラインで並行してメモリを追加できると思っていましたが、発見したことの意味は次のとおりです。
- SCL/SDA は RXD1/RXD2 または
- SCL/SDA がどのように機能するかについて混乱していますが、それはバスではありませんか、それとも単純な入力として使用できますか?
悲しいことに、私は私が何を求めているのかよくわかりません。誰かがこれに光を当てることができますか? メモリを SCL/SDA に追加できるかどうか。
ありがとう。
スティーブ
timer - タイマー割り込み内からのAVR長時間実行コード
2分ごとに実行する必要のあるコードがありますが、これは十分に単純なようです。問題は、タイマー内から長時間実行されるプロセスをトリガーすると、タイマーが不安定になるようです。助言がありますか。
私のCの知識はそれほど素晴らしいものではないので、いくつかの基本的なアイデアを手伝ってください。MCUはAtmelMega128Lです
長時間実行されるプロセスは、Telit GSMデバイスを介した(UART1を介した)http呼び出しです。これはそれ自体でうまく機能しますが、他のプロセスを監視する必要があるため、メインループから実行する必要があります。
c++ - AVRでは論理的な右シフトは2の累乗で速いですか?
2の累乗でシフトすると、論理的な右シフトの実行が速くなるかどうかを知りたいです。
たとえば、
より速く
皆さんの最初の反応は、このような小さなことについて心配する必要はないということです。正しいアルゴリズムとコレクションを使用して、重要な桁を削減していることを感謝します。私はあなたに完全に同意しますが、私は本当に組み込みチップ(ATMega328)からできる限りのことを絞り出そうとしています-私はちょうど「woohoo!」に値するパフォーマンスシフトを得ました。除算をビットシフトに置き換えることで、これが重要になることをお約束します。
arduino - ATmega328 + SPI フラッシュメモリ
序文:この質問は、私が大学の教授と一緒に取り組んでいるプロジェクトに関するものです。成績のためではありませんが、この教授に対する私の評判は重要です。したがって、このプロジェクトでの成功は私にとって重要ですが、スタック オーバーフローに助けを求めることが不公平だとは思いません。
とはいえ、これが私のプロジェクトの概要です。私はATmega328マイクロコントローラを持っています。Microchip SST 64 Mbit フラッシュ メモリ カードを持っています。ATmega には SPI のハードウェア実装があります。フラッシュ メモリには、SPI のハードウェア実装があります。
私の目標は、SPI マスター モードで ATmega を使用して、フラッシュ チップからデータを読み書きすることです。メモリは複数のオーバーレイ構造で編成されているため、消去には適していますが、私の目的では、基本的にはそれぞれ 256 バイトの 32,768 ページです。
データを書き込むための基本的な考え方は、命令バイト、開始アドレス、データの順に送信することです。データを読み取るための基本的な考え方は、命令バイト、開始アドレス、ダミー バイトを送信してから、データの送信を開始するというものです。
データシートは次のとおりです。
マイクロコントローラ: http://www.atmel.com/dyn/resources/prod_documents/doc8271.pdf
フラッシュ: http://www.sst.com/dotAsset/40498.pdf
コード:
したがって、これは、1 バイトをフラッシュにプログラムし、それを読み戻して、そのバイトを LED アレイに表示するテスト プログラムであると想定されています。LED アレイに興味がある場合は、ここで見つけることができます: http://evilmadscience.com/tinykitlist/157
これを初めて実行したとき、8 つの LED がすべて点灯したため、読み取り機能が機能していると思います。これは、工場出荷時の状態ですべて 1 のときにフラッシュ メモリを読み取ったことを示しています。どうやら、点灯するバイトがプログラムしようとしているバイトとまったく対応していないため、書き込みで何かを台無しにしてしまったようです。
また、Arduino 用のデフォルトの SPI ライブラリを使用していて、フレーム バッファ関数が機能していることにも注意してください。私が行うframe1.WriteRow(toDisp)
と、それは正しく機能しており、広範囲にテストされています。
誰かが私が間違っていることを理解する時間または忍耐力を持っているなら、それは非常に素晴らしいことです.
編集:デバッグを支援する:
LED は、SPI インターフェイスも使用するドライバー チップによって駆動されています。私はコードのその部分を書きませんでした。オシロスコープで、SCK ラインがコードのその部分によって駆動されているのを確認できます。ただし、MOSI ピンにもプローブがあり、ライトを点灯させないと、ハイになることはありません。私にとって、それは私が情報を正しく送信していないことを意味します。AKA...おそらくSPI.transfer()
有効化機能か何かが必要ですか?
android - Android の Bluetooth 制御信号 (DTR、DSR、RTS、CTS)
Bluetooth SPP を介して Android 経由で Arduino をリモートで再プログラムしたいと考えています。最初のステップは、ATMEGA マイクロコントローラーをリセットすることです。これは、DTR ラインを切り替えることによって Arduino で実行されます。Android 環境から Bluetooth SPP 制御線を制御する API はありますか?
arm - アームプロセッサファミリのuipv6
u(read mu)ipv6スタックをatmegaプラットフォームからarm platfom、特にSTM32F103Rxに移植する必要があるため、このプロセッサ用のライブラリが必要です。しかし、私はそれらをどこで見つけるかわかりません。誰かが私を正しい方向に向けてくれませんか?
c++ - ATmega8マイクロコントローラ用の独自のフラッシュソフトウェアを実装する方法
atmega8-microcontroller に独自の点滅手順を実装する方法について、何らかのドキュメントを持っている人はいますか?
検索すると、通常のフラッシュ ソフトウェア (ほとんどの場合 atmels フリップ) でカスタム ソフトウェアをフラッシュする方法に関するチュートリアルしか見つかりませんでしたが、独自のソフトウェアに実装する方法に関するドキュメントは見つかりませんでした。例えば。マイクロコントローラからのどのタイミングでどのコマンドとどの応答が返されるか。
それでは、よろしくお願いします
avr - ATMEGA88 のブートローダーを置き換える方法
アドレス 0x1800 にブートローダーがあり、アドレス 0x0000 にファームウェアがある ATMEGA88 チップを搭載したボードがあります。どちらもUSBにアクセスできます。ブートローダーは新しいファームウェアを書き込むことができますが、新しいブートローダーを作成する必要があります。
確かに、これは AVR プログラマーを使用する場合は問題ありませんが、USB を介してこれを行うことも可能ですか? 私の考えは、新しいブートローダーを書き込むことができる古いブートローダーを介して特別なファームウェアをフラッシュすることでした。それは可能ですか?はいの場合、どのように?
私の現在の試みは成功しませんでした。すべてのコマンド (boot_page_erase、boot_page_fill、および boot_page_write) は、ブートローダーが実行しているのと同じ方法で正常に実行されます (唯一の違いは、0x0000 ではなくインデックス 0x1800 で書き込みを開始することです)。フラッシュには実際には何も書き込まれませんでした。
c++ - AVR-割り込みベクトルとグローバル変数
私はATmega32を使用して32msごとに割り込みをかけ、任意の処理を行っていますが、これは今のところそれほど重要ではありません。
私はtimer0のタイマーオーバーフローを使用して割り込みを行っています。これは予測どおりに完全に機能します。
私の問題は、グローバル変数があることです。
volatile int isSampling;
それは割り込みベクタに書き込まれていません。volatile
コンパイラの最適化の可能性を排除するために整数が必要であると読みましたが、それを宣言しましたがvolatile
、まだ機能していません。
問題の原因となっている問題のあるコードを見つけましたが、なぜそれが原因であるのかわかりません。メインのwhileループから削除するloadValue(studentID[i])
と、コードは予測どおりに機能します。しかし、私がそれを元に戻すと、それは再び壊れます。