Arduino初心者熱烈大歓迎質問スレ part24
■ このスレッドは過去ログ倉庫に格納されています
> 何故今時アセンブラなのか AVRのような小さな8ビットCPUではアセンブラでしか出来ない事があるからに決ってるじゃあ〜りませんか。 「アセンブラを制する者はCPUを制する」という言葉を知りませんか? ・・・ 知るわけないか、たった今、私が作ったんだからw >>275 しかないですか… DigiSparkでTvtest+TvtPlay用のリモコンを作る ↓ アナログボタンの反応がおかしいのでデバッグしたい ↓ I2CのLCDをつけてみる ↓ 5pinのアナログポートが使えるけど2.5V以下になるボタン押すとリセットする ↓ I2Cあきらめて、BasicSerial3にする ↓ デバッグできてリモコンは完成 ↓ このままだとTiny13AやTiny44の時困る。なんで使用ピンがライブラリ定数埋め込みなんだよ! ↓ BasicSerial3をいじろうと思い、アセンブラのお勉強をはじめる ↓ 引数にピン番号を追加し、r20に入ることがわかる ↓ sbi I,I を sbi I,r20 にしたい←いまここ >>277 アセンブラの話の前に A0が2.5V以下になるとリセットされるのはRSTDSBLヒューズがプログラムされてないだろ そもそもGPIOポートじゃなくてマイコンのRESETピンになったままだ Digisparkは専用ブートローダーが入ってるから書込みにRESETピンを必要としないし ヒューズでRESETピンは殺されてGPIOになっているはずだ、純正品ならね 基板だけパクってブートローダーだけ書いてヒューズが適当なのは中華クローンの特徴 きさまクローンを使っているな!?(別に悪い事じゃないがw) ICSPライタ(別のArduinoでも良いしUSBシリアルでもいい)でヒューズ設定をちゃんとすれば中華クローンでもA0もちゃんと使えるぞ んでアセンブラの話 sbi A,bはIOレジスタの任意ビットを1にする命令でAがアドレスでbがビットでどっちも即値 これのビット位置がレジスタに入ってるとすると、その値が例えばsbiのbで4だったらレジスタの値が4(0x04)なのか0b00010000(0x10)なのかでちょっと変わるが 基本的には対象のIOレジスタの値を汎用レジスタに読込してORで該当部分を1にしてIOレジスタに書き戻すっていう処理になる sbiが使えるアドレス相手なら命令的には in → or → out で出来る もし↑で書いたビット位置を示す十進の値がレジスタに入ってるならORする前にビット位置にしてやらんといかんが… 注意するべきなのは汎用レジスタってのは有限で色んな事に使われてるし使い方にある程度のルールがある in命令で読み込む先の汎用レジスタがそのタイミングで使っていいものかどうかをよく確認しないとそれ以降のプログラムがめちゃくちゃになる可能性がある 基本的にはコンパイラは最低限のレジスタしか確保しないし(当然だが)その後即値が入るとか演算結果が入るとかで値が上書きされる奴を使う事になる レジスタの使用状況が一切わからないもしくは汎用レジスタの値どれも破壊したくない場合は inの前にpushを入れてoutのあとにpopを入れてもともとの値を保存・復帰してやったりしないといけない(一時的にスタックメモリ(=RAM)に送る動作) >>278 書きなぐりに詳しいレスありがとうございます。 ご推察の通りパチモンですw bootloader最新に更新しようとしたらよくわからなかったので保留してました。 ICSPアダプタは作ったんですが、DigisparkではなくただのTiny85になってしまいそうなので もう少し情報集めてトライしたいと思います。 push,popでレジスタ保護するのは了解です。あまりやると貴重なRAM食いつぶすので r25,r23,r21とかの使われてないの活用する方向でやってみます。 >>279 今Digisparkとして使えてるなら、ブートローダーを書き変える必要はない、ヒューズのRSTDSBLを1から0に書き変えるだけ (RSTDSBLをプログラムするとICSPは使えなくなる、ICSPはRESETが必要なため=高電圧パラレルライタを作るか買うかしないとDigisparkとしてしか使えなくなる) >あまりやると貴重なRAM食いつぶすので pushした時点で1バイトスタックメモリを喰うが、3命令後にpopするならpopした時点でもうその1バイトは解放されてるわけで、この追加だけで食い潰すなんて事はないだろう スタックオーバーフローは関数を再帰呼び出ししたとか、グローバル&ローカル変数でRAMを9割使ってるとかじゃなきゃ殆ど起こらんと思うよ >r25,r23,r21とかの使われてないの活用する方向でやってみます。 使ってもいいかってのは「プログラム全てを通して」って意味だから、今自分が弄ってる部分だけじゃないぞ? 今変更している関数で使って居ないレジスタは別の関数やメインルーチンの値を持ったままになっている可能性がある そこを破壊してしまうとその関数を呼び出したときやメインループに戻ったときの挙動がおかしくなるからな その番号は呼び出し使用に該当するが、もしアセンブラがインラインで書いてある場合は関数呼び出しじゃないので… Arduino言語(C言語)で書いてあるスケッチを含めて全部をコンパイルしたelfファイルをavr-objdumpに -d コマンドで渡して スケッチ全体をコンパイルした後のプログラム全体のアセンブラソースをチェックして本当に使っても良いかチェックすれば安心 そのライブラリを実際に見たわけじゃないから俺には分からんが、アセンブラ部分の書き方や呼び出し方法によっても使っていいレジスタが変わってくる もしそのアセンブラ部分がインライン構文で書いてあるなら空いてるレジスタは自分で確保しない限り無いと思っといた方が安心 .Sファイルとかでアセンブラ関数として定義されてるならレジスタインタフェースの規約で呼び出し使用になってる奴は破壊してもいい (C言語側とのやり取りが呼び出し保存なのか呼び出し使用なのかがレジスタ番号によって決まってる)Atmelの資料AVR32027.pdfを見よ ちなみに、もし割込み関数の場合はいつどこで呼び出されるか分からんので規約関係なしに全てのレジスタは保存しなければならない すまんtiny85の高電圧はパラレルじゃないわ高電圧シリアルだ ピンたんねーしな BODの設定は乾電池駆動の場合、1.8Vでいい?OFFでいい? @OFF A1.8V (1.7?2.0V) B2.7V (2,5?2.9V) C4.3V (4.1?4.5V) BODの設定は乾電池駆動の場合、1.8Vでいい?OFFでいい? @OFF A1.8V (1.7-2.0V) B2.7V (2,5-2.9V) C4.3V (4.1-4.5V) >>283 >>284 動作保証が1.8Vからだしちゃんと動いて電池切れたら止まって欲しいなら1.8Vで マイコンの動作保証はなくなって正しく機能しなくなるかもしれんが 動けるとこまでもがいて欲しいならBoD禁止でいんでね そもそも1.8Vだと4MHzまでしか動かん(保証内で)がその辺は大丈夫か? クリスタル用の発振器も全振幅モードだと2.7V以上無いと駄目だし 内蔵RC発振器に設定した上で分周してやらんとあかんのでは 措置済みで余計はお世話ならすまん >>280 > ICSPはRESETが必要なため なんとなくそんな危険な匂いがしてましたw > 1バイトは解放されてるわけで すぐ開放するからっても割り込みがあれば、スタック積んだとこに更に積まれるわけで なんせ63byteしかないですから >もしアセンブラがインラインで書いてある場合は関数呼び出しじゃないので… それはそうですね 今いじってるのは extern "C" { void TxTimedByte(char, char); } で定義された関数なので、1つ目の引数はr25+r24、2つ目はr23+r22へ渡されます。 値が入る前のr22-r25は当然保存されていると思われます。 charなので上位byteのr25,r23は0が入ってて自由に使えるはず。 そして1ビットシフト命令しか無くてくじけました… スケッチで定義してもスケッチより先にコンパイルされてしまうので 苦肉の策で、プラットフォーム毎に使用ピンを設定するようにしました。 こんなかんじ #if defined (__AVR_ATtiny13__) #define UART_Tx 3 #elif defined (__AVR_ATtiny44__) #define UART_Tx 2 #elif defined (__AVR_ATtiny85__) #define UART_Tx 1 #elif defined (__AVR_ATmega328__) #define UART_Tx 0 #else #define UART_Tx 0 #endif >なんせ63byteしかないですから Ttiny85だけじゃなくて、Ttiny13Aでも使うので63byteです >>286 ん?ビットシフトで挫けたってどういうこと? どういう処理が書きたかったの >>286 オマケの話だが 3バイト以内のスタックならpush/popを使わずにout/inでGPIOR0〜2レジスタに避難する小技もあるぜ GPIORnはその名の通りプログラマが自由に使っていいIOレジスタだ フラグを持たせたりグローバル変数代わりに使ったりしてもいい しかもin/outが使えるからRAMよりも1クロック早くアクセス出来る さらに一部のGPIORはsbi/cbiの対象アドレスに有るからフラグに使うとsbic/sbisで高速分岐したり… まぁ今回は空き確定のレジスタがあるから退避する必要はないが小技として書いておく ごめん13Aで使いたいんだったか 13AにはGPIORはないんだすまない まぁ余談って事で許せ >>291 そういうのは無いんじゃないかな 実機デバッグもArduinoじゃなくてただのAVRとしてAtmelStudio使わないと出来ないし JTAG対応のAVRを積んだArduinoが出たらワンチャンあるかも? 質問があるのですが、 X-CTUでArduino側のXbeeモジュールを動作させるとき、認識しなくなったのですが、 http://blog.prhyzmica.com/?p=110 このサイトの、3.Xbeeまわりで詰まったこと にある、 ArduinoのリセットとGNDをつないでショートさせる と言う部分を実行すると動作するようになったのですが、なぜこのようにすると動作するようになったのですか? 理屈がわからないので教えてほしいです。 Xbeeボロボロだな なんでWROOM02や32買わずにこれ買う人がいるのか不思議だ >>293 ワイヤレスプロトシールドの回路を見たけど、けっこう危ういものに見える。 1本のUARTを共用するのだし、仕方がないか。 https://www.arduino.cc/en/uploads/Main/arduino_WirelessShield_SD_v3-schematic.pdf UNOのUARTが、Xbeeと、UNO上のUSBシリアルの両方に繋がっているものだから、 XbeeとUNO上のUSBシリアルを通信させるときには、UNOのUARTは無効になっていないといけないということだろね。 そのためにはリセットが簡単な方法なんだろう。 >>296 293です。 教えて頂き、ありがとうございます。 そういえば、 UNOのRESETをGNDに接続しといて、TX,RXピンにつなぎたい物させば USBシリアルとして使えるという裏技があったな ちょっとどこいったかわかんないって時には覚えておくといいかも知れない。 つーーかarduinoの大嫌いなところは唯一のuartを書き込み&デバッグ用に占有したままな所 >>299 常に通信しているようなプログラムは確かにだめだし、書き込み時、外さないといけないけど、TXにシリアルプリンタつないだRXを割り込みピンにしたりして使ってる。 >>299 逆に言えばArduinoが普及した理由でもあるわけだな。 単体のマイコンとシリアル変換ICで実装してみれば初心者にゃハードルが高いとわかること。 嫌ならマイコン単体でやれよ、なぜArduinoに文句たれてる、馬鹿丸出しだぞw >>299 328PB使えよ UART2個付いているぞ >>304 まぁarduino出た当初には存在してなかったからね 今ならまぁそれならいいと思える >>302 馬鹿でもなんでもいいわ せめて644pだっけ?もう型番規則忘れたwあの辺使ってuart1つはユーザーに開放して欲しいと思う まぁあの辺のマイコンじゃ書き込む環境も一括りにするのはあの当時じゃusb対応マイコン少なかったし難しいのは重々承知の上で、やはりuartは1つは欲しいところだと思う >>307 元々は大学の格安のマイコン実習用から始まって音楽とか非エンジニア向けのコントローラとして広まっていった開発環境だからコストが一挙に上がるICEが使え無いのはしょうがないね。 むしろ、 追加でART欲しいならソフトウェアでやってね ハードな方は初心者のために取っといてやって というスタンスなんだろ。 文句言うだけの無能のことは眼中に無い。 >>307 arduinoのオプションでjtagice互換のやつとか安く出してくれればよかったと思う avr dragonみたいなやつ ADCのマルチプレクサのようなCH切り替えをUARTにも付ければよかったんだと思う スケッチのアップロード時にはDTRからResetパルスが送られるが これに同期してUARTの入出力をデバッグCHに切り替える ブートローダーの終わりかスケッチの先頭でユーザーchに切り替える というふうなシールド作って独自のブートローダー書けば解決できそうな気がする ESP8266みたいにgpio1本犠牲にして内部でそれをやるという手もあるよな ESPでradikoが聴けたら10個ぐらい作ってると思うわ ffmpegのESP版があればなあー 音声のデコードはデコードICに任せたらいいけど(radikoのコーデックHE-AACなのでAACに対応できれば) swfから鍵の抽出とかrtmpのストリームとかespには荷が重そうな気がする その手のネット端末は、2000円で買える中古のスマホ買うのが最安だろうな いつもはArduino as ISPでbootloaderを書き込んだりしてるのですが、 FT232RLを眠らせておくのはもったいないと思い情報を集めて avrdude-serjtagとavrdude-GUI-1.0.5でFuseBitの読み書きまでできました。 これは本家avrdudeに取り込まれたと告知にあったので、 avrdude.confを見ると id = "arduino-ft232r"; と定義されていました。 ところが、 ude.conf -c arduino-ft232r -p m328 を実行すると avrdude.exe: error: no libftdi or libusb support. Install libftdi1/libusb-1.0 or libftdi/libusb and run configure/make again. 上記エラーとなり、 https://forum.arduino.cc/index.php?topic=543678.0 こちらのトピでもavrdude6.3でft232r動かないと言ってる人がいます。 ArduinoIDE1.8.7 のavrdudeはversion 6.3-20171130でした。 1.8.8なら動くとか修正パッチがあるとか情報あれば教えて下さい。 >>321 それなw 結局、radiko専用スマホが最適解www >>322 エラーメッセージにある通り基本FTDIのドライバーなどが組み込まれていません。 ソースを入手してビルドすれば使えます。 >>324 レスありがとうございます。 本家に組み込まれたと書いてあるページもあり avrdude.confに設定はあったので 組み込まれていないのは残念です。 FT232Rは非常手段として残しておいて いつものArduino as ISPを使います。 gui-toolは便利そうでしたが、6.3に対応していないようでした。 AVR用のツールだがftavrwguiをダウンロードしたらええよ ftavrwgui に一致する情報は見つかりませんでした。 ・キーワードに誤字・脱字がないか確認します。 ・別のキーワードを試してみます。 ・もっと一般的なキーワードに変えてみます。 ftavrw-gui 約 120 件 (0.32 秒) 前スレ >>205 >>857 あたりに回答があるよ >>332 QFPのものもあるよ。 DIPは次のようなことじゃないかな? DIPのものはソケットで付いているから、抜き差しが前提になってるわけだし。 ・UNOで試作してから、DIPを抜いて自分の基板に載せかえる人の需要 ・I/Oは外部の危険な信号に接している。万一、壊れたときに載せかえられることに安心を感じる人の需要 まぁまずブートローダー書き込んで差して使うというのがやりやすいってのはあるね 次に万が一壊しても差し替えられる unoは試作・実験マシーン! 組み込みはPro mini micro! 母艦から発進したPUはprominiの1/4のサイズ コンパクトで高性能! 組み込みに最適 つか14pinくらいで充分だよな 十分、あるいは充分というのは自分に対して言えるのであって、他人に対して言えることなんて滅多にないよな。 お、おう… 別に押し付けるつもりはなくて、ちょっと同意が欲しかっただけなんだからね! Arduino化したESP32の質問です HiLetgoRのESP32開発ボードを使っているのですが ENボタンでリセットするとシリアルの出力が異常なデータになります 電源のリセットや書き込み時のリセットの場合は正常です https://i.imgur.com/7NWz5nq.png 何か解決方法はありますか? プログラムは以下の通りです void setup() { Serial.begin(115200); } void loop() { Serial.println("test"); delay(1000); } ESPは使った事無いけどsetup関数の初期化がミスったとかシリアルのデータフレームのビット位置がずれたとかリセットで変なゴミビットを拾ったとかかな? ボーレートを9600やsetup関数の最初に数秒のウエート関数入れても病状は変わらない? >>340 回路図は? プルアップしてコンデンサでプルダウンもしないと不安定。 原因が判明しました ESP32が起動時にブートメッセージを76800bpsで出力するのが原因でした 不具合ではなく正常な仕様なのでとりあえずこのまま使うことにします >>341-344 アドバイスをありがとうございました >>345 原因判明おめ。 こう言うとき安物でもオシロかロジアナが有れば直ぐ分かるんだけどね。 >>346 は? ボーレイト違いなのに気付いてなかったのが原因なのに? どうやったら直ぐ分かるのか解説よろしく。 >>347 オシロ、ロジアナで見れば期待している信号かどうかわかるでしょう? >>346 >>348 正論なのになんか変なのに絡まれてて可哀想(^^; esp使う時は76800でシリアルを使うようにすれば解決なのです。 ちょっと辺な値だけどね… 寧ろ多pinのArduino出して欲しく 1280pとか >>349 多分オシロ使ったこと無いんだど思う。 勿論シリアル端子の波形見るだけでもレートが変わったのは分かるけどRIGOLの数万円の入門モデルでさえプロトコル解析できるのに。。。 ESP8266/ESP32は起動時にシリアルに吐くの散々FAQじゃないか あと、専用スレあるので、そっち行った方がいいと思う。 遊びレベルなら中華の800円ロジアナとpulseviewでも ボーレートが違うくらい即わかるんだよなぁ >>353 普通のオシロじゃ無理クナイ?ストレージオシロかロジアナじゃないと。素のオシロってまだあるよね。安いやつとか。 HTMLから文字列を抽出したいんだけど、 HTMLパーサーの良いライブラリってある? >>357 まぁ今時は普通のオシロって存在しないに等しくてオシロ=DSOって状態ですからね そしてプロトコルアナライザも当然みたいな。 アマゾンで1000円くらいのezfx2使ったキャプチャのやつでさえプロトコルアナライザ使えるし。 analog discoveryやdigital discoveryなんかでもarduino使いには十分な帯域あるしこの辺は持っていてもいいかと。 >>360 目的と予算書かないと答えようがない テクトロで100万も出せばいいじゃんってなっちゃう >>360 1000円程度なら HiLetgo 24MHz 8チャンネル USBロジックアナライザ とか。 1万台だとlap-cとかかなぁ 3万出せるならanalog discoveryかdigital discoveryのどっちか lap-cはごにょごにょ出来るのとお手軽な価格ですごく売れたイメージがある 持っていて損はないと思う ロジックアナライザがあるとRFリモコンのシリアルにどんなの流れてるか見れるなあ 古いアナログオシロとDSO150しかないや、 FPGAのキットでなんか作った記憶があるけどどこいったかわからん ESP8226でロガー的なもの作ってみようかしらん >>363 オプティマイズのやつかな あれも当時ありがたかったね 今時でああいうの出せばオープンソースで盛り上がった気がする といっても今ならlap-cでいいじゃんと言われりゃそれまでだけど 超音波センサーのus-020ってのは、 どこにも売ってないんでしょうか? 出来るだけ距離が長いものを使いたいです。 オプティマイズのロジアナって EZ-USB を使ったものだったんじゃなかったっけ。 今、巷にあふれている1000円ロジアナはそういうものだし。 当時と違うのは sigrok みたいな使い易いソフトが存在することかな。 >>371 あらためてカメレオンUSBを調べてみたら、CPLDと組み合わせた製品だった。 今の1000円ロジアナは、EZ-USBだけだ。絞ってるな。 arduinoIDEのフォント変えたらめっちゃ見やすくなった preferences.txt を開きエディタフォントをメイリオに変更 editor.font=Monospaced,plain,15 ↓ editor.font=Meiryo,plain,15 コンパイル結果とか出るとこも背景黒で眼にキツイんで \Arduino\lib\theme\theme.txt を開き console.font = Monospaced,plain,11 console.color = #000000 console.output.color = #eeeeee console.error.color = #E34C00 ↓ console.font = Meiryo,plain,11 console.color = #ecfffc console.output.color = #000000 console.error.color = #aa3300 raspberry piのraspbian上でarduino IDEを動かすと安上がりだけど、非対応のモジュールなんかがあって悲しくなった >>374 すんません 非対応モジュールって、マイコンハードウェア?ライブラリ?ラズパイのモジュール? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる