X



トップページ電気・電子
1002コメント377KB

Arduino初心者熱烈大歓迎質問スレ part28

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001774ワット発電中さん
垢版 |
2020/06/10(水) 05:28:40.57ID:B1nfFGXL
http://www.arduino.cc/

【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
 詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね

前スレ
Arduino初心者熱烈大歓迎質問スレ part27
http://rio2016.5ch.net/test/read.cgi/denki/1585316143/

Arduino初心者熱烈大歓迎質問スレ part26
http://rio2016.5ch.net/test/read.cgi/denki/1579146318/

過去スレ


Arduino初心者熱烈大歓迎質問スレ part25
http://rio2016.5ch.net/test/read.cgi/denki/1568358922/
Arduino初心者熱烈大歓迎質問スレ part24
http://rio2016.5ch.net/test/read.cgi/denki/1554776918/
Arduino初心者熱烈大歓迎質問スレ part23
http://rio2016.5ch.net/test/read.cgi/denki/1541233445/
Arduino初心者熱烈大歓迎質問スレ part22
http://rio2016.5ch.net/test/read.cgi/denki/1534549073/
Arduino初心者熱烈大歓迎質問スレ part21
http://rio2016.5ch.net/test/read.cgi/denki/1527252804/
Arduino初心者熱烈大歓迎質問スレ part20
http://rio2016.5ch.net/test/read.cgi/denki/1514503488/
Arduino初心者熱烈大歓迎質問スレ part19
http://rio2016.2ch.net/test/read.cgi/denki/1500745528/
Arduino初心者熱烈大歓迎質問スレ part18
http://rio2016.2ch.net/test/read.cgi/denki/1485192244/
Arduino初心者熱烈大歓迎質問スレ part17
http://rio2016.2ch.net/test/read.cgi/denki/1471967293/
0816774ワット発電中さん
垢版 |
2020/08/25(火) 20:00:25.57ID:3ENwhmyY
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書込みが可能だという事ですよね。
それで、もしも先人で成功されている人がいらっしゃったら、
真似させてもらおうと思っています。

どなたか、いらっしゃいますか〜?
0818774ワット発電中さん
垢版 |
2020/08/26(水) 13:32:54.32ID:2EreZomW
ぷろみにって「スケッチを書き込んでいます」が出た瞬間にリセット押して書き込むのが当たり前だと思ってた。

DTRのない4線のシリアルケーブルしか持ってないから…
0819774ワット発電中さん
垢版 |
2020/08/26(水) 23:28:37.00ID:U74fkIJ5
はんだごてが苦手なので、Seeeduino XIAO の
ピンを30セット分誰かに依頼したいです。。。
0821774ワット発電中さん
垢版 |
2020/08/27(木) 06:49:19.00ID:e17oAGXU
やりはじめたら途中で苦手ではなくなると思う。

だから、何かで練習するのがおすすめ。
適性次第で練習してもできない人はいるけどね :-P
0824774ワット発電中さん
垢版 |
2020/08/27(木) 12:24:32.06ID:rFA2i7rY
自分でピンヘッダを何度かやったけど、すっごく汚いんだわ。たまに接触していなかったり。youtube見てると感心するわ。ルーペ付き半田ごて台って初心者にいいかな?宙に浮かせての作業はむしろ難しくなりそうだけど。手先の器用さは普通だお。一応、安い温度設定コテは尼に注文した。
ほんと、誰かにやってほしい。。。
0825774ワット発電中さん
垢版 |
2020/08/27(木) 12:30:44.20ID:9e8ZgKws
趣味で20年以上安いコテを使っていて、最近温度調整コテ買ったら使いやすくて驚いた
濡らして温度下げて調整しなくていいのでホント楽
はんだ付けで悩んでいる人には救いの神だと思います
0826774ワット発電中さん
垢版 |
2020/08/27(木) 12:59:10.36ID:ThnPwTEo
ホムセンに売ってるような安い温調コテでも十分
適正温度にするだけで全然違うよ
温度はマジ大事
0827632
垢版 |
2020/08/27(木) 13:16:51.35ID:gTWGCzRg
ほうなん?
ハッコーのブースト付きのやつしか使ったことないけどそれとは違うよね。
どんな風に使いやすいん?
0828774ワット発電中さん
垢版 |
2020/08/28(金) 14:03:14.17ID:koz9K3VS
最近買ったMEGAの互換機の速度が遅いような気がしたので、
void loop() {
digitalWrite(2, HIGH);
digitalWrite(2, LOW);
}
の速度(周波数)を測ったら、UNO(純正)が112kHz, MEGA2560(互換機)が89kHzで、
やっぱりMEGAの方がUNOより遅いんだけど、これってそういうものなの?
それとも互換機なのがいけないの?

ちなみにTeensy 4.1だと9.8MHz出ました。
0829774ワット発電中さん
垢版 |
2020/08/28(金) 14:09:23.52ID:koz9K3VS
あ、loopのオーバーヘッドがあるから
void loop() {
while(1){
digitalWrite(2, HIGH);
digitalWrite(2, LOW);
}
}
とかにしないといけないのか。
それでもやっぱりMegaの方が遅い。
0832774ワット発電中さん
垢版 |
2020/08/28(金) 18:28:45.05ID:a7sC8Yqz
>>831
あなたの>>8282,829からそれをエスパーするのは無理だろうね
その速度比べて何の意味があるの?という疑問は別にしても
0833774ワット発電中さん
垢版 |
2020/08/28(金) 18:31:27.93ID:dRo4r1qE
せっかくレスしてくれた人に礼の一言もなく
自分の言い分だけを書きなぐって去っていく
これが美しい国ニッポンのゆとりさんw
0834774ワット発電中さん
垢版 |
2020/08/28(金) 18:43:54.01ID:koz9K3VS
>>832
どう書けば通じたのでしょうか?

ポートを直に触らずにArduinoの標準のライブラリだけで
I/Oをアクセスするときの性能を知りたかったんだけど
それって意味無いのでしょうか?

Arduinoに関してはは全くの初心者なので、
初心者にわかるように説明していただけるとありがたいです。
(いわゆるコンピュータに関する経験はそれなりにあるので、
一般的な専門用語や概念は説明無しに使っていただいて構いません。)
0836774ワット発電中さん
垢版 |
2020/08/28(金) 18:53:50.56ID:4Mv13uHP
質問しておいて、本人の意図しない回答だったにしてもなんらかのレスを返すのが一般常識ってことなんでしょ。
0838832
垢版 |
2020/08/28(金) 19:00:09.74ID:yWhSa4tP
>>834
あー、ごめん
君の相手は俺の能力では無理
他の人に聞いて
0839774ワット発電中さん
垢版 |
2020/08/28(金) 19:08:19.95ID:koz9K3VS
>>838
なんだよ、じゃあ最初から出て来んなよ
(意味:ありがとうございました)
0842774ワット発電中さん
垢版 |
2020/08/28(金) 23:37:25.32ID:F4Cy4ERo
>>ID:koz9K3VS
最初質問を読んだときはただ頭が弱いだけかと思ったが
どうやらそれに加えて人間のクズでもあるようだな
相手しなくてよかったな
0843774ワット発電中さん
垢版 |
2020/08/29(土) 00:24:04.19ID:jhi/eTM1
Arduinoのビット数を可変にしたいです。
ArduinoIDEだとF_CPUが定義されてしまうことまでわかったのですが、
F_CPUを定義しないで書き込める方法があったら教えてください。
よろしくお願いいたします。
0844774ワット発電中さん
垢版 |
2020/08/29(土) 04:43:11.44ID:Owbe7hPa
bit数ってのはマイコンのアーキテクチャで決まってる(Arduinoに乗ってるAVRなら8bit)
そしてF_CPUはクロック周波数であって、今載ってるマイコンのクロック周波数(UNOやNanoなら16MHz)ソフトウェアに教えているだけでbit数とは全く関係ない

マイコンのクロック周波数は普通は決め打ちしておくもの
そもそも基板に搭載されている水晶発振子で物理的にクロックが決まっているので・・・
(UNOやNanoに載っているATmega328Pは分周器を持ってるから半分にしたり1/8にしたりはできるが、それもヒューズビットというプログラムとは違う所の書き換えが必要)

F_CPUは「クロックを設定している」のではなくて『ボードに載ってるマイコンのクロックを教えている』のでハードウェアを何も変更してないのに間違った値にすれば動作がおかしくなるよ
0845774ワット発電中さん
垢版 |
2020/08/29(土) 10:06:25.94ID:UpK3pxKw
>>843
あなたの言う「ビット数」、「可変」ってどういうもの?
壮大な勘違いにならないよう、もうちょっと
0848774ワット発電中さん
垢版 |
2020/08/29(土) 12:51:47.36ID:jhi/eTM1
>>847
自由にクロックを変えられれば動作スピードとか電力とかいろいろ調整できるんじゃないかと思ったのです。
0851774ワット発電中さん
垢版 |
2020/08/29(土) 13:56:42.55ID:FlhOGPB6
PCで使われるCPUみたいなことは出来ないかな
動作クロックっていうのは水晶発信器などのクロックジェネレータって部品で
作られた信号の周波数で、これが8MHzだったり16MHzだったりするけど、
基本的に固定値なので周波数を上げ下げできない

発信器の動作クロックは下げられないけど、そのままでは早すぎるって場合には
分周って処理でクロックを間引いたりする

逆に上げたいとき(PCのオーバークロックもこの一種)には、ていばいき(逓倍器)を
使って発信器の周波数を2倍とか3倍とかにして使用する

で、Arduinoは逓倍器を積んでいないので、取り出すデジタル信号の周波数を
下げること出来てもそのままで上げることは出来ないよ
0853774ワット発電中さん
垢版 |
2020/08/29(土) 17:33:11.65ID:bFb4hpOH
省電力なら元々省電力を目的とした機器を選ぶようだと思う
0854774ワット発電中さん
垢版 |
2020/08/30(日) 01:16:22.26ID:SAneNFwO
横からだけどatmega328pは4MHzで動かすと1.8ボルトで動くようだが、そうなるとarduinoIDEの範囲外?ボード設定に触れたネット情報がうまく探せなかった
ニッ水二本で動くなんてすごいなあと思ったので試してみたい
0855774ワット発電中さん
垢版 |
2020/08/30(日) 01:23:47.17ID:PE4Y28UO
ATmega328PがいいならMiniCore使えば?
https://github.com/MCUdude/MiniCore
ヒューズビットの設定とかわからん!でもICSPつないでブートローダ書き込みコマンドから内蔵RCで1MHz〜で設定できるでしょ

まぁ1.8Vで使いたいならATmega328Pなんてロートルじゃなくて最新のAVR128DB32とかのほうがいいと思うけどね
まだベータバージョンだけどArduinoCoreもあるし(DxCore)
https://github.com/SpenceKonde/DxCore

AVRDAシリーズは1.8V〜5Vまでの全てのVCC電圧で〜24MHzまで動作保障だよ
0856774ワット発電中さん
垢版 |
2020/08/30(日) 09:47:29.11ID:seV49HTY
とりあえず動かすだけなら昇圧させればエネループ1本で5V100mAぐらいまでならいけるんじゃねーの?
0857774ワット発電中さん
垢版 |
2020/08/30(日) 09:55:44.67ID:HaeeiEDT
思考実験
Arduino自身のI/Oで、チャージポンプ昇圧して
自分の電源をまかなう、なんていうソフトできるんかな?
0858774ワット発電中さん
垢版 |
2020/08/30(日) 10:10:15.32ID:PE4Y28UO
ATmega328Pをを電池2本で動かすとして・・・
内蔵8MHzのクロックを利用するとしてヒューズのCKDIV8は有効にしておく
これでPOR時はクロックプリスケーラが効いてて1MHzだからどんな電圧でも動作する
起動後はタイマーを使ったPWMでDCDCコンバータを駆動(昇圧チョッパーなりチャージポンプ+リニアレギュレータなり)
(バッテリーからの電源にはダイオードを順方向で入れておくこと)昇圧後の電圧は分圧しておいてADCかACで1.1Vの内部基準電圧でモニタ
必要な電圧にまで上昇したらクロックプリスケーラを解除と同時にDCDCコンバータ用のPWMに使ってるタイマーを8分周に変更してメインプログラムへ

で出来るんじゃないかな
0859774ワット発電中さん
垢版 |
2020/08/30(日) 10:22:27.16ID:SAneNFwO
>>855
こういうのがあったのか、ありがとう
arduino 4mhzで検索してもなかなか出てこなかったので
セラロックつけなくちゃと思っていたけれど内蔵RC発振でも使えるのか
部屋の照明のリモコンを増やしたかったんです。なので少ない電池で動かしたい
0860774ワット発電中さん
垢版 |
2020/08/30(日) 10:29:38.30ID:SAneNFwO
>>856
待機電力が問題になるかなと思ったけど、待機時はどこも導通してなくてスイッチオンで昇圧回路から起動してブートローダーなしのマイコンも起動すればリモコンとしていけるのかな
0861774ワット発電中さん
垢版 |
2020/08/30(日) 10:48:11.96ID:HaeeiEDT
>>858
すんません、、、
ナバホ語かピダハン語を聞いているような
難しさで理解できませんでした
ガンダムに例えて解説してくれませんかw
0862774ワット発電中さん
垢版 |
2020/08/30(日) 11:09:50.94ID:uHzHYO3q
>>859
内蔵RCは精度が悪くシリアルで文字化けする場合がある
固体毎にOSCCALで調整すると改善するが、
-10℃〜40℃など温度変化の激しい場所では調整し切れない
基本クロック精度が悪いと、タイマーを使うディレイも狂って
周波数カウンタ、IRリモコンなどの用途で問題が発生する場合がある
0863774ワット発電中さん
垢版 |
2020/08/30(日) 12:22:08.76ID:SAneNFwO
>>862
arduinoを一台arduinoISPとして,atmega328pに直接?書き込んでいるのでシリアル通信できない問題は影響なさそうです
簡易オシロスコープで確認したところ赤外線の38khz も少しずれていたんだけどアイリスオーヤマの LED 照明は認識してくれました
季節による温度変化で駄目になるかもしれないな

低電圧動作を目的に4メガヘルツで動かすならセラロックが必須であれば精度も上がるのかなと思っていました
内蔵 RC 発振でも4メガヘルツで動くようなので挑戦してみます
いろいろありがとう!
0865774ワット発電中さん
垢版 |
2020/08/30(日) 13:53:49.08ID:PE4Y28UO
>>863
16MHzのクリスタルがついてるとしたら外部水晶用の内部発振回路を全振幅発振器から低電力発信器に切り替えて
かつプリスケーラを4分周に設定すれば何もハードウェア的な改造しなくても水晶の精度で4MHzで動くぞ
0866774ワット発電中さん
垢版 |
2020/08/30(日) 13:54:57.51ID:PE4Y28UO
追記
内部発振回路を全振幅から低電力に切り替えるのは全振幅発信機がVCC=2.7V〜しか動作が保障されてないため
切り替えはヒューズビットでどうぞ
0867774ワット発電中さん
垢版 |
2020/08/30(日) 15:06:17.76ID:SAneNFwO
内部発振回路に種類があったのは知らなかった
どうもありがとう調べてみます
0871774ワット発電中さん
垢版 |
2020/08/30(日) 20:22:52.08ID:gSNhVxX+
>>870
仕様上は7V〜12Vだけど、レギュレータICの発熱考えると、7Vに近い電圧がいい
自分は9Vのアダプタ使ってる
0872774ワット発電中さん
垢版 |
2020/08/31(月) 23:26:55.93ID:MuP4fU0P
安価な温湿度センサーであるところのDHT11で、気温と湿度を測りたいんですが、何度やってもnanになっちゃって困っています。

以前に使ったときは問題なく使用できたので、プログラムは間違ってないと思います。

VDDは5Vで動かしているのですが、シリアルプロッタで波形を観測したところ、一定の電圧(4V程度)を出力し続けているようです。
DHT11はデジタルのシリアル出力だったはずなので、この時点でおかしいと思うのですが、このような現象に心当たりはないでしょうか

Arduinoを変えたり、DHT11も複数試してみました。
回路が間違えてんじゃないかって思うのですが、データシート通りなのと、以前動いたのが気がかりです。

また、足りないところがあれば、補足するので教えて下さい。
0873774ワット発電中さん
垢版 |
2020/09/01(火) 00:04:32.02ID:uQ8yMlcJ
>>872
使用してるライブラリの名前とか配線状況を見れる写真とか動かないコードが有れば回答しやすい

>VDDは5Vで動かしているのですが、シリアルプロッタで波形を観測したところ、一定の電圧(4V程度)を出力し続けているようです。
>DHT11はデジタルのシリアル出力だったはずなので、この時点でおかしいと思うのですが、このような現象に心当たりはないでしょうか

うちのDHT11のSIGNAL(2番)をテスターで測ったら4.95Vだった(VDDは5.05V) ちょっとおかしいですね
これは外部のプルアップを使わずマイコンの内蔵プルアップを使用してでの電圧です

配線の不良も疑ってみては?
0874774ワット発電中さん
垢版 |
2020/09/01(火) 14:42:53.57ID:tlyK+QZv
Arduinoのdigital outを別の機器に繋ぎたいです
その機器は独自の電源を持っています
Arduinoと供に使う何とかCAPのようなArduinoから給電する機器ではありません
その機器のdigital inの回路がその機器の5V電源にプルアップしています
このような接続形態の機器にArduinoのdigital outを繋げますか?
なお流れる電流は0.5mAです
Arduinoのdigital入出力のピン1本とGNDのピンをその機器に繋ぐだけで良いのでしょうか?
0875774ワット発電中さん
垢版 |
2020/09/01(火) 14:55:38.93ID:Q/PtM9v3
>>874
問題無い

というか殆どの装置は入力保護でプルダウンかプルアップしてると思う
自作装置もそうするほうが良い
0876774ワット発電中さん
垢版 |
2020/09/01(火) 15:12:36.45ID:tlyK+QZv
>>875
ありがとうございました
でも理解できない事があります
Arduinoで外付けのLEDをLチカさせる時にArduinoのGNDピンと13番ピンの間に抵抗器とLEDを入れます
Arduinoの5V端子、13番ピン、GNDピンの3つを使うような記事を見た事がありません
これは13番ピンとGNDピンの間が解放か短絡か2択のリレーみたいなスイッチになっておらずArduinoの内部でGNDと13番ピンの間が5V電源に繋がっているという事ですよね?
Arduino側でArduinoの5V電源にプルアップ、別の機器側でもその機器の5V電源にプルアップでは不味くないですか?
0877774ワット発電中さん
垢版 |
2020/09/01(火) 15:45:11.09ID:tlyK+QZv
これを読んでも良くわからないので質問させて頂きました
ソースとしてもシンクとしても使えると書いてありますがOUTPUTに指定するピンに対しソース、シンクのどちらにするのかスケッチで指定する方法が書かれていません
outputに使うピンのソース、シンクどちらにするかのスケッチでの指定は無いと思えば良いですか?

http://www.musashinodenpa.com/arduino/ref/index.php?f=2&;pos=83

【OUTPUTに設定されたピン】
ATmegaのピンはソース(正の電流源)としても、シンク(負の電流源)としても機能し、
0878774ワット発電中さん
垢版 |
2020/09/01(火) 15:45:12.96ID:1fTodUDr
あなたが想像する回路図を描いてミソ
Aruduinoの電源と相手機器の電源が互いのプルアップ抵抗でつながるのってまずいのでは?ってこと?
0881774ワット発電中さん
垢版 |
2020/09/02(水) 17:26:28.52ID:WRxYTR8G
DUEのDAC0, DAC1にアナログ信号を出力するにあたり、
analogWrite(DAC0, value);
の代わりにポートレジスタを直接叩くようなことは出来ますでしょうか?
出来るとしたらどのようにすればいいか教えていただけるとありがたいです。

デジタル出力だと、例えばdigitalWrite(5, HIGH); の代わりに
PIOC->PIO_SODR |= (1<<25);
にするみたいなやつです。
0882774ワット発電中さん
垢版 |
2020/09/02(水) 18:30:57.08ID:4twaSAUm
すでに出力設定とか全部してあって値だけ変えるって話ならDAC0かDAC1のDACC_CDR
0883774ワット発電中さん
垢版 |
2020/09/02(水) 18:34:03.17ID:4twaSAUm
ごめん違ったDACCのDACC_CDRで良いわ
ビット位置で0と1だわこれ
0884774ワット発電中さん
垢版 |
2020/09/02(水) 20:10:58.87ID:WRxYTR8G
>>882-883
ありがとうございます。
チャンネルの選択方法がまだいまいちわからず、
DAC1に出力することしか出来ていないのですが、
とりあえず25倍ぐらい速くなりました。
0885774ワット発電中さん
垢版 |
2020/09/03(木) 14:12:56.94ID:j+KW//yO
>>884の続きです。下記の手順で両チャンネンルに出力できました。
1chあたり0.8Msa/sと、ほぼハードスペック(1Msa/s)通りになりました。
analogWrite()をあらためて測ったところ、0.13Msa/sぐらいは出ているで、
昨日の25倍というのは気のせいで、6〜7倍ぐらいのようでした。
アドバイスありがとうございました。

analogWrite(DAC0, 0);
analogWrite(DAC1, 0);
でとりあえず初期化。

書き込みモードの設定
DACC->DACC_MR |= bit(4)|bit(20); // Word transfer mode(bit4), Tag mode(bit20)

書き込み
DACC->DACC_CDR = x | (y<<16)| bit(28); // CDR[15:12] is CH for CDR[11:0], CDR[31:28] is CH for CDR[27:16]
0887774ワット発電中さん
垢版 |
2020/09/03(木) 18:17:00.38ID:8jiu3F95
Arduino Nanoで入力ピンの割り込み処理を行わせるプログラムを以下のように書いているのですが、割り込みの初期化時に必ず1回割り込みが発生してしまいます。

pinMode(2, INPUT_PULLUP);
attachInterrupt(0, func, CHANGE);

どうも、割り込み判定の初期値がLOWになっているようで、INPUT_PULLUPのようにHIGHを初期状態にした上で
割り込み判定をCHANGEやRISINGにすると、それをLOW→HIGHと判定してしまうようです。
(FALLINGでは発生しませんし、
pinModeのあとにdelayを入れても変わりませんので安定の問題でもないようです)

割り込み判定の初期値をHIGHにすることはできないでしょうか?
0889774ワット発電中さん
垢版 |
2020/09/03(木) 18:47:29.25ID:CxJaxSsr
AVRの割り込みは割り込みが無効の間も判定は常に行っていて有効になった瞬間に実行される
(じゃないと割り込み停止中に割り込み条件が満たされたことが検知不可能になるため)
それが嫌なら有効にする直前に自分で割り込みフラグを消せ

EIFR = 0x03;

で消せる(Nano、Unoの外部割込みの場合)
0890774ワット発電中さん
垢版 |
2020/09/03(木) 18:48:16.69ID:CxJaxSsr
>>888
それとこれとは話が別
ChangeにしてるってことはLowにしばらく引いた後Highに戻すときも拾いたいってことでしょ
Lowに引くときだけ割り込みたいわけじゃないのだろう
0891774ワット発電中さん
垢版 |
2020/09/03(木) 18:58:53.35ID:pfJMGwge
じゃあ普通に割り込み条件整ってるんでしょ
割り込み用のピンになに繋いでるのかな
0892774ワット発電中さん
垢版 |
2020/09/03(木) 19:16:50.51ID:8jiu3F95
>>889
EFIRは割り込みのマスクレジスタなんですね。
attachInterrupt前にEFIR=0x03することで回避できました。
AVRでの割り込み動作についても理解しました。
ありがとうございました。
0893774ワット発電中さん
垢版 |
2020/09/03(木) 19:19:20.67ID:8jiu3F95
>>891
ピンに何も繋がず、INPUT_PULLUPでHIGHに固定した状態で、attachInterupt(CHANGEまたはRISING)した時点で割り込みが発生していました。
INPUT_PULLUPした瞬間にピンはHIGHになっていることは確認しています。
0894774ワット発電中さん
垢版 |
2020/09/03(木) 19:27:52.48ID:CxJaxSsr
>>891
上でも書いたけど割り込みは無効の間も「割り込みフラグレジスタ」に記録される
無効状態でも割り込み条件を1回でも満たしていれ次に有効にした瞬間に割り込みが実行される
0897774ワット発電中さん
垢版 |
2020/09/04(金) 23:09:16.75ID:aFjtEL5i
>>889
昨日割り込みについて質問した者です。
その延長で教えて欲しいことがあるのですが、
割り込み判定を"CHANGE"にした場合に、立ち上がりなのか立ち下がりなのかを正確に取得する方法ってあるのでしょうか?

割り込み直後にピンの状態を取得しても、ものすごく短いパスルのような場合は割り込み時とは異なる状態が取得されてしまいました。
あらかじめ過去の状態を変数に保管しておいて、という方法ならその反対に変わったと判断できますか、これも処理が追いつかないと正確ではなくなりそうです。
トリガー情報が呼び出された関数の引数で受けられたりしたらベストなのですがそのようなものは無いですよね?
0898774ワット発電中さん
垢版 |
2020/09/05(土) 00:49:08.44ID:l7bTo89b
>>897
Low用とHigh用で2ピン使ってはどうかな
だけど そもそもCPUの処理速度が追いついてない様なので
意味がないかもね
0899774ワット発電中さん
垢版 |
2020/09/05(土) 01:07:26.99ID:l7bTo89b
1ピンでやるならカウンターをインクリメントしていって
0ビット目を調べるっていうのもあるね
ただどっちにしろ速度が間に合ってないっぽいけど
0900774ワット発電中さん
垢版 |
2020/09/05(土) 08:38:16.41ID:d+Ek/6cL
>>897
タイマーを外部クロック入力にして割り込み直後に前回値と比較すれば
Hi/Low/取りこぼしerrのステータス返す事ができるよ
1/2クロックまで、16MHzなら8MHzまで
それ以上のものすごく短いパスルはどうあがいても無理
0901774ワット発電中さん
垢版 |
2020/09/05(土) 08:50:32.54ID:kQ5Ba+cv
Cで書いたら割り込みはISRマクロで定義することになって、NAKED付けない限りr0とr1と割り込みルーチン内で使ってるレジスタのPUSHが入るし
そもそも該当の信号が同期化されて割り込みベクタに飛んでRJMP命令が実行される時点で4クロック分の時間を消費してるわけで・・・
Arduinoで書いてるなら使うレジスタを全部把握してISRにNAKEDつけて退避なしで組むとかほぼ不可能だと思うし
16MHzでやるには辛い仕様なんじゃないの。実際どういう目的で使ってどういう信号が来てるのか書いてみてよ
0902774ワット発電中さん
垢版 |
2020/09/05(土) 08:58:27.63ID:d+Ek/6cL
どうあがいても無理と書いたけどあれは嘘だ
外部クロック注入前に74HC4040等で文周すれば80Mhzくらいまでいける
「ごく短いパルス」というのがふんわりしすぎていて仕様を満たしているかわからん
0903774ワット発電中さん
垢版 |
2020/09/05(土) 09:01:47.66ID:Bh1COiwQ
外部部品OKなら外付けで何でもできるだろw
パルスカウント用に高速のマイコンつけりゃいいだけだし
0904774ワット発電中さん
垢版 |
2020/09/05(土) 13:26:20.70ID:51fz6+O0
>>897
割り込みトリガをトグルするとかどうかな
始めRisingでトリガして呼ばれたらFallingに変える
Fallingで呼ばれたらRisingに変える
0905774ワット発電中さん
垢版 |
2020/09/05(土) 15:31:15.46ID:kQ5Ba+cv
外部割り込みピンでもピン変化割り込みは使える、かつ同時にフラグが立ったときは割り込みベクタ番号の若い方、つまり外部割込みが優先して実行されるから
両方有効にして外部割込みはRISINGのみにする、外部割込み直後にピン変化割り込みのフラグを解除する行を追加
これで擬似的にRISINGは外部割込み、FALLINGはピン変化割り込みのISRになる・・・かな

まぁどっちにしろ信号の早さに対してマイコンのクロックが足りてないっぽいのでどんな手段をとろうが取りこぼしが起きるだろうけど
0906774ワット発電中さん
垢版 |
2020/09/05(土) 20:35:40.69ID:A9YmElxw
ノイズに付き合う必要も無いので短すぎるパルスは切り捨てる判断も必要
0908897
垢版 |
2020/09/06(日) 00:10:27.69ID:ENB3+WXk
返信が遅くなりすみません。いろいろとアドバイスありがとうございました。
今回の(CHANGEでのRISING/FALLING判定)は具体的な利用のものではなく、前回の延長としてそういったことはできないか、という意図でした。なので非現実的なことを聞いてしまったかもしれずすみません。

CHANGEでの割り込みで、関数の最初にHIGH/LOWを見てRISINGかFALLINGか判定した上で、それぞれカウントするという簡単なコードで試した際、タクトスイッチのチャタリングのような細かい周期の割り込みでは正確に拾えなかったことから質問させていただいた次第です。
(RISINGとFALLINGのカウントは常に1しか差が出ないはずがそうではなかったため)

電子工作は初心者で、ソフトウェア寄りな人間なので確実な方法を求めてしまいました。
ソフトウェアでの限界はある程度はあきらめることや、周辺回路でサポートすることも必要ということですね。いろいろと勉強になります。
0909774ワット発電中さん
垢版 |
2020/09/06(日) 02:16:19.40ID:/I1mLbcA
人間の手では50ms以上の速度でタクトスイッチを押すことは高橋名人でも不可能なので
50ms未満の変化はソフトウェア的に無視するよう書くべき
0910774ワット発電中さん
垢版 |
2020/09/06(日) 02:34:59.61ID:oL+Eils3
>>909
16連射ならデューティ50%としてON(OFF)時間は31.25msecだから高橋名人なら可能なんじゃね
実際には16連射より速かったそうだし
0911774ワット発電中さん
垢版 |
2020/09/06(日) 04:25:27.24ID:1lTnjv1t
makeして書き込めと言われたのですが、makeとは何でしょうか?
ArduinoIDEで出来かすか?
0912774ワット発電中さん
垢版 |
2020/09/06(日) 05:54:59.54ID:fQUA5CLB
makeとはソース(スケッチなど)をコンパイルリンクして実行ファイル(機械語HEXファイルなど)を作成すること
ArduinoのスケッチならArduinoIDEで可能、素のAVRのソースならAtmel Studioなどに読み込んでコンパイルリンク、Makefileが付いてるならgccとかで一気にできるんじゃない?
0913774ワット発電中さん
垢版 |
2020/09/06(日) 10:46:16.47ID:SzyzFnS5
>>909
連射は難しいけど、単発で1回押すだけなら20msぐらい余裕だよ。
意図的に短いパルス出そうとして頑張れば10msぐらいでもいける。
0915774ワット発電中さん
垢版 |
2020/09/06(日) 10:56:51.46ID:WAJ/rXk5
働いたらmake
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況