Arduino初心者熱烈大歓迎質問スレ part22
■ このスレッドは過去ログ倉庫に格納されています
>>112 >>113 センサーの出力なんて 「自分の出力値よりかなり高いレベルまで充電済みの容量性負荷」 に繋ぐことなんて想定してないってことか 横からだけど勉強になった 頭の片隅にいれとこう 入出力の端子全部使うとかはやめといた方がいいのかな やめといた方がいいような数のポートなんか付けたりしないのでは? つまり全部使っても問題ないと思う。 実際はどうなのか知らないけど。 >>105 蛇足かもしれんけど、>>112 さんのを補足すると >『ADMUXレジスタに書き込んで、マルチプレクサが安定するまで待つ』と言った記述 の「マルチプレクサが安定するまで待つ」は間違いで、 「マルチプレクサ切り替えに伴って生じる回路の過渡応答が収まるまで待つ」という ほうが正しい また、AVRのマルチプレクサ切り替えのタイミングは、ADMUXレジスタに書き込んだ時では なくて、変換開始(ADSC立ち上がり認識)時だから、 ・ADMUXレジスタに(新しいチャンエル番号を)書き込み ・100us 待つ ・変換開始・終了を待ってデータ取得 のようなことをしても、事態はあまり改善しないはず 「AD変換周期をカット&トライで伸ばした」っていうのが、実際にはどうやったのか分からないけど 単純に待つかわりに、変換結果を一回読み飛ばすとかしないとダメだと思う そうすれば、マルチプレクサ切り替えからサンプルホールド開始までの時間は 10倍くらいとれるから、センサーの出力インピーダンスはデータシート推奨上限 10kΩの10倍、100kΩくらい行けると思う あ、長文書いたけど間違ってるな orz ・ADSC立ち上がりでチャンネル変更 ・ホールドキャパシタはADSC立ち上がりから1.5クロックの時間だけ入力に接続され その後切り離される ・ホールドキャパシタの保持している電圧をAD変換 ・変換終了した時点でホールドキャパシタは再度入力に接続っていう流れだな (データシートにははっきり書いてないけど) そうだとすると、一回目のAD変換を読み飛ばすだけじゃだめで、変換終了後 delayを入れてホールドキャパシタを充放電しなきゃダメだな まさか、変換開始から1.5クロックの時間だけしか入力に接続されないようになってるって ことはないと思うけど、そこはデータシートからは読み取れない(と思う) >>123 検証したら分かるがAVRマイコンのs/hキャパシタが入力回路に繋がってる時間は1ADCクロックだけ Arduinoで言えば125kHzだから8μ秒ね なんで外部回路の出力インピーダンスはこの時間でs/hキャパシタを充放電出来るようになっているべき 要するに ADSCが1なことを確認したADCクロックの立ち下がりでマルチプレクサ確定してサンプリング開始 1ADCクロック経過後にサンプリングが終了して保持に入る データシートに ・少なくともADSCを書いてから1変換クロックはマルチプレクサは弄るべきでない ・ADC入力のナイキスト周波数はADCクロックの1/2である ことか記されているのはこの為 データシートに保持のタイミング(ADSC認識の立ち上がりの次の立ち上がり)しか書いてないのはAtmelが悪く、不親切だと思う https://www.avrfreaks.net/comment/759794#comment-759794 検証方法はこの人と全く一緒(mcuをmega328でやっただけ) 追記 なので、当然ADCを使用しない場合は内部回路の漏れ電流でしか放電されないので時間を空けたところであまり好転しない 例に挙げられているLM35のようにソース側のみ強力に稼働できるものを繋げて正確に読み取りたい場合は 一度s/hキャパシタをGNDに低インピーダンスで繋げて放電してやれば次の初回変換でも正確な値を返す Arduinoの関数にはないがADMUXのMUXには入力ピンでなくGNDに直結する設定値が用意されてる これを使えばピンを無駄にしなくてもs/hキャパシタがディスチャージ出来る GNDでADC→センサー1でADC→GNDでADC→センサー2でADC→GNDでADC→センサー3でADC→…… センサーのソース駆動インピーダンスが十分に低ければこれで正確な値を返す(シンク駆動インピーダンスは高くていい) もちろん回路全体のセンサーサンプリング周波数は半減する 多少の測定誤差が増えても平気ならAVRのADCは1MHzまで動作が保証されてるからADCクロックを高速化したらいい 200kHzまでなら誤差が最大2LSBだが1MHzでは倍の4LSBになる(データシートより) (サンプルホールド回路のサンプリング時間はさらに減るので駆動インピーダンスに注意) ほっといても放電されないね。変換したときしかサンプルしないから。 何かAD変換したあとフローティングのピンを測ると前と同じ値をずっと言ってくるよ。 >>120 マルチプレクサが固定されるのがADSCを拾ったときなだけで、変更自体はいつでもされてるから中段は間違いだよ。 早い話、MPX切り替えた時にADC状態初期化が要る というだけなんだがな (一回空読みでもよい) だから、fsがあげられるなら2倍にしてやればよい というだけなんだがな どうしてホールドするとき以外は外につなぐようになってないの? マイコンのピンはADCだけじゃないんだから他の回路の特性に影響が出るじゃん ポートの交換機能たくさんあるだろ?目的の機能が作動する時しか繋がないよ >>132 たぶん>>131 はポートに繋がってる時間(=サンプリング時間)が短いことが言いたいワケじゃなくて >>125 の解決法みたいに自動的にGNDにディスチャージしとけば?って言いたいんじゃねーかなと思った >>131 連続変換だと13ADclkごとにADCが掛かるわけで、2ADclk目でサンプルホールドは終わってるけど 残りの11ADclkはホールドした電荷をAD変換に使っているわけだからホールドしてなきゃ意味ない時間だろ そして質問者>>105 の使い方は13ADclk毎にずっとAD変換させてるわけで「サンプリング中」と「ホールド中」以外の時間はほぼ無いじゃん? 質問者のように出来るだけ高速でセンサー連続監視する使い方じゃなく、必要なときだけAD変換すればいいなら 使い終わった後ADENを0に(AD変換をオフに)すれば次回起動時にはちゃんとディスチャージされてるよ(>>128 が書いてる解決法ね) 連続変換でこの手を使うと毎回初回変換扱いになるから12ADclk伸びて25ADclkの変換時間がかかる事になるから >>125 の1回GNDを測るのとAD変換のサンプリング周波数はほぼ同じようなもんになっちゃうけどね 111から後、すっごいためになった こういう情報もらえるのがArduino(AVR?)のいいところだね マイナーなマイコンだとこうはいかない まあ、LM35DZ使う場合に限ってだと、1k抵抗通して0.1uFくらいのコンデンサ入れて おくだけでいいかも 秋月の pro mini 互換で動いてたけど 壊してしまった。 電気的な壊れではなく 踏んづけて・・・ また 買ってきたのだが 書き込みがうまくできない なんでだろ・・ >>135 pro mini は書き込み時のリセットのタイミングがシビアな個体があった気がする。手でリセットボタンをタイミングよく押すか、USBシリアルのどこかににコンデンサ挟むとか、検索すると色々出てくるよ。 有難う エラーはこんな感じ avrdude: stk500_recv(): programmer is not responding . . . avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00 >>138 秋月のUSB 経由 設定はAVRISP かAVR ISP MKII >>139 う〜ん、わかんねw がんばってw 一応書いとくわ @USBケーブルをチェック、交換してみる(意外とこのトラブルが多かったりする) APCが書き込み装置を認識しているか、デバイスマネージャで確認する B>>136 の方法で、ArduinoIDEのログ画面を見ながら、書き込む瞬間にタイミング良くリセットボタンを押す Cブートローダが書き込まれてない? ケーブル ,USB I/F, pro mini 全て新品同一品 (PCより外側全部 交換) usb デバイス認識 OK シリアルloop back テスト OK ブートローダは書き込み済みのはず 踏ん付けちゃったのが正常に書き込み出来てたんなら 初期不良かなー とりあえずもう一枚pro miniを買ってきて、環境の問題かボードの問題か切り分ける。 ただ、俺は同じようにpro miniでリセットでハマったことがあるのでそれ以後はほぼpro microを使ってる。 動作しました リセット回路 0.1u 電源 10u 入れて何回かトライしたら 動作したので ためしにはずしてみたら 動作してる んーー原因がはっきりしない 昨日の猛暑ではまるっきりだったのに (ノートPCはエラーがでてwifi 環境の不動作がたびたび発生してた) ピンに負担がかからないようツイストケーブル20cm位いれても 問題ないし >>148 よかったね。俺の場合は、あるpro mini個体が元々問題なく書き込み出来てたのに、ある日突然書き込み出来なくなった。 でリセットボタンをタイミングよく押せば書き込み出来たけど、いちいち面倒なのでそれ以降pro microに変えた。aitendoでpro mocroは700円、pro miniは650円。 回路図見たらreset 端子- gnd 間にコンデンサが入ってないんだね・・ Arduino IDEアップデートのメッセージ出るけど ボードもIDEもエラーでアップデートできてないみたいなんだけど なんかやり方がある? ARDUINO 1.8.6 2018.08.23 [ide] * arduino-builderを1.4.0に更新しました: - 並列ビルド(コンパイル速度を向上させる) - すでにコンパイルされたファイルの再利用 - Windows:OneDriveクラウドフォルダの下に保存されたスケッチの固定ビルド *ライブラリタイプの翻訳が追加されました。ありがとう@ReAlUA *プログラマーメニューにスクロール機能を追加。 *スクロール可能なメニューに「アクセラレータ」が追加され、スクロール中に「a」キーが押された * "ボードマネージャー"メニュー項目は常にメニューの最初のものにしておきます * "Manage Libraries"は "Tools"メニューにもあります。ありがとう@feikname *コンパイラエラーは列と行の両方を持つようになりました *シリアルモニタはどのように "タイムスタンプを表示"オプションを持っています。ありがとう@MichalSy * Linuxでの高解像度モニタのDPI検出の改善 *検索/置換テキストフィールドにコピー/ペーストコンテキストメニューを追加 いくつかの仮想/接続されていないネットワークインターフェイスが存在する場合、長いIDE起動時間を修正 * Windows上でファイルを保存する際の一貫性のない行末の問題を修正 * mdns:到達可能性ではなくボードをTTLで消滅させる。ありがとう@kurtgo *ライブラリマネージャ:マウスクリックの代わりにマウスをオンホバーでインストール/削除ボタンを表示 *ボードマネージャー:インデックスが壊れているというまれなケースを修正 * Windows:コマンドラインからIDEを実行しているときにデバッグ出力を一部削除しました *選択可能なユーザー定義のテーマをサポートします。ユーザーのテーマは、スケッチブックの「テーマ」フォルダ内のzipファイルです。 * Library Manager:library.properties内のライブラリによって宣言されたヘッダー(.h)もライブラリ検索で検索されるようになりました * "--version"をCLIに追加しました。ありがとう@yohsuke *プロッタが開くことができない場合、固定シリアル・モニタ/モニタが永久に無効になる *「名前を付けて保存」で時々更新されない固定ウィンドウタイトル。ありがとう@JxJxJxMxNxS *増加/減少フォントサイズの固定キーバインディング * Preferencesダイアログのアクセシビリティを改善しました。ありがとう@coreyknapp [コア] * AVR:NanoのデフォルトブートローダーとしてOptibootを設定します。これは新しくインストールされたブートローダーです Arduinoナノボード。古いブートローダを持つNanoをお持ちの場合は、選択する必要があります Tools> Processor> ATmega328P(Old Bootloader)をクリックしてアップロードします。 * AVRコアは、独自のリポジトリに移動しました:https://github.com/arduino/ArduinoCore-avr * gcc 5.4.0にアップデートされたtoolchain [wifi101-firmware] *セキュリティ修正:WPA2 KRACKの脆弱性(最新のWINC1500ファームウェア19.5.2)の修正をリリースしました。 >>150 arduino ide用だから コンデンサつけると書き込みエラーになると思う atmelのプログラマー使うのであればあってもよい 秋月のボードにはそれを切り離す端子がある i2c のプルアップ、電源だけ切り離せるようになってるだが・・ delayとか要らなくてもタイマー0の溢れ割り込みは使えないんですか? 定義するとエラーになります。millisとか纏めて使用不能になってもいいので使う方法ありますか? 比較A割り込みと比較B割り込みはPWMに使っているので使えません >>157 AVRとしては可能だけど、ライブラリがないんじゃないかな エラーになるって、具体的にどういうふうに書いてるの? >>157 ここにスケッチ貼ってリンク張って http://codepad.org/ あとArduinoの型番と開発環境も http://codepad.org/02kwmeNA これでいいんでしょうか?ボードはUnoでIDEのバージョンは1.6.11です スケッチが悪いのかと思って最少構成にしてみたのですが以下のエラーがでます 比較A割り込みを使えばちゃんとうごきます wiring.c.o (symbol from plugin): In function __vector_16': (.text+0x0): multiple definition of__vector_16' E:\Users\Master\AppData\Local\Temp\builda7b0dfd25be122d472f8da494ec6c0a5.tmp\sketch\Blink.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 ボードArduino/Genuino Unoに対するコンパイル時にエラーが発生しました。 >>160 タイマー2はライブラリがあって速度が変えられるので別なことに使いたいです タイマー1はサーボを使うと確か使っちゃいけないんですよね? hardware/arduino/avr/cores/arduino/wiring.c の中でシステムの ISR(TIM0_OVF_vect) が既に有って二重定義に成る訳で これを変更したとしてどうやって実際のビルドに反映させるのか知らないので 別の方宜しく TimerOneライブラリの、attachInterrupt() のようにすればいいんじゃ? ソースの場所が分からんけど ^^; あ、164はダメだな orz. TimerOne.cppの中で ISR(TIMER1_OVF_vect){ Timer1.isrCallback();}って定義して isrCallbackを後からattachInterrupt()で書き換えるってやり方だけど ISR(TIMER0_OVF_vect) のほうは、すでに定義されてるから同じやり方できない、ってことだものな 安易に問題回避するなら hardware/arduino/avr/cores/arduino/wiring.c を書き換える? 自分で定義を書いてもdelayとかの定義が上書きされるわけじゃなくてただエラーになるだけみたいなので IDEのなかのファイルを書き換えるのは怖いし、ぜったい戻し忘れて他のスケッチがおかしくなりそうです 今回のプログラムではD6ピンのPWMは25〜230までしか指定しないから常にPWM信号がでていたので D2ピンに繋げていた部品をA3ピンに移してA3ピンをD17ピンとして使って、D2ピンを空けてあげて INPUTにしたD2ピンにD6のPWM信号ををつなげて外部割込み【RISINGを指定】の所にやりたかった内容を書いたら タイマー0が0になるたびD6がHIGHになって外部割込みがちゃんと起動したので 結果的にTIMER0_OVF_vectと同じ挙動になりました ありがとうございました >>166 今回の話とは関係ないけれど 前々スレ http://rio2016.5ch.net/test/read.cgi/denki/1514503488/ の55前後の話を 読んどくといいよ アップされてたコードには、同じような(ありがちな)ミスがあったようだから あと、ちゃんと理解できてないんだけど、166のは比較A割り込みを使うのと どう違うの?(動けばいいわけだから、別に非難してるとかじゃないです) >>168 Arduinoの高速PWMはカウンタが0になるとHIGH、カウンタがOCR0nと一致でLOWが出るようになってるわけ。 その仕組みで>>166 のように25〜230をOCR0nに設定するならだいたい10%〜90%のduty比の信号が出力される。 比較割り込みはOCR0nと一致時に割り込むわけだから、ループ中にPWMのduty比が変更されるとそこだけ割込み周期がおかしくなる。 たとえばさっき230までに設定されてて次に25が設定されたとすると、(高速PWMモードのOCR0nは二重緩衝されるのでBOTTOM(=カウンタ0)で更新される) 230になるとそこで割込みが発生、255の次で0に戻った時に25に更新され、次の割り込みは25で起きるからこの時だけ51タイマカウントしか間が空かない。 逆に、25だったのが230に更新されると、25(割込み)→255→0→230(割込み)になるから461タイマカウント経過しないと割込みが発生しないことになる。 1行目の通りPWMのポジティブエッジは必ずカウンタが0に戻った所にあるから、それをキャプチャすればかならず256タイマカウントで割込みが起きる。 それなら、溢れ割込みと同じタイミングと言えるし、かつPWMのduty比を変更したところで周期のブレを受けない。(PWMを止めたら割り込み発生しなくなるが) なのでPWMを使ってるのに比較割り込みを使うと「動けばいい」にすら到達しない。ちゃんと動かない。 コレを見ろ。 https://i.imgur.com/toavH7e.png スケッチ。 https://paste.ofcode.org/qkeJ969pTV9vDap8VbHGzF# 悪い、右のアノテーションの3段目(一番下)のラベルは OCR0B = 25 の間違い。1つ上からコピーして変え忘れた。 ロジアナでぐぐれ。オシロとはちと違う。 オシロがアナログ信号向けとしたらロジアナはデジタル信号向け。 (アナログ測れるチャンネルもあるけど) 知りたかったのは、なんというロジアナか、なのかな。そう聞けばいいのに。 https://www.saleae.com/downloads/ pin数の少ないATtinyで一つのpinに複数の機能が割当てられてる時 対象pinの使いたい機能はどのように選択するのでしょうか それもうAVRの質問では? 別にmega328Pだって1つのピンにいろんな機能があるぞ。それと同じ。 >>174 それいいな。 中華400円ロジアナで使えたわ。 >>178 Saleaeは海賊版で使うなと怒ってるからなぁ 中華クローンのVIDとPIDがSaleaeのやつ勝手に使ってんだよね… アップデートでアクティベーション式にするというアナウンスも前にあったが… sigrokからpulseView落としてそっちにしときな >>181 もちろん、もう前からずっとpulseViewを使ってますよ。 arduinoに指定した回数のパルスを発生させる関数て無かったっけ? あれでも>>169 の様な問題出るのかなとぐぐってみたら関数自体が全然見当たらなかった 何かのライブラリだったのかな そりゃすまん悪気はないんだ pulseViewも使いやすいしな ID盗用してるせいで挿すとSaleae Logicて認識されるけどw 激安シリーズでアナログ1chも追加でついてるやつもあったんけど今は出てないのかな >>183 パルスとはちょっと違うがshiftOutのこと? あれってどのピンても使えるしソフトウェア実装では >>185 方向+ステップ数のステッピングモータードライバでステップ数をPWMで 済ませてる様なのを見た記憶があったんだけど、多分ソフト実装だったんだね ああ俺が言いたかったソフトウェア実装ってマイコンのタイマーとかSPI用シフトレジスタとかそういう機能を使ってるわけじゃないってこと 標準のI/Oだけで実現してるものをソフトウェアなんとかって言う たとえばUnoのSerialはハードウェア実装でマイコンのUSART部がやってくれるから通信中はCPUはあるはそこそこほかのことやれる(代わりにピンは決まってる) ライブラリSoftSerialは全部ソフトウェアでやってるのでどのピンにも出来るが全部CPUが頑張って通信してるのでほかの事があんまりやれない 400円でロジアナ買えるの?早速調べてこなくちゃ・・・・・ >>188 400円じゃ無理かな。 つい最近買ったのは送料込み459円だったけど。 >>189 マジレスする。 例えばこれはI2Cの通信を見て、送ってるコードをチェックしてみたところ。 https://i.imgur.com/svfhvSP.jpg >>174 のリンク先のソフトと中華ロジアナを使ってる。 459円のじゃなくて1000円くらいのだけどね。 ちゃんとデータが送られてるか、いろんなプロトコルを解析してくれるよ。 俺みたいなアマチュア初心者には普通に繋げばちゃんと動くじゃんって思うから分からんがプロだと波形をみたいことがあるんだね。 波形って言うとちょっと語弊があるけど…。 まあ、Arduinoやってる分にはあまり必要無いかなあ。 Bit-BangでI2Cを実装するとかなら、どうかいなと見てみないと効率悪い。 語弊があるのは俺にでもわかる 伝わればいい bitbangが云々 やっぱりコアな人にしか必要にならないぽいね、デジアナ >>194 ほう、どういう語弊があるの? 分かるなら説明してみ。 波形っていうと電圧の生波形を連想するんだろ? しきい値で0と1にデコード?してるからもはや波形とは言えない?的な。 >>192 実際そうだと思うよ、必要になったら買うのだ 例えばさ、慣れてきてどんどん処理を追加していくと あれ?プログラムはちゃんと書いたしピンの繋ぎもあってるのに通信がうまくいってないぞ?なんで!ってなるときがいつか来るのよ 上で出てる割り込みのせいかもしれないし、何か追加した処理に使ったライブラリが悪さをしてるのかもしれないし 他の回路に引いた電流で電圧がドロップして回路がおかしくなってるかもしれないし・・・etc だけどそれってスケッチだけでデバッグするにはめちゃくちゃ大変なのよ、そりゃ頑張れば出来なくはないけれど どこで、どうして、通信が上手く行かないのか分かると原因究明や対策がしやすいでしょ? そこでロジアナで実際にどういう信号が出てて、想定したものとどう違うのか見れたら嬉しいだろ? 「電池に豆電球を繋いだのに光らない、部品の公称電圧と接続はあってるのに」 これくらいなら「豆電球が切れてる・電池がない・リード線が断線してる」くらいだから総当たりで部品取り換えたら原因究明できるけど テスターがあれば、まずどこが悪いのか調べられるじゃん? それの派生みたいなもんよ 上の豆電球みたいに試していくのがめちゃ大変なら、ロジアナがあればまずどこがダメなのか調べたら楽になる ちゃんと作ったハズなのに動かない、そうなったとき欲しくなるワケ あと>>169 が解説にオマケではっつけてあるやつも これくらいなら言葉で書いてあればわかるけれど 実際に波形見た方が分かりやすいだろうと思って撮ってくれたんでしょ、たぶん 自分も厳密にやってないけど、部品点数が増えたり クロックが上がったりでタイミングが難しくなったとき ロジアナの出番がある認識 千円くらいで買えるようになると、Arduino ボード・IDEと一体になってて ワンタッチで「D2,D3の波形を表示」みたいなことできるようにならんかな? Adafruit trinketかわいい(*´▽`*) >>201 すでに1000円で買えるわけだが 一体とかワンタッチとかになってなきゃいかんの? ちょっと言ってることのニュアンスがつかめない。 信号見たいって思ったときに、ロジアナ探してきてUSBつないで Arduinoの見たいピンとGNDつないで、ロジアナソフトでCH1はD2でCH2はD3とか 設定するのが面倒 >>204 それは、ロジアナ持ってる人は誰でもやってることだから、みんな知ってるんだ。 「ワンタッチで」の方のシステムはどんななのか教えてほしいのさ。 横からだけど足の長いピンソケットがついたシールドになってて ArduinoとシールドでそれをサンドイッチするとArduinoの信号が全部出るみたいな? でもUSB2本出るね 基板で中間に入るjigつくればいいじゃん ロジアナへのアダプタ ワンタッチで接続できる でもロジアナのポート数が足りないか N->8本に選択がメンドウだな Arduinoから始めた人は何でもシールドでなきゃあかんのかねえ。 ブレッドボード派なので、ロジアナからジャンパー線が生やしっぱなしになってて、 使うとき挿すだけなんだが…。 https://i.imgur.com/qbyMf3y.jpg DCモーターの制御とプログラムの作例が掲載されてる参考書を教えて下さい 質問です。 エスパーが少し高いのですが、 エスパーの互換機はありますか? 質問です。 arduino同士の赤外線通信をしようと思っているのですが、送信側の赤外線LEDを物理的に上下させないと送信できないのですが、これはLEDが悪いのでしょうか。 https://imgur.com/a/wHM2ni4 回路です。 プログラムはIRremoteのサンプルプログラムを使いました。市販のリモコンでうまくいったので受信側には問題ないと思います。 よろしくお願いいたします。 >>213 ebayで売ってる500円くらい X-8266 ESP-WROOM-02で検索 よく探せば郵政マークがついてる ファームは自分で書く ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる