使用查表法计算NTC热敏电阻的温度

代码:

hardware.c

/*
  《AVR专题精选》随书例程
  
  2.编程技巧

  项目:查表法使用NTC测量温度
  文件:hardware.c
  说明:硬件驱动文件
  
  作者:邵子扬
  时间:2012年12月12日

*/
#include "hardware.h"

// IO初始化
void IO_init()
{
}

// 串口初始化
void UART_init()
{
  unsigned int UBRRREG;

  UBRRREG = F_CPU / ( 8 * BAUDRATE ) - 1;
  UBRRH = UBRRREG / 256;
  UBRRL = UBRRREG % 256;
  UCSRA = ( 1 << U2X );
  UCSRB = ( 1 << TXEN );
  UCSRC = (1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
}

// 输出字符串
void UART_puts( char *s )
{
  while( *s )
  {
    UART_write( *s );
    s++;
    while( !( UCSRA & (1 << TXC )) );
    UCSRA |= ( 1 << TXC );
  }
}


void MCU_init()
{

}

// ADC模块初始化
void ADC_init()
{
  // AVCC做基准源,时钟8分频
  ADMUX = 0;
  ADCSRA = (1 << ADEN)|(1 << ADPS1)|(1 << ADPS0);
}

// ADC转换
// chn:  ADC通道号
// 返回:ADC的10位转换结果
unsigned int getADC(unsigned char chn)
{
  ADMUX = (chn % 16);
  ADCSRA = (1 << ADEN)|(1 << ADPS1)|(1 << ADPS0)|(1 << ADSC);
  while(ADCSRA & (1 << ADSC));

  return ADC;
}

ntc_table.c

/*
  《AVR专题精选》随书例程
  
  2.编程技巧

  项目:查表法使用NTC测量温度
  文件:ntc_tab.c
  说明:NTC查表法函数

  系统参数:
    RT0 = 10000
    B   = 3380

    温度范围: -50 - 70
    步长:     5
    ADC 位数: 10
  
  作者:邵子扬
  EMAIL:shaoziyang@@126.com
  时间:2012年12月12日

*/
#include <avr/pgmspace.h>
#include "ntc_tab.h"

#define NTC_Step    50
#define NTC_Start   -500
#define NTC_TabCnt  25

// Table for NTC: [ -50 - 70 ]
PROGMEM unsigned int NTCTABLE[NTC_TabCnt] = {
  1002,  993,  982,  968,  951,   // -50  -  -30
   929,  904,  873,  838,  799,   // -25  -  -5
   756,  710,  661,  611,  561,   //   0  -  20
   512,  464,  419,  376,  337,   //  25  -  45
   301,  268,  239,  212,  189    //  50  -  70
};

/*
  val:    ADC value
  return: Temperature * 10
          eg, -224 = -22.4 C
               300 =  30.0 C
*/
signed int getTemperature(unsigned int val)
{
  unsigned char i;

  for( i = 0; i < NTC_TabCnt; i++ )
  {
    if(pgm_read_word(NTCTABLE + i) <= val)
      break;
  }

  if(i == 0)
    return NTC_Start;
  if(i == NTC_TabCnt)
    return (NTC_Start + (NTC_TabCnt - 1) * NTC_Step);

  return ( NTC_Start + (i - 1) * NTC_Step + \
           NTC_Step * (pgm_read_word(&NTCTABLE[i - 1]) - val) / \
           (pgm_read_word(&NTCTABLE [i - 1]) - pgm_read_word(&NTCTABLE[i])));
}

main.c

/*
  《AVR专题精选》随书例程
  
  2.编程技巧

  项目:查表法使用NTC测量温度
  文件:main.c
  说明:主程序
  
  作者:邵子扬
  时间:2012年12月12日

*/
#include "hardware.h"
#include "ntc_tab.h"

#include <util/delay.h>

// 系统初始化
void SYS_init()
{
  MCU_init();
  IO_init();
  UART_init();
}

signed int TMP;
char s[10];

int main()
{
  SYS_init();          // 初始化
 
  while(1)
  {
    // 读取ADC,并通过查表函数转换为实际温度值
    TMP = getTemperature(getADC(chnTMP));
    
    if (TMP >= 0)      // 判断符号位
      s[0] = ' ';
    else
    {
      s[0] = '-';
      TMP = -TMP;
    }
    s[1] = TMP / 100 + '0'; // 将结果转换为字符串
    TMP  = TMP % 100;       // 为了节省资源,没有使用标准库函数
    s[2] = TMP / 10 + '0';
    s[3] = '.';
    s[4] = TMP % 10 + '0';
    s[5] = 0;

    UART_puts(s);       // 输出结果
    UART_puts("\r\n");  // 输出回车
    _delay_ms(500);     // 延时500ms
  }

  return 0;
}

仿真效果图;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/723347.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享一下,如何搭建个人网站的步骤

在这段充满探索与创造的奇妙旅途中&#xff0c;我就像一位耐心的建筑师&#xff0c;在数字世界的荒原上精心雕琢&#xff0c;两周的时光缓缓流淌。每天&#xff0c;我与代码共舞&#xff0c;手执HTML、CSS与JavaScript这三大构建魔杖&#xff0c;一砖一瓦地筑起了梦想中的网络城…

Rcmp: Reconstructing RDMA-Based Memory Disaggregation via CXL——论文阅读

TACO 2024 Paper CXL论文阅读笔记整理 背景 RDMA&#xff1a;RDMA是一系列协议&#xff0c;允许一台机器通过网络直接访问远程机器中的数据。RDMA协议通常固定在RDMA NIC&#xff08;RNIC&#xff09;上&#xff0c;具有高带宽&#xff08;>10 GB/s&#xff09;和微秒级延…

星戈瑞FITC-Cytochrome C:荧光标记细胞色素C的研究与应用

细胞色素C&#xff08;Cytochrome C&#xff09;是一种位于线粒体内膜上的蛋白质。为了深入地研究细胞色素C在细胞生物学和病理学中的功能&#xff0c;科学家们常常采用荧光标记技术对其进行追踪和观察。其中&#xff0c;异硫氰酸荧光素&#xff08;FITC&#xff09;作为一种常…

《Deep learning practice》learning notes

学习笔记&#xff1a; 【公开课】旷视x北大《深度学习实践》&#xff08;28课时全&#xff09; R Talk | 旷视科技目标检测概述&#xff1a;Beyond RetinaNet and Mask R-CNN 文章目录 Lecture 1: Introduction to Computer Vision and Deep Learning&#xff08;孙剑&#x…

生信网络学院|06月21日《SolidWorks Costing助力制造企业建立成本核算体系》

课程主题&#xff1a;SolidWorks Costing助力制造企业建立成本核算体系 课程时间&#xff1a;2024年06月21日 14:00-14:30 主讲人&#xff1a;张丹清 生信科技 售前顾问 Costing成本分析简介钣金件成本分析加工件成本分析装配体成本分析总结&答疑 安装腾讯会议客户端或…

期货以旁观者心态关注市场,会更加理性

1.期货交易具备较高灵活度&#xff0c;相比于股票&#xff0c;期货盈利速度明显提升。针对普通投资者&#xff0c;适量参与中线投机更为合适。 2.选择期货品种需兼顾市场属性稳定与计划特点较弱两方面&#xff0c;以及波动剧烈、投机特征显著的品种。 3.若市场环境不利且缺乏机…

2024.1版 IDEA share project on github 报错

2024.1版 IDEA share project on github 报错 报错信息报错原因解决办法 报错信息 Cannot load information for github.com/Worldfickler:Request response: Access tothis site has been restricted. lf you believe this is an error, please contacthttps://support.githu…

利用Python爬取天气数据并实现数据可视化,一个完整的Python项目案例讲解

要使用Python爬取天气数据并进行制图分析分几个步骤进行&#xff1a; 选择数据源&#xff1a;首先&#xff0c;你需要找到一个提供天气数据的API或网站。一些常见的选择包括&#xff1a;OpenWeatherMap、Weatherbit、Weather Underground等。 安装必要的库&#xff1a;你需要安…

idea右侧找不到Maven,在View-> Tool Windows下也找不到

正常情况Idea右侧没有Maven&#xff0c;只需去View -> Tool Windows 目录中找到Maven并点击Maven&#xff0c;Idea右侧就会出现 问题&#xff1a; idea右侧找不到Maven&#xff0c;在View -> Tool Windows 目录中也找不到Maven&#xff0c;下图 全局搜索ctrl N&#xff…

Spring中网络请求客户端WebClient的使用详解

Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前&#xff0c;如果我们想要调用其他系统提供的 HTTP 服务&#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问&#xff0c;不过由于 …

RPA案例学习

京东采集数据 一、搜索商品 流程块 相对应源代码 二、抓取数据 流程块 相对应源代码

pycharm中import moveit_commander报错

在pythcharm中导入moveit_commander&#xff0c;会报一些找不到.so文件的error&#xff0c;比如&#xff1a;librosconsole.so libeigenpy.so ImportError: libmoveit_py_bindings_tools.so.1.1.14: cannot open shared objec 等等的报错 在 /etc/ld.so.conf.d 中 这两个文…

经典病毒上线流量分析-Lokibot

一、概述 Lokibot于2015年面世&#xff0c;持续活跃至今&#xff0c;是一种高度危险且隐匿的恶意软件&#xff0c;旨在窃取受害主机的敏感信息&#xff0c;包括存储的密码、浏览器登录凭据以及加密货币钱包等&#xff0c;并将这些信息上送到远程C2服务器上。本文将重点针对Lok…

RadioML 2016.10a 调制方式识别

RadioML 2016.10a 调制方式识别 MLP、CNN、ResNet X [] lbl [] for mod in mods:for snr in snrs:X.append(Xd[(mod,snr)])for i in range(Xd[(mod,snr)].shape[0]):lbl.append((mod,snr)) X np.vstack(X) file.close()上述论文的分类任务是识别和区分不同类型的无线电调制…

收藏这几个电子书搜索引擎网站,找书不再难!

书籍是我们快速学习获取知识的重要途径&#xff0c;其中&#xff0c;通过电子书学习是一种低成本的学习方式。然而&#xff0c;面对海量的电子书资源&#xff0c;如何快速找到自己想要的书籍呢&#xff1f;下面小编就来为大家介绍几个强大的电子书搜索引擎网站&#xff0c;帮助…

数字时代的创新:二人共益订单模式解析

一、引言 随着数字技术的飞速发展&#xff0c;商业模式也日新月异。其中&#xff0c;“二人共益订单模式”凭借其独特的互助与共赢理念&#xff0c;迅速在市场中获得关注。该模式不仅为用户提供了优质服务和独享优惠&#xff0c;更通过用户间的互助和订单共享&#xff0c;实现…

AbMole带你探索颅内压力与肌肉生长的联系:一项突破性研究

在生物医学领域&#xff0c;颅内压力&#xff08;ICP&#xff09;的调控机制一直是研究的热点。最近&#xff0c;一项发表在《PLOS ONE》上的研究为我们揭示了颅内压力与后颅窝肌肉生长之间的潜在联系&#xff0c;为我们理解某些慢性头痛的成因提供了新的视角。 颅内压力的异常…

期望25K,我的React知识体系

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 我最终还是上岸了&#xff0c;花了3天总结了近万字的react知识体系思维导图&#xff0c;分享出来希望能帮助有缘人吧&#xff0c;以下只是部分截图&…

goldfish loss:减少训练数据泄漏,提高大语言模型输出的多样性

LLMs&#xff08;大型语言模型&#xff09;能够记忆并重复它们的训练数据&#xff0c;这可能会带来隐私和版权风险。为了减轻记忆现象&#xff0c;论文作者引入了一种名为"goldfish loss"的微妙修改&#xff0c;在训练过程中&#xff0c;随机抽样的一部分标记被排除在…

美国ARC与延锋安全合作,推动汽车安全气囊技术新突破

在汽车安全领域&#xff0c;安全气囊作为关键被动安全配置&#xff0c;对于保障乘客生命安全至关重要。随着汽车工业的快速发展和科技创新的持续推进&#xff0c;安全气囊技术的升级与革新显得尤为重要。2022年10月25日&#xff0c;美国ARC公司与延锋安全携手合作&#xff0c;共…