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ビットを識別できた。
ちゃんとやるなら金属皮膜抵抗をつかったほうがよさそう。
2024-09-28 23:28
nice!(0)
コメント(0)
コメント 0