Arduino初心者熱烈大歓迎質問スレ part28
■ このスレッドは過去ログ倉庫に格納されています
>>716 基本のSleep ModeはPower-DownのようなのでINT0やINT1で割り込めるんでは? 試してみて教えてください。 >>709 いただいたソースコードをもとに試しでLチカを想定したコードを作成したところ どうにもタイマーを起動するとタイマーの内容のもの以外がすべて機能しなくなるようで… Arduino標準のBLINK(D13)とタイマーチカ(D7 プログラム内LEDAに相当)の 同居想定として作成してみました。 https://pastebin.com/i3QBKtec これを起動するとloop内のものが一瞬だけ動いたかと思うと最初のタイマーが反応して以降 帰ってくることはなく結果的にBLINKは最初の点灯だけは起こり、その後機能せずタイマー内の点滅(LEDA)だけが点滅しました。 また、RunMilliSecondが100msではちょっと早すぎると思い2000にしてみても 減速はされず2000msとは程遠い速度で点滅しました。 >>711 こちら、サンプルコード自体は機能いたしました。 ものすごい多機能そうで理解できるまでちょっと時間かかりそうですが(汗 とりあえずサンプルコードの機能そぎ落としをしながら理解を進めたいと思います。 この4809を使ったArduino 価格は安いのですがUNOやNANOとはやはり大きく違うという事を思い知らされています・・・ 正規品買う気のない俺はAliで互換機見つけたと思ったら4808だった とりあえず無印Nanoで足りてるしもうしばらく待つわ >>720 今見たら色々間違ってましたね ifの<=逆でした × TCB0.INTFLAGS = TCB_CAPT_bm; ○ TCB2.INTFLAGS = TCB_CAPT_bm;(TCB2.INTFLAGS = 0;と被る) まあ、他の方の情報のライブラリでいいと思います あるセンサーから測定値を取り出したいと考えています。 図面を見るとセンサーからのコネクタはRS485となっていたので AMAZONで『KKHMF MAX485 RS-485 TTL−RS-485モジュールコンバータ』を購入しました。 ハッキリ言ってARDUINOではセットに付属されていたモノで遊んだ程度の知識しかありませんのですが、 見よう見まねで以下を作ってみたのですが何も検出されません。 ご指導いただけないでしょうか #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX #define PIN_RTS 13 void setup(){ Serial.begin(9600); mySerial.begin(9600); digitalWrite(PIN_RTS, LOW); int test = 0; } void loop() { mySerial.listen(); test = mySerial.read(); Serial.println(test, DEC); delay(100); } >あるセンサー の仕様がわからないと何とも言えない。 RS485はコマンド送ってアンサー待ちしないといけない 複数つながる可能性があるから局番指定したり チェックサム生成したり面倒臭い 2線式と4線式があって2線式だと自分の送ったコマンドをそのまま受信するからそれを除外しないといけないし それをSoftSerialでやろうとすると更に難易度が上がるよ PIN_RTS は、RE DE の両方に繋いでるのかな。 それならDEのときにREをディセーブルすることになるし、自分の送ったコマンドは受けなくてすむかな。 485でも垂れ流しでデータ送ってくるように設定できるものもあるけど、センサーマニュアルを見ないとなんとも。 ところで>>723 のモジュールだけど、DEがプルアップされていたり RS-485が2線とかデリカシーを欠くような設計。 返信が遅れてしまい申し訳ありません。 >>724 さん そのとおりですね。センサーは https://www.optex-fa.jp/products/dsp_sensor/cd22/ これのRS485版になります。 センサー自身に表示されている数値を手元で確認できるようにしたいと考えています。 >>725 さん 2線式のコネクタが仕様されています。 今、手元にはセンサー単体のみで接続コネクタもない状態です。センサー片手に秋葉原を聞いて廻ったのですが手に入れる事ができず、コネクタに直接ワイヤーを繋いでいる状態です。 >>726 さん RE DEともに13ピンに繋いでいます。 モジュールについては色々と教えていただきたいです。 >>727 FA用のセンサーって事は工場で仕事に使うものを初心者スレで質問してるのかな? 工場でarduinoやラズパイって見たことないけど 工場で使うんだったら盤屋に依頼するのがいいんじゃないか? CC-Link用のがあるんだから三菱のPLCですぐできるでしょ >>727 まずそのサイトでマニュアルダウンロードしたら? そもそも電源入れただけじゃ通信してないんじゃないの >>723 そのセンサーの仕様書読んでみたけど センサーの設定が有ってる(9600bpsに設定)として、まずRS485モジュールを扱うコードが必要だと思う(送受信設定等) さらに、データを読み出すにはArduino側から読み出し命令を出し、それの返信としてデータを受信する必要がある CD22 シリーズの通信仕様は以下になります。 通信方式 EIA RS-485 準拠(半二重:局番設定によるマルチドロップ接続には非対応) 伝送コード バイナリ データ長 8bit ストップ長 1bit パリティチェック なし ボーレート 9.6k/19.2k/38.4k/57.6k/115.2k/230.4k/312k/460k/500k/625k/833k/920k/1.25M (bps) ヘッダ / データ区切り STX / ETX ■ コマンドフォーマット 送信コマンド : STX (コマンド) (データ 1) (データ 2) ETX BCC 受信コマンド(成功) : STX ACK (返信データ 1)(返信データ2) ETX BCC 受信コマンド(失敗) : STX NAK (エラーコード) 00H ETX BCC ※ STX(02H)、ETX(03H)、ACK(06H)、NAK(15H)、BCC は網掛け部の XOR 演算結果 コマンドの種類 : C(43H) 個別機能コマンド W(57H) 設定の書き込み(Write) R(52H) 設定の読み出し(Read) 判定結果読み出し 送信 B0h 02h 返信 00h (判定結果) bit:0 = 1 の時 判定出力 ON bit:4 = 0 の時はそのデータが既読であることをします >>730 あんた親切だなあ それともすでにメンバー登録してあった? 興味本位で言ったけど面倒だからやめたわ >>730 さん 本当にありがとうございます。 >>727 さんから「RS485はコマンド送ってアンサー待ちしないといけない」とありましたので、読み飛ばしていた仕様書の当該箇所をアナログ人間がわからないなりに解読しようとしています。これから色々試してみるつもりです。 >>731 さん もっともだと思います。 私は購入時にメンバー登録していましたが、メンバー登録が必要にもかかわらず安易にセンサーのサイトを貼ったことを反省しています。 不快な思いをさせてしまい申し訳ありませんでした。 >>733 730です 想像ですが、予想した手順を記載します(RS485の通信したことない)( ^ω^)・・・ 1.MAX485の出力ピンを出力ONに設定(DEをLOW>HI) 2.Serial.write(0x02);,Serial.write(0x57);,Serial.write(0xB0);,Serial.write(0x02); Serial.write(0x03);,Serial.write(0xE6);(でたらめです) 3.Serial.flush() 4.MAX485の入力ピンを入力ON(REをHI>LOW)に設定(もしかしたら入力常にONでもOKかも) 5.MAX485の出力ピンを出力OFFに設定(DEをLOW) 6.データを受信 >>731 なんかネットで拾った 6万もするセンサーポン使うのにデータシートすら読んでないとか 何かすげえな おいらとは別世界の人だわ https://i.imgur.com/tYPEYut.png ついでにポチった( ^ω^) ちょっと差動通信してみたかった あ、ちゃうか ロジアナでもつないどきゃ出力はチェックできるな 面白そうではある でもじっちゃんがセンサーはIICかSPIだけにしとけって言ってたからやめとこう >>737 2個買えばArduino同士1200mまで引き伸ばせたんじゃないの >>742 Aliあるあるネタだけど これ2ポッチしたら、10個届くのよ(;´・ω・) RS-485のインターフェース基板で2端子しか付いてないものって、安心して接続できるのは共通グランドが期待できる範囲だけだよな。 そういえば、昔どこかのスレでRS485をA、Bの2線にするか、 A、B、GNDの3線にするかの大論争があったな >>747 どちらともいえない、運用方法や状況、考え方によって変わると思う RS-485は2線(or4線)で通信することを前提として考えられた規格だと思うのだけど 2線通信で不具合が発生する場合の対処の1つがGNDを接続する方法だと思う (また外部ノイズを減少される目的でのシールドとGNDを接続する事と別に考えたほうが良いと思う) 機器A−機器Bで通信するとして、電源が絶縁されてれば問題は起こりにくいと思う また、電源が共有の場合でも、通信側を絶縁すれば問題は起こりにくいと思う 多分業務用の高い機器は電源も通信も絶縁されてる可能性が高い気がする(←そんなの持ってないよ・・) GND接続の有無で通信に問題が有る状況だとしたら、GNDを接続する以外の手段で問題を解決した方が良いと思う >>745 RS485はA-B間の電位差で信号を送るのでGNDとは直接関係無いんじゃないか? GNDはコモンモードノイズ対策のシールド線用でGND間の電位差が問題になる様な場合は片側のシールドを浮かすだろうし RS-485インターフェースICのメーカーの資料を提示して議論するべき。 部屋の換気具合を知りたいのでCO2センサーモジュールを買おうと思てるんだけどArduinoで使いやすいおすすめある? >>752 最低、アナログ出力かシリアル出力が付いてればいいんでないの? ノイズのこと考えると、シリアルが1番かな? センシング面での性能は分からんわ ARMとかRISC-Vだとavr/pgmspace.hにあるpgm_read_byteとか使わなくても 直接、プログラム領域にある変数とか配列読めるんだね Arduinoの作法としてはavr/pgmspace.hにある関数群使うのがいいのだろうけど それはArduinoの作法じゃなくて搭載してるマイコンAVRの仕様なんで・・・マイコンのデータシートや命令セットを読んでもろて ちなみにAVRでも最新のmega0とかtiny1とかAVRDAシリーズだとLPM命令を使わなくてもLD命令でアクセスできるぞ 不注意で328Pじゃなくて168Pがのったnano互換ユニットを買っちゃったが、(4枚) 168Pの方が良いことって1つでもある? マイコン的には容量が少ない以外の差がない ので値段が安いのであればそこだけ >>759 ありがとうございます。 やっぱりそうですよね。 失敗しちゃったなぁ。 >>761 いや、すでに目の前にあって、実際メモリ不足で書き込めないスケッチがあった。軽い目的に回そう。 >>765 中華マイコンなら無いほうがおかしいでしょ? やすりで削ってレーザー刻印だから消しゴムじゃ消えないぞ 全額返金で168Pが無料で手に入るチャンスだけどそういうのは無いなw チップ単体だとTiny12の刻印削ってTiny85として売ってるのはよく見かける 動かないとかチップIDが違うといえば返金してもらえる ひでえな中華 50円の詐欺のために50円のコストかけてないか? >>768 販売先に日本が多いと、評価が上がるとか、日本人は余り文句を言わないで諦める奴も多いとか? Aliexpressで買って届くまでに1ヶ月、2ヶ月待った挙句にそれが偽者だったらショックだよなw https://forum.arduino.cc/index.php?topic=699473.0 AVRDAシリーズのコアが仮完成したみたいだ https://www.microchip.com/wwwproducts/en/AVR128DA28 VCC=1.8Vでもフルスピード24MHzで動く今年発売したばかりの最新のAVRマイコンだ tiny1シリーズやmega0シリーズに順ずる高性能な周辺機能を装備のうえ、ADCが12bitだったりDACが10bitだったりパワーアップしてる 命令セットは↑から変わってないので何時も通り使える上に、push命令とsbi命令とcbi命令のマシンサイクルが2から1に短縮され割り込みルーチンなど高速化 ROM128k/RAM16kの大容量でEEPROMもアリ、なんと28pin仕様にはDIP版もあるぞ! まあ、届いただけマシだと思わねば 何ヶ月も届かず、注文したことすら忘れて、 そのまま闇に消えていった注文品がいくつもある こういう奴がいるから日本向けは舐められる 大変迷惑 素人ですが質問させて下さい。 CH340シリーズのUSB変換モジュールで、USBからの5Vを給電しつつ信号レベルを3.3Vにするにはどうすればいいでしょうか? 少なくともCH340のVCCに3.3Vを入力する必要があるのですが、CH340の3V3端子とVCCをショートさせるみたいな話もありましたが、データシートを読んでも具体的にどうすればよいかわかりませんでした。 実際には↓のCH340Eが実装されたこのモジュールを使ってます。3.3Vという記載がありますが3.3Vで使う方法の記載はありません。 https://m.ja.aliexpress.com/item/33041987984.html 5V/3.3V切り替えができるモジュールもありますが、あれはチップのVCCへの入力前に5Vとは別に3.3Vへ降圧している? そもそもCH340の3V3端子の使い方(用途)が不明です… どのデータシートを読んだか知らんが 英語版 https://cdn.sparkfun.com/datasheets/Dev/Arduino/Other/CH340DS1.PDF V3端子は電源がVcc5Vで使う場合はデカップリング Vcc3.3で使う場合はVCCに繋げってことらしい FTDIのチッブなんかは内部で3.3Vを作ってる >>779 ありがとう。私が見てたのはこちらですが内容的には同じですね。 https://www.mpja.com/download/35227cpdata.pdf やっぱりUSBの5VをそのままCH340に使ってシグナルを3.3Vにするのは無理ぽいですね… CH340のV3ピンは、5V給電時は3.3Vが出力されるので、チップ内で3.3V生成してるのだから、それなら5V動作時でも3.3Vで通信するモードがあってもいいのにと思ってしまった。 CH340積んでV5/V3.3切り替え付きのモジュールは、よく見ると別途レギュレターチップ積んでてそこで3.3V作ってるみたいでした。 素直に3.3V対応のUSBシリアルを買ってきます。 せっかくCH340単体で3.3V供給してるのになんか使い道無くてもったいないなぁ USBシリアルなんて頻繁に買うものじゃないし 安さに釣られずおとなしくFTDIの買ったらええ ワイは秋月で5V/3.3V切り替え可のやつ買った 最悪だ 新しく買ったDUEに載ってるch340gにブートローダーが入ってないみたいだ しかもこのボードicspピン付いてないし Nativeポートは使えるけどProgrammingポートが全くデバイス認識されない 今度からicspピンついてる16U2が載ってるボードのみにしとこ >>783 ああ、なるほど! CH340の3.3Vは自身のコア動かすためにあるのか! >>782 はい、そうします(笑) 勉強になりました。 >>784 CH340G自体にブートローダーって要る? aliで5vのprominiまとめて買ったんだけど、5v16mhzで書き込むと動作速度が半分になる。 3.3v8mhzで書き込むとオッケー。 間違えたんかなこれ? ただ3.3v8mhzのやつでも、raw端子に繋げば5vで動かしてもいいんだよね? 確か12vくらいまで対応していると読んだことあるし。 >>787 とりあえず OD しましょう。 耐圧はレギュレーターによるんじゃないのかな? ヒューズリセットに12v使うので、チップ自体は壊れないだろうけど、 レギュレーターによっては、香ばしいことになるかも? https://ht-deko.com/arduino/promini.html ここの写真を見る限り、うちにある 5v版 だと思ってたものも全て 3.3v かも? ずっと普通に 5v で使ってるわ。 >>786 要らんのか?良く解からんが ch340gに原因がある事は確かだ ブートローダーを何だと思ってんの? CH340Gはマイコンじゃねえぞ CH552Gはマイコンです。 USBのほか、UART、ADC、アナログコンパレータ、タイマ、PWM を装備し、 CH340Gのように働くことができます。 >>792 止めたれ 勘違いして恥ずかしいのは、本人が1番分かってるのに、そういう傷口に塩を塗る様なことは >>795 16U2はマイコンとして売られているもの。 ユーザーがプログラムを書き込むかあるいは、メーカーにプログラムを書き込んで出荷するように要求されるもの。 CH340Gは、USB-シリアルのブリッジとして売られているものなので、16U2と同じようには考えられないと思う。 (MCP2200の中身がPIC16F1459でも、MCP2200をマイコンとは言わない。FT232もたぶん中身はマイコン) CH340Gが動作しないなら、もしかしたら本当に中身がマイコンで、プログラムのミスなのかもしれないけれど 外面的には、部品としての不良とみなして考えるのが自然だと思う。 電子工作をする一般エンドユーザーから見れば、 16U2が動いてなさそう… 16U2用のプログラムを書き込んだら治るかも ハード的に破壊されているなら、少なくとも 16U2を載せ替えて、その上で16U2用のプログラムを書き込む必要がある。 CH340Gが動いてなさそう… パターンやほかの部品に問題がないなら、CH340Gを載せ替えれば動くはず。 なんにせよ、>>784 を書いた人のの主旨は「CH340Gが不良らしい」ということなので「ブートローダー…」はもういいよね。 数年前に書いたスケッチを、久しぶりに改造しようかと思ったら、 PROGMEM prog_uchar hehehe[] の宣言が通じなくて、 コンパイル通らなくてあせった。 こんな時代なのね。 const char hehehe[] PROGMEM プリプロセッサにしても意味不明な、、、 PROGMEMの部分は__attribute__ ((progmem))だからね だから宣言ではこうなってることになる const char hehehe[] __attribute__ ((progmem)) するとprogmemというコンテキスト名で領域が確保される インラインアセンブラでこうしてやるとバイナリファイルをprogmemとして確保できるらしい https://pastebin.com/nuPfavZ1 使い方はhogehoge.binがバイナリファイルでHOGE01がそのデータに割り当てたいシンボル名として C言語で IMPORT_BIN("hogehoge.bin", HOGE01); extern const uint8_t HOGE01[]; とやればいいらしい 間違えたコンテキスト名じゃなくてセクション名ね progmemって要するにセクション名をprogmemにしてるだけっぽいよ 実際にteensy4.0で試してRGB565の画像データファイル>>799 でインポートして LCDに表示できた 画像データはGIMPでCソース形式で保存するとRGB565に変換できるので それをバイナリデータとして書き出す自作プログラムを作成 Arduino IDEではファイル名は絶対パスで指定しないとエラーが出たよ そういうのできちゃう人って 神様にしか思えないんだが 何がどうなってるんだろう ほんとに好きで勉強(・・・というか勉強しようと思ってやるんじゃなく好きで学ぶというか・・・勝手に調べる)してずっとやってりゃそのうちその神様とやらになれるよ pro microの3.3V/8MH版、USB/HIDなスケッチをテストしてて、ボード設定Leonardoで書き込んだら死亡しちゃった これってbootloader焼きなおせば復旧するのかな? ちょっとすぐ試せないのでわかる人いたら教えてください 物理的に壊してなければ正しいスケッチとヒューズ設定にすればおk >>805 書き込みをWindows上で行っているならば、pro microをH/Wリセットした直後に ハードウェアマネージャでBootLoader用のCOMポートがが見えるようならば IDEでブートローダを書き込めば直るかも BootLoaderが見えない場合にはICSP経由でBootLoaderを書き込む それでもダメだとわかんない 一度書き込めて二度目から書き込めなくなったときはこれ試してみて 612 名前:774ワット発電中さん[sage] 投稿日:2019/12/06(金) 20:41:59.26 ID:9sDeXhF9 >>609 リセットの手順ちょっと違った pro miniの場合だけどこんな感じ 参考にしたページのアドレス貼れないからコピペ Arduino Pro Mini側のリセットボタンを押しながら、 Arduino IDEのアップロードを実行し、 FTDI-USB変換ボードのTXが光った瞬間に、 Arduino Pro Mini側のリセットボタンを離す。 俺のArduinoなんかブートローダ書き込み後1回目はスケッチ書き込めて 2回目からは書き込めない そしてまたブートローダを書き込むとやはり次の書き込みは成功して その次は失敗する ゴミ 805です。コメントありがとうございます。Fuseビットは変わってなくbootloader書き込み直しだけでで復旧できました。 中華ProMicro2種(5V/16MHz、3.3V/8MHz)があって付け替えて試していたところボード設定を間違えました。 5V/16MHz⇒Leonardo、3.3V/8MHz⇒Liliypad USBと設定しておかないとおかしなことになっていたようです。 あとHIDなスケッチは曲者ですね。スケッチ書き込み後にCOMポート見失ったり、ポート番号が変わったりすることがあります。 環境はwin10ですがCOMポートがスゴイ勢いで増えていってます・・・いらないの消さないと・・・ >>811 > あとHIDなスケッチは曲者ですね。スケッチ書き込み後にCOMポート見失ったり、ポート番号が変わったりすることがあります。 HID と COM が混在するのが難しいのですかね? vUSB 関連を昔にいじったけど、結局、STM32 に落ち着いた。 STM32 も HIDデバイス にすると COMポート を見失うけど、 スケッチ書き込み時に、リセットを押すだけなので、そんなに困ってない。 micronucleus 搭載の Tiny85 も、それなりに癖はある。 HIDでCOM見失うって良く見るけど、HIDモードが使えるやつはブートローダモードの 時しかスケッチ書き込めるCOMが見えないだけじゃないのかな AT32U4(Pro Micro互換ボード)はH/Wリセットして8秒間だけスケッチが書き込める COMポートが見えるようになる動作が普通みたいだけど ブートローダー書きこんだ直後しかスケッチ書き込めないってやつも、IDEで書き 込むとき、書き込み開始してからタイムアウトするまでにH/Wリセットかければ 書き込めると思うけど OTGと給電が共存出来ないAndroidタブレットを4Gモデム代わりに使ってArduinoに簡単な 信号を送る場合、イヤホンジャック経由で通信するのが簡単ですかね >>813 > HIDでCOM見失うって良く見るけど、HIDモードが使えるやつはブートローダモードの > 時しかスケッチ書き込めるCOMが見えないだけじゃないのかな それですよ。ただコンパイル終了時にタイミング良くリセットしないといけなかったり シリアルモニタ開けなかったりするのが、見た目からすると不安定だったり、 COMポート が見失うという表現になる。 Arduino nano every(ライターATSAMD11D14Aと分離したもの) をPCBAで作りたいと思っています。 https://www.avrfreaks.net/forum/how-burn-firmware-nano-every-bare-pcba-board よさげな情報がありました。 Nano every: ATSAMD11D14A bootloader : help to reprogramme D11 firmware; ATSAMD11D14A firmware : simulate USB device,write arduino sketch to ATMEGA4809. 4809 bootloader : needn't 4809 firmware : any sketch you burn to it through Arduino IDE という事が書いてありましたが、これって、ATSAMD11D14Aを考えれば、 実装された生の4809にUPDI書込みが可能だという事ですよね。 それで、もしも先人で成功されている人がいらっしゃったら、 真似させてもらおうと思っています。 どなたか、いらっしゃいますか〜? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる