Digispark の P5 を ADC で入力ピンとして使う 前編 [Arduino]
Digispark の互換機は P5 がリセットピンになっています。
(どうやら本家はFUSE設定ではじめから入出力ピンとして使えるらしい?)
FUSEの変更(hfuse:5F→DF or 5D→DD) という方法が王道とは思いますが、リセットピンのままでもADC入力としては使えるという情報をどこかで見かけたので試してみました。
ただ電圧下げすぎるとリセットがかかってしまいます。
(Vcc 5VのとHIGH⇒LOW(VIL)は2.25Vくらい)
Digisparkで複数のタクトスイッチを扱う:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2022-05-29
抵抗分圧でやるのもいいですが、、同時押しには対応できないし。
ロータリーコードスイッチ 10ポジション 0~9 正論理 S-2110A_ 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/g110399/
こういうのでやろうと思って。
DIPスイッチみたいに設定用のスイッチに使うのががよさそう。
こういう用途ならチャタリングとか考えなくていいし。
ラダー抵抗でのD/A変換のような感じでいけるかと思いきや、スイッチはHIGH/LOWではなく、ON/OFFなのでできなさそう。
ということで、手探りで回路を作ってみた。
http://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxBTxCQBZtqBTAWjDACgAnEJmqsQyCF7gBUZHDYBncGBThK4DIXlVBggGYBDADaSGbAG6LlKBMp5VTytUMFIbMBJyF8FrObNVCME6e5GCYEoBYho6elIycigoNMYUsaEgWrr6frLgxB7BYFlJKRFcwvyBGSViYPCQzsV5-rlygjHwzv4xccLtYjQ+EgDu8Z6DotUDtXKdidUADi4gxMpBygsg9GpsY65Uwiuj8Vb7UxtzQ8Ujx0sJcZcNUBc5dTnBezdPi+ebIeN3AzduwbtjhYQsCDuwgA
漸減かつ2%の直線とわりと近似している。
1~2%の電位差を読み取る必要があるのだけれど、5%誤差のカーボン抵抗でつくった試作回路&スケッチでちゃんと4ビットを識別できた。
ちゃんとやるなら金属皮膜抵抗をつかったほうがよさそう。
(どうやら本家はFUSE設定ではじめから入出力ピンとして使えるらしい?)
FUSEの変更(hfuse:5F→DF or 5D→DD) という方法が王道とは思いますが、リセットピンのままでもADC入力としては使えるという情報をどこかで見かけたので試してみました。
ただ電圧下げすぎるとリセットがかかってしまいます。
(Vcc 5VのとHIGH⇒LOW(VIL)は2.25Vくらい)
Digisparkで複数のタクトスイッチを扱う:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2022-05-29
抵抗分圧でやるのもいいですが、、同時押しには対応できないし。
ロータリーコードスイッチ 10ポジション 0~9 正論理 S-2110A_ 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/g110399/
こういうのでやろうと思って。
DIPスイッチみたいに設定用のスイッチに使うのががよさそう。
こういう用途ならチャタリングとか考えなくていいし。
ラダー抵抗でのD/A変換のような感じでいけるかと思いきや、スイッチはHIGH/LOWではなく、ON/OFFなのでできなさそう。
ということで、手探りで回路を作ってみた。
http://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxBTxCQBZtqBTAWjDACgAnEJmqsQyCF7gBUZHDYBncGBThK4DIXlVBggGYBDADaSGbAG6LlKBMp5VTytUMFIbMBJyF8FrObNVCME6e5GCYEoBYho6elIycigoNMYUsaEgWrr6frLgxB7BYFlJKRFcwvyBGSViYPCQzsV5-rlygjHwzv4xccLtYjQ+EgDu8Z6DotUDtXKdidUADi4gxMpBygsg9GpsY65Uwiuj8Vb7UxtzQ8Ujx0sJcZcNUBc5dTnBezdPi+ebIeN3AzduwbtjhYQsCDuwgA
漸減かつ2%の直線とわりと近似している。
// +5V ---[1k]---+-----+--[sw]--[47k]--+--- GND
// | +--[sw]--[22k]--+
// <P5> +--[sw]--[10k]--+
// +--[sw]--[4k7]--+
const uint8_t LEDsPn[4] = { 0, 1, 2, 4 }; // pin number
const uint16_t Vth[16] = { 1012, 990, 969, 945, 921, 903, 885, 860,
836, 821, 806, 789, 773, 760, 747, 0 };
void setup() {
for(uint8_t i=0; i<4; i++) pinMode( LEDsPn[i], OUTPUT );
}
void loop() {
uint8_t n, i;
uint16_t Va = analogRead( A0 ); // Digispark : P5, ADC0
for(n=0; Va<Vth[n]; n++); // Compare with each threshold and get the value
for(i=0; i<4; i++) digitalWrite( LEDsPn[i], (n>>i)&1 );
}
1~2%の電位差を読み取る必要があるのだけれど、5%誤差のカーボン抵抗でつくった試作回路&スケッチでちゃんと4ビットを識別できた。
ちゃんとやるなら金属皮膜抵抗をつかったほうがよさそう。
抵抗値の表記 EIA-96 [パーツ]
Digispark互換機のpull up抵抗が「102」ということで規定の1.5kΩではなく1kΩでした。
ねんのため規定の1.5kΩを注文してみたら「152」じゃなくて「188」?「881」?
ということで調べてみたら、「EIA-96 coding」というのがありました。
「188」や「881」ではなく、「18B」でした。
「18」→ 150、「B」→ x10 = 1500 Ω でした。
ということで、自分でも対応表をエクセルで作ってみた。
抵抗値のフォントがあったらよかったんだけどな。
ねんのため規定の1.5kΩを注文してみたら「152」じゃなくて「188」?「881」?
ということで調べてみたら、「EIA-96 coding」というのがありました。
「188」や「881」ではなく、「18B」でした。
「18」→ 150、「B」→ x10 = 1500 Ω でした。
ということで、自分でも対応表をエクセルで作ってみた。
抵抗値のフォントがあったらよかったんだけどな。
タグ:抵抗
USB Type-C の Digispark 互換機を作ってみた。その2 [Arduino]
ブートローダを変更します。
もともとは firmware version 1.6 が入っていました。
ブートローダもいろいろなものがあるようですが、ATTinyCoreでお世話になっているSpenceKondeさんのところのを使うことにしました。
GitHub - SpenceKonde-ATTinyCore- Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8
https://github.com/SpenceKonde/ATTinyCore
ここから、
📂avr
📂bootloaders
📂micronucleus
まで行きます。
Digispark(互換機)から外したATtiny85なので、すでにmicronucleusが入っているため、リストの下のほうにある upgrade-attinyXX_XXXX.hex を選びます。(attinyXX_XXXX.hexはISPで書き込む用っぽい)
よくわからないけど「upgrade-attiny85_porf.hex」にしてみた。
porfは、Power-on Reset Flag(電源ONリセットフラグ)のことかなって思って。
このブートローダにすることで、スライドスイッチでUSB切断時には電源投入とほぼ同時にスケッチが動き出すようになりました。
HIDデバイスなどUSB機能を使いつつも待ちたくない場合は、以下の記事どおりちょっと古い ver1.11を使うことになりそう。
アップデートの方法も同様。
Digispark 起動までの5秒待たないBootloader:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2022-05-14
パーツどり後の抜け殻
もともとは firmware version 1.6 が入っていました。
ブートローダもいろいろなものがあるようですが、ATTinyCoreでお世話になっているSpenceKondeさんのところのを使うことにしました。
GitHub - SpenceKonde-ATTinyCore- Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8
https://github.com/SpenceKonde/ATTinyCore
ここから、
📂avr
📂bootloaders
📂micronucleus
まで行きます。
Digispark(互換機)から外したATtiny85なので、すでにmicronucleusが入っているため、リストの下のほうにある upgrade-attinyXX_XXXX.hex を選びます。(attinyXX_XXXX.hexはISPで書き込む用っぽい)
よくわからないけど「upgrade-attiny85_porf.hex」にしてみた。
porfは、Power-on Reset Flag(電源ONリセットフラグ)のことかなって思って。
このブートローダにすることで、スライドスイッチでUSB切断時には電源投入とほぼ同時にスケッチが動き出すようになりました。
HIDデバイスなどUSB機能を使いつつも待ちたくない場合は、以下の記事どおりちょっと古い ver1.11を使うことになりそう。
アップデートの方法も同様。
Digispark 起動までの5秒待たないBootloader:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2022-05-14
パーツどり後の抜け殻
USB Type-C の Digispark 互換機を作ってみた。 [Arduino]
久しぶりにDigisparkネタ。
使い慣れたAVRで同じ8ピンのATtiny202や412と比べて、容量も大きく、USBにダイレクトでつながるのは魅力的。
ただ本家は販売しておらず、互換機しか売っていない状態。
Type-A直挿しタイプは差し込み口が9mmくらいしかなく(本来規格上は11.75mm)、うちのパソコンだと届かなくて認識されないのも問題。
micro USBのタイプは、いまどきじゃないので避けたい。
共通して言えるのはブレッドボードで使いづらい。
ということで Type-C の Digispark互換機を自作してみた。
方向性:
・もちろん接続はUSB Type-C
・電源はType-Cからの供給として外部入力なし
・ブレッドボードに載るレイアウト
・P3(PB3,USB D-), P4(PB4, USB D+)もできればI/Oピンに使いたい
・電源LED なし、BUILTIN LED も用途が限られるのでなし
ちょっと工夫したのは、 スライドスイッチでUSB機能を使うか外部ピンを使うか選択すること。
USBの信号を物理的に切り離すスイッチを付けてみた。
ただ、pull up抵抗をUSB側に残すとUSB機器として認識されてしまうようなので、D-のpull up抵抗はATtiny85側に持ってくることにしました。68Ωの抵抗はダンピング抵抗というもののようなので、pull up抵抗よりUSB側に持ってきても大丈夫かなと思って移動してみました。(いいのかどうかはわからない)
ということで、P3(PB3,USB D-)のpull upだけは妥協することにしました。
スライドスイッチは、DPDT(Double Poles Double Throws, 双極双投, 2回路2接点)です。
表面実装用スライドスイッチ SSSS213202_ 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/g105043/
これをDPDTと思い込んでフットプリントも作成して基板をオーダーしていざ作ってみたら案の定動かない。これは、SPDT(単極双投, 1回路2接点)だから。
スライドスイッチ IS-2245S-G_ 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/g115369/
ちょっとフットプリントが違うけど、なんとか載せられた。
機構部品は面積大きいので、やむなく両面実装に。
パーツは、基板の他に、Type-Cレセプタクル、CC(Configuration Channel)の5.1kΩ抵抗、スライドスイッチと、それ以外はDigispark(互換機)から外して使用。
0, 1, 2, 4ピンを使って、CharlieplexingでLED 12個操作。
使い慣れたAVRで同じ8ピンのATtiny202や412と比べて、容量も大きく、USBにダイレクトでつながるのは魅力的。
ただ本家は販売しておらず、互換機しか売っていない状態。
Type-A直挿しタイプは差し込み口が9mmくらいしかなく(本来規格上は11.75mm)、うちのパソコンだと届かなくて認識されないのも問題。
micro USBのタイプは、いまどきじゃないので避けたい。
共通して言えるのはブレッドボードで使いづらい。
ということで Type-C の Digispark互換機を自作してみた。
方向性:
・もちろん接続はUSB Type-C
・電源はType-Cからの供給として外部入力なし
・ブレッドボードに載るレイアウト
・P3(PB3,USB D-), P4(PB4, USB D+)もできればI/Oピンに使いたい
・電源LED なし、BUILTIN LED も用途が限られるのでなし
ちょっと工夫したのは、 スライドスイッチでUSB機能を使うか外部ピンを使うか選択すること。
USBの信号を物理的に切り離すスイッチを付けてみた。
ただ、pull up抵抗をUSB側に残すとUSB機器として認識されてしまうようなので、D-のpull up抵抗はATtiny85側に持ってくることにしました。68Ωの抵抗はダンピング抵抗というもののようなので、pull up抵抗よりUSB側に持ってきても大丈夫かなと思って移動してみました。(いいのかどうかはわからない)
ということで、P3(PB3,USB D-)のpull upだけは妥協することにしました。
スライドスイッチは、DPDT(Double Poles Double Throws, 双極双投, 2回路2接点)です。
表面実装用スライドスイッチ SSSS213202_ 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/g105043/
これをDPDTと思い込んでフットプリントも作成して基板をオーダーしていざ作ってみたら案の定動かない。これは、SPDT(単極双投, 1回路2接点)だから。
スライドスイッチ IS-2245S-G_ 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/g115369/
ちょっとフットプリントが違うけど、なんとか載せられた。
機構部品は面積大きいので、やむなく両面実装に。
パーツは、基板の他に、Type-Cレセプタクル、CC(Configuration Channel)の5.1kΩ抵抗、スライドスイッチと、それ以外はDigispark(互換機)から外して使用。
0, 1, 2, 4ピンを使って、CharlieplexingでLED 12個操作。