1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3.3V表面実装MCP9700の計算方法を考える(3倍して15.625掛けて16で割り1/10足し-500)(整数)

Last updated at Posted at 2024-09-10

x 過去ログを見よ!!
x UNOを一時的に3.3Vで動かす(危険)(危険)(危険)PCに繋ぐとPCが破壊されます。(いろいろした)
x 変換がおかしいのは、IMEをそのまま使って、めんどいので変換失敗してもそのまま
x 販売コード 130012
x 型番 MCP9700T-E/TT

いろいろ

表面実装のMCP9700をget
15.625は、マジックナンバーで2.5x2.5x2.5
この企画自体が君と15.625したかっただけ。
らーめにんぐのついでに秋月でget
さらに中野あたりの絶滅メディア博物館(高円寺)

おまけ(なんかの新作らしい)3.3V系だから問題なし(((べつにUNOにこだわつていないし)))とじ

どこ?

o_coq386.jpg

ch32v203 144mhzらしい 最終的な値段は、ほとんど変わらないらしい(上級者向け) ライブラリが貧弱だからかなりきっい

o_coq387.jpg


o_coq381.jpg

o_coq383.jpg

o_coq385.jpg

●データシートで各自、確認(たぶん3.3V)

o_coq384.jpg

参考(10の割り算)

参考(MCP9700)

目的
MCP9700を整数で計算して温度を求める
ステップは、10mV事に1度
センターの0度は、500mV
とりあえず、まず、ADCの値を電圧に変換
500引けば温度。OK!!

o_coq382.jpg

o_coq388.jpg

o_coq389.jpg



  int s; //センサーの値
  unsigned int vo; //電圧

  s = 1024; //センサーの値を1024

  //センサーの値から電圧に変換(x3 x15.625/16 1/10)
  vo = s;
  vo = vo + vo + vo;
  vo = ((vo * 15U) + (vo >> 1) + (vo >> 3)) >> 4;
  vo = vo + (vo / 10);


まとめると

オンラインコンパイラ



#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    
  int s; //センサーの値
  unsigned int vo; //電圧
  int tmp;
  //long
  //long

  //s = 1024; //センサーの値を1024

for(int i = 0;i<(1024+1);i++){
  s=i;
    

  //センサーの値から電圧に変換(x3 x15.625/16 1/10)
  vo = s;
  vo = vo + vo + vo;
  vo = ((vo * 15U) + (vo >> 1) + (vo >> 3)) >> 4;
  //vo = vo + (vo / 10);
  vo = vo +  (( ((long)vo) * 52429L ) >> 19); // vo/10

  tmp = vo - 500;
  
  printf("(%4d)[%4d]<%d>",s,vo,tmp/10);
  printf("\n");
    
}//for    
    
}



...省略
(1020)[3286]<278>
(1021)[3290]<279>
(1022)[3293]<279>
(1023)[3296]<279>
(1024)[3300]<280>

で、

UNO((危険)一時的に3.3V(ごにょごにょ))

目的
表面実装のMCP9700で遊ぶ

結果

o_coq390.jpg

o_coq391.jpg

プログラム



//MCP9700_SMD_3V3_UNO1


//初期化
void setup() {
  //シリアルポートの初期化
  Serial.begin(9600);
}//setup


//メインループ
void loop() {

  int          sensorValue; //センサーの読み取り値
  unsigned int Voltage;     //電圧
  int          Temperature; //温度

  //温度センサーから値を読み込む
  sensorValue = analogRead(A0); //UNO

  //センサーの値から電圧に変換(x15.625/16 1/10)
  //sensorValue = 1024; //debug 約3.3V      3300 280.0℃
  //sensorValue =  242; //debug 約0.8V       778  27.8℃
  //sensorValue =    0; //debug 約0.0V         0 -50.0℃
  Voltage = sensorValue;
  Voltage = Voltage + Voltage + Voltage;
  Voltage = ((Voltage * 15U) + (Voltage >> 1) + (Voltage >> 3)) >> 4;
  //Voltage = Voltage + (Voltage / 10);
  Voltage = Voltage +  (( ((long)Voltage) * 52429L ) >> 19);//Voltage/10

  //電圧を温度に変換 0℃に合わす為に500mVを引く
  Temperature = Voltage - 500;

  //結果の表示
  // print out the value you Temperature:
  //Serial.println(Voltage); //debug
  Serial.print(Temperature / 10);
  Serial.print('.');
  Serial.print(Temperature % 10);
  Serial.println();
  delay(1000);        // delay in between reads for stability

}//loop


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?