softdev:tempmeter3
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| softdev:tempmeter3 [2013/01/07 21:19] – [回路図] king | softdev:tempmeter3 [2013/07/15 20:25] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 7: | 行 7: | ||
| {{: | {{: | ||
| - | 8pinだとポートが少ないので、セグメントLED点灯のシフトレジスタにHC164を使いました。HC164はオーバーフロbitがないのでMSBが次のシストにつながってしまい送信データが変になってしまうようにおもうが、CLKとDataだけで良いので2本で良い。ただラッチやEN端子がないので、送信中も表示してしまう。速く送信すればわかんないのでは?ってことで。 | + | * 8pinだとポートが少ないので、セグメントLED点灯のシフトレジスタにHC164を使いました。HC164への接続はCLKとDataだけで良いので2本で良い。ただラッチやEN端子がないので、送信中も表示してしまう。速く送信すればわかんないのでは?ってことですが、わかりますね。 |
| + | * Pickit3のdata, | ||
| + | * LM61の出力は4倍に増幅して、Voltage followerでADC(AN2)に入れる。 | ||
| + | * LEDの消費が大きいから、P-MOSで切れるようにした。 | ||
| + | * 当初、電池で動かそうと思ってて、単3を6セルと3端子で5Vを作って動作させていたのだが、屋外だと厳しいですね。氷点下になると電池性能が著しく低下して、1週間持たなかった。なので、古いACダプタを流用してACで動作するようにしています。 | ||
| + | * ACアダプタの無効損失を含みますが、、LED常時動作で約0.6W。もったいないですね。SWで起動するようにSleepをいれても、待機時0.3W程度しか下がらないので、もったいないですね。 | ||
| + | |||
| + | ===== ソース ===== | ||
| + | 恥ずかしいので抜粋 | ||
| + | |||
| + | ポート初期化他 | ||
| + | <code c++> | ||
| + | #include < | ||
| + | #define _XTAL_FREQ 4000000 | ||
| + | #define SPDAT GP0 | ||
| + | #define SPCLK GP1 | ||
| + | #define LED1 GP5 | ||
| + | #define SW1 GP4 | ||
| + | #define LED_ON 0 | ||
| + | #define LED_OFF 1 | ||
| + | #define KURIKAESHI 20 | ||
| + | #define HEIKIN 10 | ||
| + | |||
| + | // | ||
| + | // | ||
| + | #define data0 0b00000011 | ||
| + | #define data1 0b10011111 | ||
| + | #define data2 0b00100101 | ||
| + | #define data3 0b00001101 | ||
| + | #define data4 0b10011001 | ||
| + | #define data5 0b01001001 | ||
| + | #define data6 0b01000001 | ||
| + | #define data7 0b00011011 | ||
| + | #define data8 0b00000001 | ||
| + | #define data9 0b00001001 | ||
| + | |||
| + | #define MINUS 0b11111110 // | ||
| + | #define PLUS 0b00000001 // | ||
| + | |||
| + | __CONFIG(CP_OFF & BOREN_ON | ||
| + | |||
| + | main() | ||
| + | { | ||
| + | /* Note: The ANSEL and CMCON0 registers must be initialized to configure an analog | ||
| + | * channel as a digital input. Pins configured as analog inputs will read ‘0’. | ||
| + | */ | ||
| + | GPIO = 0x00; /* IO initialize */ | ||
| + | CMCON0 = 0x07; /* Comparator function CM210=111(disable)*/ | ||
| + | ANSEL | ||
| + | OSCCON = 0x60; /* 4MHz */ | ||
| + | TRISIO = 0x1C; /* IO direction 543210=011100 0=Out,1=In */ | ||
| + | ADCON0 = 0x89; // 10001001 | ||
| + | IOC = 0x10; // IOC4 is enable | ||
| + | INTCON = 0x88; // GIE , GPIE | ||
| + | |||
| + | ADFM=1; | ||
| + | ADON = 1; | ||
| + | |||
| + | </ | ||
| + | |||
| + | ADC計算部(ごめん、long使ってる) | ||
| + | <code c> | ||
| + | char avg, | ||
| + | int andata, | ||
| + | long temp10; | ||
| + | |||
| + | andata = 0; | ||
| + | for(avg=0; | ||
| + | __delay_ms(5); | ||
| + | GO = 1; | ||
| + | while(GO); | ||
| + | andata += (ADRESH<< | ||
| + | } | ||
| + | andata = andata / HEIKIN ; | ||
| + | temp10 = (long)andata * 5000 - 2457600; | ||
| + | temp10 = temp10 / 4096; | ||
| + | temp = (int)temp10; | ||
| + | </ | ||
| + | |||
softdev/tempmeter3.1357561165.txt.gz · 最終更新: (外部編集)
