Arduino で遊んだときの記録。
重要: 電子工作の注意点
Arduino で遊んだときの記録
License: GNU General Public License v3.0
Arduino で遊んだときの記録。
重要: 電子工作の注意点
// 基本デザイン
// D6: 正入力、AIN0、標準ピン配置のまま
// D7 負入力、AIN1、標準ピン配置のまま
void setup() {
// |-|ACME -> 0|-|-|-|ADTS2|ADTS1|ADTS0|
// ACME: PD6 の代わりに ADC を負入力に使う ->0
// ADTS: は 22.3.1 に記載なく不明。どうやら割込み処理で ADC を動作させるもののようだ -> 0
ADCSRB = 0;
// |ACD|ACBG|ACO|ACI|ACIE|ACIC|ACIS1|ACIS0|
// ACD: コンパレータ無効 -> 0
// ACBG: 正の入力に Vref を使う -> 0
// ACO: AIN0>AIN1 のときに 1 が書き込まれるのではないか。読み込み専用
// ACI: ACIS1, ACIS0 との組み合わせでの割込み用。とりあえず while で待ってみるので ->0
// ACIC: TIMER1 をうんぬんかんぬんした割込み用。とりあえず理解できないので -> 0
// A0IS: とりあえず割り込まないので -> 0
ACSR = 0;
// |-|-|-|-|-|-|AIN1D|AIN0D|
// AINxD: デジタル入力無効 -> 1
DIDR1= 0b00000011;
}
void loop() {
// put your main code here, to run repeatedly:
int acsr = ACSR;
acsr = acsr & 0b00100000;
if(acsr == 0b00100000 ) {
digitalWrite(LED_BUILTIN,HIGH);
} else {
digitalWrite(LED_BUILTIN,LOW);
}
}
データシートの 22.3.2 によると 1-2 clock cycle の遅延とあるから、analogRead() よりも相当速いかも
100Ωだと、5v (3.2V 程度のはずだけど念のため) からの初期消費電力が0.25Wとなる。最低でも 220Ωが限界の 0.11W.
放電を 220Ω に固定するのがよさそう。1ピンに統一したけど、元に戻すのがよさそう。
2.2MΩ, 47pF-0.047uF, 時定数 1e-4 ~ 0.1sec
10kΩ, 0.1uF ~ 10uF, 時定数 1e-3 ~ 0.1sec
47Ω, 22uF ~ (2200uF), 時定数 1e-3 ~ 0.1 sec, 2200uF の放電は 3秒
まあここまででいいかな。
よく考えたら、配線が細かくなる原因って、たいてい 5V, GND じゃない?これすごく便利なのでは?
H=3.5mm ソケットは足が短かすぎて、はんだがのりにくい。
https://github.com/Nobutarou/ArduinoDeAsobu/tree/main/PWMFan_PID-Controll_Temperature
で途中まではんだして、レギュレータの Vin, GND が繋がるところまで来たので 12V 掛けてみたら、焦げた。
理由がわからない。
適当に 5V 与えたり D-, D+ を 300Ωとかで繋ぐだけだと充電できたりできなかったり。
LED Renser の ランタンはできない
Android スマホはできる
LED 簡易照明はできる。
たぶん、機器によって 5V 与えるだけで良いのと、最低限 USB としての振舞いが求められるもとといろいろありそう。
秋月に充電に関する良さそうなチップがないんだよね。
見た目 3.5MΩ位に見える。
で単純に digitalWrite(7,HIGH); で測ると 2.3V くらいしか出ていない
pinMode(7,OUTPUT); してからだと 5V 出る
ビンヘッダで設計しなおそう
練習してよかった。
知識が無さすぎて、シリアル通信で結果送るなら Arduino 経由の方法しかわからない。
そうなると Arduino で作るのと大差ない。
ソフトウェア的には
https://qiita.com/yuiseki/items/bfa9ad984f7333377870
ここにあるように stty の後に cat するだけで良いんだろう
FT232RL との接続はここを参考にすれば良さそうだ。基本的に受信だけなら電源供給と PIC RX -> FT232RL TX だけで良さそう
http://zattouka.net/GarageHouse/micon/linkPC/FT232R.htm
ここも参考に
http://cat0048.my.coocan.jp/PIC16F1938/PIC16F1938_uart.html
とりあえず FT232RL 単体準備して、いろいろ試してみるしかないな。
今 wago を 3個(rpm線は無視) じゃらじゃらつけているけど、安定感に欠けるから、両端にターミナルブロックがあるだけの小さい基板作ってつなごうかな。
シリアル通信で入力した値で変数書き換えられるようにしたいな。
Arduino UNO R3 の ICSP ヘッダからコネクタ伸ばして、ブレッドボード上にATmega328P に刺せば良い感じのものを
毎回 ICSP 形式(ブートローダー書き込みやうまくいかないときに avrdude 直接叩くため)とシリアル形式(Arduino IDE からスケッチのアップロード)を切り替えるのが面倒くさいので
苦手な配線曲げ、突合せは、これで回避できるんじゃない?
はんだが難しそうだけどリードフレームとかいうやつが良いのかな。
何もわからず、リレーと似たようなものと思って使ったけど、電流が一方向にしか流れないから、だめじゃない?
というか、そこはもう一度確認したいな。
名称一つにしてくれよ。ISCP ヘッダは秋月のマイコンボードから出てるので、プログラミングが必要なときは、FT232RL 外してこっちを使う。ISCP ヘッダだけで電源供給もできる。
ただのシリアル送受信の時はボードに付ければ OK だ。
まあとりあえず、目途はついた。シリアル通信プログラミングも何とかしたいとは思うが。
でもデータシート 27.8 節読んでも SPI の仕組みしか書いてないんだが、、、
適当に付けてるだけじゃないの? 同じような周波数で動くマイコン等には 0.1uF とか付けるし秋月の FT232RL 同じく 12MHz 駆動にも 0.1uF だか 0.01uF だか付いているし。1uF くらいならあるようなので 1uF 程度まで探してみよう。
ATMega328P と秋月FTR232RL のピンソケットとの結合が緩い
0.65mm 角足のヘッダとなら合うが、これはこんどはきつすぎて、取り付け取り外しが面倒。基本的に、基板結合用だしね。
Φ0.6mm スズメッキ線がちょうどよい感じ。
すこし曲がってる足は導通できてるので、全部の足をくねくね曲げてもよさそう
FT232RL は 0.65mm のものに、ATmega328P は直接はんだとなった
75Ωだと、ATmega328P IO ピンの定格 40mA を超えてしまう。保護用のダイオード (13.1節のデータシート) のおかげで 40mA 以上は流れないと思う(普段 IO ピンに 5V をいきなり挿しても壊れない理由はこれかと。)
ただ、計測は、おかしくなるから、最低でも 5V/40mA = 125Ω より大きい抵抗が必要だ。
手持ちなら 300Ωか 75x2=150Ωか、ま、300Ωだな
R 1MΩから付け替えたくない。
M3 ネジを使っているタイプならサトーパーツの TJ-3B-3 を付けれらるかもしれない。
https://www.satoparts.co.jp/products/search/T_TJ/TJ-3B
https://rtmrw.parallel.jp/laboratory6/lab-report-157/lab-157.html
によると 16MHz/128 のクロックで動作し、analogRead() に 13クロックかかるから、1回のサイクルが 1e-4 sec となる。
分周比を 2まで下げられるので 1.63e-6 sec までサイクルを下げられる。そうすると 時定数 0.01 ~ 0.001sec でも静電容量の測定精度がまずまずいなりそう。分周比 1まで下げれられないかと思って、データシートも確認したが 2 だった。
こちらの例だと、分周比設定の ADCSRA を設定したら、普通に analogRead() している。ということは、analogRead() 自身はこのレジスタの操作をしてないということになるので、ソースで確認する。
hardware/arduino/avr/cores/arduino/wiring_analog.c で ADCSRA が使われてるのはここだけで、これはレジスタの有無を調べてるだけで、内容の設定はしていない。なので、どっかで分周比を設定すれば、それが書き換えられることはないということになる。
#if defined(ADCSRA) && defined(ADCL)
// start the conversion
sbi(ADCSRA, ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
// we have to read ADCL first; doing so locks both ADCL
// and ADCH until ADCH is read. reading ADCL second would
// cause the results of each conversion to be discarded,
// as ADCL and ADCH would be locked when it completed.
low = ADCL;
high = ADCH;
#else
// we dont have an ADC, return 0
low = 0;
high = 0;
#endif
回路図にリセット用スイッチを付けたことを忘れているし、図面に抵抗載せ忘れている。
これのブートローダーを Arduino as ISP で書き込んだ後、IDE のアップロードボタンで、書き込めた
https://github.com/MCUdude/MiniCore
avrdude のプログラマが Arduino から urclock に代わってた。ブートローダーも Arduino の omniboot だかのやり方に不満な方が書いたものらしい。
余ってるし、場所は十分あるし
こういうので、自分で作れそう。浪漫枠で。
https://akizukidenshi.com/catalog/g/gI-05673/
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.