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


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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/786a45f2-1ed7-6374-9629-652d07bea64e.jpeg)


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

![o_coq387.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b1714148-cc88-6d0a-8ee5-f7b889869f63.jpeg)


-----------------------------------------------


![o_coq381.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b02b9fd2-04b4-5d9f-82b4-bff8ebfe3a4e.jpeg)

![o_coq383.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/edaf2db6-ad18-d4ee-9609-583a6f041d53.jpeg)

![o_coq385.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/bbb37d37-c50c-9aec-465f-e2ccd9e9d48b.jpeg)



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

![o_coq384.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/0ec2b1d1-f8e8-e3de-a0bb-0ea173089e48.jpeg)


参考(10の割り算)


https://qiita.com/suzuki-navi/items/aba3e46db8a0419abac2


https://www.nminoru.jp/~nminoru/diary/2006/01.html


参考(MCP9700)


https://qiita.com/caa45040/items/1e3f8970fca75550b0f1


https://qiita.com/katakaku/items/a60bf37158426f316b7c


https://qiita.com/infinite1oop/items/ca2e5dc08d1d916f1a6c


https://qiita.com/caa45040/items/285b8732cd76f9c81f34


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

![o_coq382.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/19606a4e-cff5-e15d-671a-ee904bd1fc2a.jpeg)

![o_coq388.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/3b0ff4a3-edaf-3b11-29fc-bf7d4ef0a63f.jpeg)

![o_coq389.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ba675d35-1032-5ad4-43c9-86aa54ebfe07.jpeg)


```c++


  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);


```


まとめると

オンラインコンパイラ

```c++


#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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f9681f5d-785f-ca01-acac-438e1b898c1e.jpeg)

![o_coq391.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/d1bacd9e-68ca-9817-efa0-eece65ed6c88.jpeg)


プログラム



```c++


//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


```