X



トップページ電気・電子
1002コメント342KB
Arduino初心者熱烈大歓迎質問スレ part22
■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2018/08/18(土) 08:37:53.78ID:ridqLuOK
http://www.arduino.cc/

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


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

過去スレ
Arduino初心者熱烈大歓迎質問スレ part20
https://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/
Arduino初心者熱烈大歓迎質問スレ part16
http://wc2014.2ch.net/test/read.cgi/denki/1451909868/
Arduino初心者熱烈大歓迎質問スレ part15
http://rio2016.2ch.net/test/read.cgi/denki/1451893274/
0087774ワット発電中さん
垢版 |
2018/08/26(日) 13:26:50.07ID:jPZor44m
>>79
お見事です
ありがとうございます
0089774ワット発電中さん
垢版 |
2018/08/26(日) 13:36:15.61ID:jPZor44m
お騒がせしました
みなさんありがとうございます
また色々参考になるご意見今後の参考にします
またご質問させていただくことがあると思います
0090774ワット発電中さん
垢版 |
2018/08/26(日) 13:40:55.19ID:r0Pk6YgE
ほんといろいろな意味で気持ち悪いコード
adcサンプリング周期とか無視かよ
millis() の使い方それでいいのか
analogReadは ADSCでのポーリング読み込みだから
あらかじめハード的に周期を観測して決めなければならない
というか、はあ、初心者はそういう発想で来るのねという感想
0092774ワット発電中さん
垢版 |
2018/08/26(日) 13:44:13.57ID:jPZor44m
>>82
ありがとうございます
0093774ワット発電中さん
垢版 |
2018/08/26(日) 13:49:32.77ID:jPZor44m
>>90
ど素人なのでご容赦ください
サンプリング周期??
ネットで調べたらアルデュイーノのanalogReadは量子化を考えてサンプリング定理でローパスフィルター入れてって書いてあったから
入れてみたけど失敗しました
0097774ワット発電中さん
垢版 |
2018/08/26(日) 18:00:09.10ID:r0Pk6YgE
床屋行ったので書いてみた
timerone ライブラリを使用しているので、gitからダウンロードしてね
/*
50Hz meas
use lib :
github.com/PaulStoffregen/TimerOne.git
1/50Hz = 0.02 (1 period)
0.02 / 100 =0.0002 =200u ( 100 sample = 1 period)
*/
#include <TimerOne.h>
#define SAMPLE_SZ 100
#define SAMPLE_PERIOD 200 // us
#define BLOCK_SZ 50
#define BLOCK_SZ_INV (1.0/50.0)
int sample_buf[SAMPLE_SZ];
int sample_buf_p;
int sample_buf_ready;
void isr_timer1() {
int data;
if( sample_buf_p < SAMPLE_SZ ){
data = analogRead(0); // wait for ADC
sample_buf[ sample_buf_p ] = data;
sample_buf_p++;
}
if( sample_buf_p == SAMPLE_SZ ){
sample_buf_ready = 1;
sample_buf_p++;
}
}
void setup() {
Serial.begin(9600);
sample_buf_p = 0;
sample_buf_ready = 0;
Timer1.initialize(SAMPLE_PERIOD); // unit=usec
Timer1.attachInterrupt(isr_timer1);
}
void loop() {
int i,j; int data;
int max; int min;
float sum; float avr;
float val;
sum = 0;
for (j = 0; j < BLOCK_SZ; j++) {
while( sample_buf_ready == 0 ) ;
max = 0;
min = 32767;
for (i = 0; i < SAMPLE_SZ; i++) {
data = sample_buf[i];
if (max < data) max = data;
if (min > data) min = data;
}
sample_buf_p = 0;
sample_buf_ready = 0;
sum += ( max - min );
}
avr = sum * BLOCK_SZ_INV; // outer loop sz
val = avr * (5000.0 / 1024.0) / 2.0 / sqrt(2) * 10.0 - 500.0;
Serial.println(val);
}
0098774ワット発電中さん
垢版 |
2018/08/26(日) 18:02:31.75ID:r0Pk6YgE
ああ、ダブルバッファにしてなかったから
これはボツだ
まあ、参考にして書いてみて
0099774ワット発電中さん
垢版 |
2018/08/26(日) 19:06:11.69ID:jPZor44m
>>97
感動しました
ありがとうございます
参考にさせていただきます
0101774ワット発電中さん
垢版 |
2018/08/26(日) 19:12:59.73ID:r0Pk6YgE
蛇足
コンパイラがどう解釈するかだけど
sqrt(2) が定数にならないかもしれないので
1.4142135とか数値で書いたほうがいいかも
0102774ワット発電中さん
垢版 |
2018/08/26(日) 19:39:09.03ID:RnJw4+CK
//(5000.0 / 1024.0) / 2.0 / sqrt(2) * 10.0
17.2633491501
そんなとこまで気にするならいっそのこと固定値
0104774ワット発電中さん
垢版 |
2018/08/27(月) 01:11:41.59ID:RmXp7I6V
Ethernet PHY付けて通信する時はSPIから線を延ばせば良いのね?
遅そうだけど
0105774ワット発電中さん
垢版 |
2018/08/27(月) 12:05:14.07ID:JrLIHxIO
長文ですみません。複数のアナログ値の読み込み時の動作ついて教えてください。
今作っている装置では、ArduinoNanoのA0,A1,A2,A3,A6のポートに合計5つのセンサーが取り付けられています。(4と5はI2C)

AD変換完了割り込みベクタを使って、ADMUX書込み(チャネル変更)→ADSRAのADSCをセット(変換開始)して最速で回しているのですが
これで全5つセンサーのデータを正しく読み込めているんでしょうか?動きはしますが、他のポートに繋いだセンサの影響が出ています。
(例えばA0のセンサを外して1kΩ経由で5Vに繋いだりGNDに繋いだりすると、関係ないA1やA2の値が引き摺られて変わります。)

サンプルプログラムを掲載している先人のウェブサイト(ArduinoだけでなくAVRマイコンの物も含む)を見ると
『ADMUXレジスタに書き込んで、マルチプレクサが安定するまで待つ』と言った記述をしているサイトが見受けられます。
これは経験則から来るものでしょうか?または、どこか公式の文献に記載されている所がありますか?
ATmega328Pのデータシートや、Atmel(今はMicrochip?)が発行しているADコンバーターに関する応用記述を読むと
基準電圧を切り変えた場合は最初のAD変換の結果は不正確なためこれを破棄することが推奨されていますが
マルチプレクサを(シングルエンド入力チャネル内において)切り変えた場合については特に言及されていませんでした。

ADコンバーターの設定はArduinoデフォルトのままなので16MHzが1/128されて125kHzが変換クロックですよね。
ADMUXに書き込んだ後ADSCが上がって即変換クロックのタイミングだった場合、マルチプレクサ変更から即ADCが始まったとして
データシートの仕様を見ると通常変換モードで、ADSC立ち上がり認識からサンプルホールド開始まで1.5変換クロックとあるので
この今のスケッチだと、マルチプレクサのレジスタが書き換えられてから、最速の場合でおよそ12μ秒後にサンプルホールドが始まっています。
この時間はマルチプレクサの切り替えに十分でないのでしょうか?(切り替えに10秒も掛かるマルチプレクサ...?)切り替えに必要な動作時間の記述が見つけられませんでした。

AD変換周期をカット&トライで伸ばして行けば、今回の結果が前回の結果に引き摺られる量が減ることを確認したので
値の引き摺りが我慢できるところまでサンプリング周期をテキトウに伸ばしちゃっていますが、サンプリング周期を設定する根拠が欲しいのです。

出来ればサンプリング周期は下げたくないので、もし、そもそも自分が何かミスをしていて上記問題を解決できる方法があれば教えてください。
サンプルホールド回路の入力インピーダンスに対してセンサーの出力インピーダンスが高いのかと思いましたがそうでもないようでした。
0108774ワット発電中さん
垢版 |
2018/08/27(月) 13:14:14.12ID:VfeTu6Pj
切り替え初回はゴミが入るかADC再起動しないと
正しい値は入らないだろうね
(チャージがリセットされない)
>根拠
データシートにしかないだろうね
丹念に読んで該当する項目内無いならあきらめるしかない
(無いとすれば)
メーカーも(ばらつき大きい等の理由で)保証しないのだろう

マルチプレクサをADCに外付けで多チャンネル化したことはある。
このときは、MPXの出力をオシロで見て波形確認したよ
0110774ワット発電中さん
垢版 |
2018/08/27(月) 16:05:59.12ID:ri+A/WGq
>>105
データシートの28.5章(Page 310)以降を読むべし
0111774ワット発電中さん
垢版 |
2018/08/27(月) 16:16:51.77ID:wftN9EiU
>>110
それに準拠して設計してあんじゃん
データシートと質問を読んで意味がわからないならレベルなら無理に答えなくていいよ
0112774ワット発電中さん
垢版 |
2018/08/27(月) 16:24:21.38ID:wftN9EiU
これだけじゃどうせなんか言われるんで
>>105
ダイに印刷されてるようなマルチプレクサがそんな遅い訳あるか 切り替えに数十ナノ秒すらかからん
データシートに書いて無いのはそのマイコンの最速20MHzでも次の命令実行前に切り替えが終わってて無視できるほど速いから
単にS/Hキャパシタに前回の値が残ってるだけ 外部回路の出力Zは低いと言い張ってるが本当にそうか?
例えばLM35なんかはシンク駆動Zめちゃ高いぞ(データシートは低インピと謳っているがちゃんと見るとソース駆動の話だ)
センサーの出力段がプッシュプルじゃないんだろ LM35みたいなハイサイド+プルダウンじゃシンク側が間に合わん
抵抗分圧のPTCサーミスタやCSDセルなんかもダメな ADCを共用して入力するにはZが高い
このサイト読んでみ ↑と同じ話が書いてある 解決策も
http://siesta.la.coocan.jp/zk/AVR_ADC/AVR_ADC.html
0113774ワット発電中さん
垢版 |
2018/08/27(月) 17:48:25.44ID:HGZ4HjcO
LM35Dには自分も半日トラブった。
資料は隅から隅までキチンと読まないと、と反省した。
0115774ワット発電中さん
垢版 |
2018/08/27(月) 22:04:05.57ID:qmtajQVi
>>109
MycroPython乗せたらAruduinoじゃなくなるよ。
以前はAVR用の有ったみたいだから、無理やり乗せようと思えばできないことも無いんだろう。
少なくとも現在は公式には無い。
Python on the chipとか、circuit pythonとかが有るみたい。
0116774ワット発電中さん
垢版 |
2018/08/27(月) 22:52:01.71ID:F/WEJENM
>>112>>113
センサーの出力なんて
「自分の出力値よりかなり高いレベルまで充電済みの容量性負荷」
に繋ぐことなんて想定してないってことか
横からだけど勉強になった
頭の片隅にいれとこう
0117774ワット発電中さん
垢版 |
2018/08/27(月) 23:33:02.38ID:KgfwCP5/
入出力の端子全部使うとかはやめといた方がいいのかな
0118774ワット発電中さん
垢版 |
2018/08/27(月) 23:44:32.79ID:0sHK/AtS
やめといた方がいいような数のポートなんか付けたりしないのでは?
つまり全部使っても問題ないと思う。
実際はどうなのか知らないけど。
0120774ワット発電中さん
垢版 |
2018/08/28(火) 00:22:21.51ID:353p49y/
>>105
蛇足かもしれんけど、>>112さんのを補足すると

>『ADMUXレジスタに書き込んで、マルチプレクサが安定するまで待つ』と言った記述
の「マルチプレクサが安定するまで待つ」は間違いで、
「マルチプレクサ切り替えに伴って生じる回路の過渡応答が収まるまで待つ」という
ほうが正しい

また、AVRのマルチプレクサ切り替えのタイミングは、ADMUXレジスタに書き込んだ時では
なくて、変換開始(ADSC立ち上がり認識)時だから、
・ADMUXレジスタに(新しいチャンエル番号を)書き込み
・100us 待つ
・変換開始・終了を待ってデータ取得
のようなことをしても、事態はあまり改善しないはず

「AD変換周期をカット&トライで伸ばした」っていうのが、実際にはどうやったのか分からないけど
単純に待つかわりに、変換結果を一回読み飛ばすとかしないとダメだと思う
そうすれば、マルチプレクサ切り替えからサンプルホールド開始までの時間は
10倍くらいとれるから、センサーの出力インピーダンスはデータシート推奨上限
10kΩの10倍、100kΩくらい行けると思う
0123774ワット発電中さん
垢版 |
2018/08/28(火) 01:05:53.06ID:353p49y/
あ、長文書いたけど間違ってるな orz

・ADSC立ち上がりでチャンネル変更
・ホールドキャパシタはADSC立ち上がりから1.5クロックの時間だけ入力に接続され
 その後切り離される
・ホールドキャパシタの保持している電圧をAD変換
・変換終了した時点でホールドキャパシタは再度入力に接続っていう流れだな
 (データシートにははっきり書いてないけど)

そうだとすると、一回目のAD変換を読み飛ばすだけじゃだめで、変換終了後
delayを入れてホールドキャパシタを充放電しなきゃダメだな

まさか、変換開始から1.5クロックの時間だけしか入力に接続されないようになってるって
ことはないと思うけど、そこはデータシートからは読み取れない(と思う)
0124774ワット発電中さん
垢版 |
2018/08/28(火) 03:06:07.42ID:2bzc/SNA
>>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でやっただけ)
0125774ワット発電中さん
垢版 |
2018/08/28(火) 03:23:44.21ID:2bzc/SNA
追記
なので、当然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になる(データシートより)
(サンプルホールド回路のサンプリング時間はさらに減るので駆動インピーダンスに注意)
0126774ワット発電中さん
垢版 |
2018/08/28(火) 03:47:22.35ID:aiN3pJsc
ほっといても放電されないね。変換したときしかサンプルしないから。
何かAD変換したあとフローティングのピンを測ると前と同じ値をずっと言ってくるよ。

>>120
マルチプレクサが固定されるのがADSCを拾ったときなだけで、変更自体はいつでもされてるから中段は間違いだよ。
0128774ワット発電中さん
垢版 |
2018/08/28(火) 16:14:40.48ID:sWKMIruj
早い話、MPX切り替えた時にADC状態初期化が要る
というだけなんだがな
(一回空読みでもよい)
だから、fsがあげられるなら2倍にしてやればよい
というだけなんだがな
0131774ワット発電中さん
垢版 |
2018/08/29(水) 04:40:03.42ID:iBVYjJWb
どうしてホールドするとき以外は外につなぐようになってないの?
0132774ワット発電中さん
垢版 |
2018/08/29(水) 08:26:54.95ID:wgto5UtO
マイコンのピンはADCだけじゃないんだから他の回路の特性に影響が出るじゃん
ポートの交換機能たくさんあるだろ?目的の機能が作動する時しか繋がないよ
0133774ワット発電中さん
垢版 |
2018/08/29(水) 08:45:04.86ID:YR7axSf6
>>132
たぶん>>131はポートに繋がってる時間(=サンプリング時間)が短いことが言いたいワケじゃなくて
>>125の解決法みたいに自動的にGNDにディスチャージしとけば?って言いたいんじゃねーかなと思った

>>131
連続変換だと13ADclkごとにADCが掛かるわけで、2ADclk目でサンプルホールドは終わってるけど
残りの11ADclkはホールドした電荷をAD変換に使っているわけだからホールドしてなきゃ意味ない時間だろ
そして質問者>>105の使い方は13ADclk毎にずっとAD変換させてるわけで「サンプリング中」と「ホールド中」以外の時間はほぼ無いじゃん?

質問者のように出来るだけ高速でセンサー連続監視する使い方じゃなく、必要なときだけAD変換すればいいなら
使い終わった後ADENを0に(AD変換をオフに)すれば次回起動時にはちゃんとディスチャージされてるよ(>>128が書いてる解決法ね)
連続変換でこの手を使うと毎回初回変換扱いになるから12ADclk伸びて25ADclkの変換時間がかかる事になるから
>>125の1回GNDを測るのとAD変換のサンプリング周波数はほぼ同じようなもんになっちゃうけどね
0134774ワット発電中さん
垢版 |
2018/08/30(木) 19:56:12.86ID:EFoXrqxN
111から後、すっごいためになった
こういう情報もらえるのがArduino(AVR?)のいいところだね
マイナーなマイコンだとこうはいかない

まあ、LM35DZ使う場合に限ってだと、1k抵抗通して0.1uFくらいのコンデンサ入れて
おくだけでいいかも
0135774ワット発電中さん
垢版 |
2018/08/31(金) 16:27:30.97ID:LYeKJqDa
秋月の pro mini 互換で動いてたけど
壊してしまった。 電気的な壊れではなく 踏んづけて・・・
また 買ってきたのだが 書き込みがうまくできない
なんでだろ・・
0136774ワット発電中さん
垢版 |
2018/08/31(金) 16:48:42.93ID:bDioAJyC
>>135
pro mini は書き込み時のリセットのタイミングがシビアな個体があった気がする。手でリセットボタンをタイミングよく押すか、USBシリアルのどこかににコンデンサ挟むとか、検索すると色々出てくるよ。
0137774ワット発電中さん
垢版 |
2018/08/31(金) 17:00:25.93ID:LYeKJqDa
有難う エラーはこんな感じ

avrdude: stk500_recv(): programmer is not responding

.
.
.

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
0139774ワット発電中さん
垢版 |
2018/08/31(金) 19:35:48.86ID:LYeKJqDa
>>138
秋月のUSB 経由 
設定はAVRISP かAVR ISP MKII 
0141774ワット発電中さん
垢版 |
2018/08/31(金) 19:57:22.68ID:dzIN1Au0
>>139
う〜ん、わかんねw がんばってw
一応書いとくわ

@USBケーブルをチェック、交換してみる(意外とこのトラブルが多かったりする)
APCが書き込み装置を認識しているか、デバイスマネージャで確認する
B>>136の方法で、ArduinoIDEのログ画面を見ながら、書き込む瞬間にタイミング良くリセットボタンを押す
Cブートローダが書き込まれてない?
0142774ワット発電中さん
垢版 |
2018/08/31(金) 20:12:58.65ID:LYeKJqDa
ケーブル ,USB I/F, pro mini  全て新品同一品
(PCより外側全部 交換)

usb デバイス認識 OK
シリアルloop back テスト OK







ブートローダは書き込み済みのはず
0143774ワット発電中さん
垢版 |
2018/08/31(金) 20:17:17.49ID:dzIN1Au0
踏ん付けちゃったのが正常に書き込み出来てたんなら
初期不良かなー
0144774ワット発電中さん
垢版 |
2018/08/31(金) 21:40:32.94ID:LYeKJqDa
残るはarduino IDE・・・・・
0145774ワット発電中さん
垢版 |
2018/08/31(金) 22:06:07.30ID:bDioAJyC
とりあえずもう一枚pro miniを買ってきて、環境の問題かボードの問題か切り分ける。

ただ、俺は同じようにpro miniでリセットでハマったことがあるのでそれ以後はほぼpro microを使ってる。
0147774ワット発電中さん
垢版 |
2018/08/31(金) 23:08:23.75ID:LYeKJqDa
コンデンサーやってみますわ
 
0148774ワット発電中さん
垢版 |
2018/09/01(土) 21:05:04.43ID:JYSndVAB
動作しました
リセット回路 0.1u 電源 10u 入れて何回かトライしたら
動作したので ためしにはずしてみたら 動作してる


んーー原因がはっきりしない

昨日の猛暑ではまるっきりだったのに
(ノートPCはエラーがでてwifi 環境の不動作がたびたび発生してた)

ピンに負担がかからないようツイストケーブル20cm位いれても 問題ないし
0149774ワット発電中さん
垢版 |
2018/09/01(土) 21:12:54.42ID:FgPACo7t
>>148
よかったね。俺の場合は、あるpro mini個体が元々問題なく書き込み出来てたのに、ある日突然書き込み出来なくなった。
でリセットボタンをタイミングよく押せば書き込み出来たけど、いちいち面倒なのでそれ以降pro microに変えた。aitendoでpro mocroは700円、pro miniは650円。
0150774ワット発電中さん
垢版 |
2018/09/01(土) 23:31:59.54ID:JYSndVAB
回路図見たらreset 端子- gnd 間にコンデンサが入ってないんだね・・
0151774ワット発電中さん
垢版 |
2018/09/02(日) 21:53:59.25ID:hp57q4DN
Arduino IDEアップデートのメッセージ出るけど
ボードもIDEもエラーでアップデートできてないみたいなんだけど
なんかやり方がある?
0153774ワット発電中さん
垢版 |
2018/09/02(日) 22:09:25.37ID:2XGpzPkj
v1.8.6 キタ━━━━(゚∀゚)━━━━!!
0154774ワット発電中さん
垢版 |
2018/09/02(日) 22:13:31.61ID:2XGpzPkj
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)の修正をリリースしました。
0155774ワット発電中さん
垢版 |
2018/09/02(日) 23:23:47.89ID:7pJbqeuf
>>150
arduino ide用だから
コンデンサつけると書き込みエラーになると思う
atmelのプログラマー使うのであればあってもよい
秋月のボードにはそれを切り離す端子がある
0156774ワット発電中さん
垢版 |
2018/09/03(月) 00:31:00.38ID:a5kQ82Ed
i2c のプルアップ、電源だけ切り離せるようになってるだが・・
0157774ワット発電中さん
垢版 |
2018/09/03(月) 18:39:30.48ID:wW5kbnzs
delayとか要らなくてもタイマー0の溢れ割り込みは使えないんですか?
定義するとエラーになります。millisとか纏めて使用不能になってもいいので使う方法ありますか?
比較A割り込みと比較B割り込みはPWMに使っているので使えません
0158774ワット発電中さん
垢版 |
2018/09/03(月) 19:07:12.21ID:Y4+Sl2oa
>>157
AVRとしては可能だけど、ライブラリがないんじゃないかな
エラーになるって、具体的にどういうふうに書いてるの?
0161774ワット発電中さん
垢版 |
2018/09/03(月) 19:22:49.86ID:wW5kbnzs
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に対するコンパイル時にエラーが発生しました。
0162774ワット発電中さん
垢版 |
2018/09/03(月) 19:26:34.24ID:wW5kbnzs
>>160
タイマー2はライブラリがあって速度が変えられるので別なことに使いたいです
タイマー1はサーボを使うと確か使っちゃいけないんですよね?
0163774ワット発電中さん
垢版 |
2018/09/03(月) 19:45:09.95ID:yDYlzdpv
hardware/arduino/avr/cores/arduino/wiring.c
の中でシステムの
ISR(TIM0_OVF_vect)
が既に有って二重定義に成る訳で
これを変更したとしてどうやって実際のビルドに反映させるのか知らないので
別の方宜しく
0164774ワット発電中さん
垢版 |
2018/09/03(月) 20:13:12.41ID:Y4+Sl2oa
TimerOneライブラリの、attachInterrupt() のようにすればいいんじゃ?
ソースの場所が分からんけど ^^;
0165774ワット発電中さん
垢版 |
2018/09/03(月) 23:30:16.44ID:Y4+Sl2oa
あ、164はダメだな orz. TimerOne.cppの中で
ISR(TIMER1_OVF_vect){ Timer1.isrCallback();}って定義して
isrCallbackを後からattachInterrupt()で書き換えるってやり方だけど
ISR(TIMER0_OVF_vect) のほうは、すでに定義されてるから同じやり方できない、ってことだものな
安易に問題回避するなら hardware/arduino/avr/cores/arduino/wiring.c を書き換える?
0166774ワット発電中さん
垢版 |
2018/09/03(月) 23:51:03.44ID:wW5kbnzs
自分で定義を書いてもdelayとかの定義が上書きされるわけじゃなくてただエラーになるだけみたいなので
IDEのなかのファイルを書き換えるのは怖いし、ぜったい戻し忘れて他のスケッチがおかしくなりそうです
今回のプログラムではD6ピンのPWMは25〜230までしか指定しないから常にPWM信号がでていたので
D2ピンに繋げていた部品をA3ピンに移してA3ピンをD17ピンとして使って、D2ピンを空けてあげて
INPUTにしたD2ピンにD6のPWM信号ををつなげて外部割込み【RISINGを指定】の所にやりたかった内容を書いたら
タイマー0が0になるたびD6がHIGHになって外部割込みがちゃんと起動したので
結果的にTIMER0_OVF_vectと同じ挙動になりました ありがとうございました
0168774ワット発電中さん
垢版 |
2018/09/04(火) 02:14:19.76ID:BNoNwdJU
あと、ちゃんと理解できてないんだけど、166のは比較A割り込みを使うのと
どう違うの?(動けばいいわけだから、別に非難してるとかじゃないです)
0169774ワット発電中さん
垢版 |
2018/09/04(火) 09:26:23.56ID:sYZx3o2Z
>>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#
0170774ワット発電中さん
垢版 |
2018/09/04(火) 09:29:58.27ID:sYZx3o2Z
悪い、右のアノテーションの3段目(一番下)のラベルは OCR0B = 25 の間違い。1つ上からコピーして変え忘れた。
0172774ワット発電中さん
垢版 |
2018/09/04(火) 12:14:25.17ID:sYZx3o2Z
ロジアナでぐぐれ。オシロとはちと違う。
オシロがアナログ信号向けとしたらロジアナはデジタル信号向け。
(アナログ測れるチャンネルもあるけど)
0176774ワット発電中さん
垢版 |
2018/09/04(火) 15:38:57.73ID:aQEgfYiw
pin数の少ないATtinyで一つのpinに複数の機能が割当てられてる時
対象pinの使いたい機能はどのように選択するのでしょうか
0177774ワット発電中さん
垢版 |
2018/09/04(火) 15:55:45.74ID:sYZx3o2Z
それもうAVRの質問では?
別にmega328Pだって1つのピンにいろんな機能があるぞ。それと同じ。
0181774ワット発電中さん
垢版 |
2018/09/04(火) 17:19:02.90ID:PZa4CJvu
>>178
Saleaeは海賊版で使うなと怒ってるからなぁ
中華クローンのVIDとPIDがSaleaeのやつ勝手に使ってんだよね…
アップデートでアクティベーション式にするというアナウンスも前にあったが…
sigrokからpulseView落としてそっちにしときな
0183774ワット発電中さん
垢版 |
2018/09/04(火) 18:19:00.07ID:I5SSKhDh
arduinoに指定した回数のパルスを発生させる関数て無かったっけ?
あれでも>>169の様な問題出るのかなとぐぐってみたら関数自体が全然見当たらなかった

何かのライブラリだったのかな
0184774ワット発電中さん
垢版 |
2018/09/04(火) 18:19:10.84ID:PZa4CJvu
そりゃすまん悪気はないんだ
pulseViewも使いやすいしな
ID盗用してるせいで挿すとSaleae Logicて認識されるけどw
激安シリーズでアナログ1chも追加でついてるやつもあったんけど今は出てないのかな
0185774ワット発電中さん
垢版 |
2018/09/04(火) 18:21:00.84ID:PZa4CJvu
>>183
パルスとはちょっと違うがshiftOutのこと?
あれってどのピンても使えるしソフトウェア実装では
0186774ワット発電中さん
垢版 |
2018/09/04(火) 18:40:16.98ID:I5SSKhDh
>>185
方向+ステップ数のステッピングモータードライバでステップ数をPWMで
済ませてる様なのを見た記憶があったんだけど、多分ソフト実装だったんだね
■ このスレッドは過去ログ倉庫に格納されています

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