« 重力波望遠鏡KAGRAがえらいことになってた | トップページ | 「加湿器」修理 »

2024年2月19日 (月)

Arduino UNO R4のDACサンプルに出てくるmap関数

Arduino UNO R4 Minima Digital-to-Analog Converter (DAC)

この中のサンプルプログラムに
  freq = map(analogRead(A5), 0, 1024, 0, 10000);
というma関数を使った変換式が出てきます。

トラ技の著者でもあるjh4vajさんが、ブログで
1024じゃなくて1023だと思うが」と書かれています。
これにちょっと反論を。
  ※jh4vajさんのブログにうまくコメントできないので
   ここに記しておきます。
Arduino UNO R4 MinimaのDAC ~ analogWaveクラス編

mapの1023・1024問題、これは
  10bit→8bitの変換にmap(a, 0, 1023, 0, 255)
とするからおかしいのであって、(本来は1/4するだけ)
  map(a, 0, 1024, 0, 10000)
「そういう変換」だからこれでかまいません。

1024の時に10000になるよ」あるいは
なったよ」を表現しているわけです。
10bitのADCだとフルスケールが1023で
規制されるのでおかしな感じになりますが、
  半値の512だと5000だし、
  2倍の2048なら20000になり、
ADCの分解能を上げ下げしても線形補間の傾きは同じです。
  ※a=1023だと9990.234に

ですので、当然
  map(a, 0, 1023, 0, 10000)
も、okなわけです。
1023の時は10000でっせ」の変換式です。

10bit→8bit変換での1023・1024問題とは関係なくて、
これは正しい使い方です。

※関連
トランジスタ技術2024年3月号に記事が載りました
Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数
   map(x, 0,1023, 0,255)  ・・・これが正しい例を紹介




|

« 重力波望遠鏡KAGRAがえらいことになってた | トップページ | 「加湿器」修理 »

1023 vs 1024」カテゴリの記事

コメント

整理すると、jh4vjaさんのおっしゃる
freq = map(analogRead(A5), 0, 1023, 0, 10000);
でもOKで、ケースバイケースということですよね。

例えば、可変抵抗を廻して値を設定する場合。
freq = map(analogRead(A5), 0, 1024, 0, 10000);
とやると、ツマミをいっぱい廻してもfreqの値がフルスケールの10000にならないので、プログラムのバグと言われちゃいます。
一方でバイナリーの値として均一に変換したい場合は、こっち(1024)を使わないといけない。

投稿: ラジオペンチ | 2024年2月21日 (水) 08時37分

map(a, 0, 1023, 0, 255)がダメなのは、
「10bit→8bitの変換」に使ったから。

他の用例は、「そういう変換」だからOK。
分解能「2^n」やフルスケール「2^n - 1」じゃなくても、値はなんでもエエんです。
基点もゼロじゃなくてもok。

入りの値と出の値が2点あり、その直線上の値を求める。
線形補間って、そういうものです。

1024,,10000)の場合、中央512で5000が出ます。
1023,,10000)だと512で5004。
四捨五入は別にして、1024,,10000)で変換値を出し、入力フルスケール1023をチェックしてその時だけを10000とするほうが良いかなっと思ったりします。
入力値に対して約10倍のスケールアップ、入力がアナログ値なんでなかなか微妙かと。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2024年2月21日 (水) 10時01分

1023/1024問題について昨夜Xでこんなやり取りをしました。
https://x.com/yas0107/status/1760272406361600463?s=20
https://x.com/radiopench1/status/1760288142043803811?s=20
返信を全部読むと判りますが、ChatGPTの回答がブレていて面白いです。

投稿: ラジオペンチ | 2024年2月22日 (木) 07時17分

はははは。 おもしろい!!

投稿: 居酒屋ガレージ店主(JH3DBO) | 2024年2月22日 (木) 08時57分

コメントを書く



(ウェブ上には掲載しません)




« 重力波望遠鏡KAGRAがえらいことになってた | トップページ | 「加湿器」修理 »