ユーザ用ツール

サイト用ツール


softdev:tempmeter2

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
softdev:tempmeter2 [2013/01/08 23:10] – [ソース] kingsoftdev:tempmeter2 [2013/07/15 20:25] (現在) – 外部編集 127.0.0.1
行 135: 行 135:
 </code> </code>
  
 +LCD関係
 <code c> <code c>
 +void shiftreg_lat()
 +{
 + SOLAT = 1; /* latch is rise edge */
 + DelayUs(1);
 + SOLAT = 0;
 +}
 +
 +
 +void send_data(char data)
 +{
 + signed char c;
 + /* send MSB first */
 + for(c=7;c>=0;c--){
 + SODAT = data>>c;
 + DelayUs(1);
 + SOCLK = 1;
 + DelayUs(1);
 + SOCLK = 0;
 + }
 +}
 +
 +void send_to_lcd(char data,char rs)
 +{
 + char ctrl_data;
 + /*  data  MSB 7 6 5 4    3    2 1  0  7 6 5 4 3 2 1 0 LSB*/
 + /*            0 0 0 BkON BkHi 0 RS E  Data----      -    */
 +
 + ctrl_data = 0x01 | BKL_AKARUI | rs ; /* E=1,backlight,RS */
 + send_data( ctrl_data );
 + send_data( data ); 
 + shiftreg_lat();
 +
 + ctrl_data = ctrl_data & 0b11111110 ; /* E=0 */
 + send_data( ctrl_data ); 
 + send_data( data );
 + shiftreg_lat();
 +}
 +
 +void lcd_locate(char location)
 +{
 + /* location 00h=Row1/Col1 40h=Row2/Col1 */
 + location |= 0x80; /* rise bit7=1 */
 + send_to_lcd( location , RS0); /*set DDRAM addr to 40h */
 +}
 +
 +/* write a string of chars to the LCD */
 +void lcd_puts(const char * s)
 +{
 + while(*s)
 + send_to_lcd( *s++ , RS1 );
 +}
 </code> </code>
 +
 +ADCのところ
 <code c> <code c>
-</code> + while(1){ 
-<code c> + ADCON0 = ADON_AN1; 
-</code>+ GO_DONE=1; 
 + while(GO_DONE); 
 + an1data = (ADRESH<<8) | ADRESL ; // Temperatrure 
 +  
 + DelayMs(10);
  
 + ADCON0 = ADON_AN2;
 + GO_DONE=1;
 + while(GO_DONE);
 + an2data = (ADRESH<<8) | ADRESL ; // Voltage
 + an2data = an2data * 5 * 10 / 256;
 +
 + tmp10_long = (long)an1data * 500 - 245760;
 + tmp10_long =  tmp10_long / 410;
 + tmp10 = (int)tmp10_long;
 +
 +</code>
 +メモリが足りてるので、温度はlongで計算。
  
  
  
softdev/tempmeter2.1357654221.txt.gz · 最終更新: 2013/07/15 20:28 (外部編集)