ATmaga8单片机Pt100温度计源程序+Proteus仿真设计

发布者:buzzedy最新更新时间:2020-07-12 来源: 51hei关键字:ATmaga8  单片机  Pt100 手机看文章 扫描二维码
随时随地手机看文章

设计Pt100铂电阻测量温度的电路,温度测量范围是0-100摄氏度,要求LCD显示。画出电路图,标注元器件参数,简单说明测量原理和调节方式。根据要求,本设计的测温模拟电路使用热电阻Pt100温度传感器利用其感温效应,热电阻随环境温度的变化而变化,在电路图中将电阻值的变化转换成电压的变化,再将电压值作为输入信号输入至AD转换器中进行模拟信号到数字信号的转换,其输出端接单片机,向单片机内依据公式写入源程序,将被测温度在显示器上显示出来:


测量温度范围0℃~100℃;

分辨率为0.1℃;

LCD数码直读显示。

本设计系统包括了温度测量单元,信号处理单元,A/D 转换模块,数据处理与控制模块,温度显示五个部分。

仿真原理图如下
  

单片机源程序如下:

#include

//#include

#include

#include

// Alphanumeric LCD Module functions

#asm

   .equ __lcd_port=0x18 ;PORTB

#endasm

#include


#include


#define ADC_VREF_TYPE 0xC0

#define MCPCS   PORTD.0

#define MCPSCK  PORTD.1

#define MCPDATA PIND.2

#define A 3.9083e-3

#define B -5.775e-7

#define C -4.183e-12

unsigned long read_spi(void);

float CalTem(float PT100R)

{

double fT,fR,fT0;

char i=0;

fR=PT100R;

fT0=(fR/100-1)/A;


return fT0;

};

unsigned long read_mcp(void)

{

long a[]={0,0,0,0,0};

long x=0;

char i=0;

char k=5;       // 数组大小 -1

for (i=0;i<5;i++)

{

a[i]=read_spi(); // 连续3次读出数据

delay_us(5);

}

//中值滤波

while (k>0)

{

for (i=0;(i<(k-1));i++) // 从低到高排序

{

  if (a[i]>a[i+1])

  {

  x=a[i+1];

  a[i+1]=a[i];

  a[i]=x;

  };

};

k--;

};

return a[2]; // 舍弃最大数据和最小数据。

}


unsigned long read_spi(void)

{              

volatile  char i=0;

volatile  long int result=0,x=0;

MCPCS=0;//    CS 先一个100us 低电平脉冲

delay_us(100);

MCPCS=1;

delay_ms(80); // 高电平等待80ms 等待转换完成

MCPCS=0;      // 置 CS 低电平 开始发生 sck 脉冲

for (i=0; i<24;i++) // 24 位数据

{

  MCPSCK=0;    // sck 脉冲下降沿

  delay_us(1); // 等5us 等待稳定

  //result=result<<1;

  x=MCPDATA;   // 读出一位

  while (MCPDATA!=x)  // 抖动处理 2次读出电平相同说明数据稳定

  {

   delay_us(1);

   x=MCPDATA;

  };

  result<<=1;   

  result|=x;//(x<<(23-i));

  delay_us(5);

  MCPSCK=1;   // 发送sck 上升沿

  delay_us(10);   

};

MCPCS=1; // cs=1

return result>>6;

}

// Read the AD conversion result

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}


// 校准温度计查表   没20度一个校准,

//                     -50  -30  -10  10  30   50    70  90   110   130 150   

const float CAL_Tem[]={4.7 ,4.65,4.65,4.6,4.6 ,4.55,4.55,4.50,4.45,4.45,4.45};

const int   ADCSTEP[]={  1 ,96  ,189 ,282, 374,466 ,557 ,648,738,827 ,916};


float CalcuTem(int ADC)  // 温度校准计算     没有使用

{

int i=0;

float r;

for (i=0; i<10;i++)

{

   if ((ADC=ADCSTEP[i])) break;

};

r=(ADC-ADCSTEP[i]);

r=r/CAL_Tem[i];

r=r-50;///CAL_Tem[i]-50+i*20+;

r=r+i*20.0;

return r;

}

volatile char stradc[15]="";

void main(void)

{

// Declare your local variables here

volatile  long int MCPADC=0;

volatile unsigned int adc=0;

volatile float  fadc=0;


// Input/Output Ports initialization

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;


// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;


// Port D initialization

// Func7=out Func6=out Func5=out Func4=out Func3=out Func2=int Func1=out Func0=out

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1

PORTD=0x07;

DDRD=0xFB;


// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00;


// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;


// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;


// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

MCUCR=0x00;


// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;


// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;


// ADC initialization

// ADC Clock frequency: 125.000 kHz

// ADC Voltage Reference: Int., cap. on AREF

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x86;


// LCD module initialization

lcd_init(16);


while (1)

      {     

      

   

      MCPADC=0;

      MCPADC=read_mcp();

//      memset(stradc,' ',15);              

//      lcd_gotoxy(0,0);

//      lcd_puts(stradc);

……………………


关键字:ATmaga8  单片机  Pt100 引用地址:ATmaga8单片机Pt100温度计源程序+Proteus仿真设计

上一篇:ATmega16读取RTC和ADC显示在LCD1602,同时串口输出
下一篇:avr单片机Proteus风速计模型仿真 bascom源程序

推荐阅读最新更新时间:2024-11-04 22:22

基于单片机μPD780822的客车CAN总线灯光节点的设计及实现
1 引言 CAN(Controller Area Network)是德国Bosch公司最先提出的,是目前汽车控制器局域网中最流行、最常用的总线。它的主要特点是:CAN总线为多主站总线,各节点均可在任意时刻主动向网络上的其他节点发送信息,不分主从,通信灵活;CAN总线采用独特的非破坏性总线仲裁技术,优先级高的节点先传送数据,能满足实时性要求;CAN总线具有点对点、一点对多点及全局广播传送数据的功能;CAN总线上每帧有效字节数最多为8个,并有CRC及其他校验措施,数据出错率极低,某个节点出现严重错误,可自动脱离总线,总线上的其他操作不受影响;CAN总线只有2条导线,系统扩充时可直接将新节点挂在总线上,因此走线少,系
[单片机]
基于<font color='red'>单片机</font>μPD780822的客车CAN总线灯光节点的设计及实现
【GD32 MCU 入门教程】二、GD32 MCU 烧录说明(3)脱机烧录
大部分主流的烧录器厂商均支持GD32 MCU的烧录,如ELNEC、致远电子、贷铺科技、希尔特、迈斯威志、轩微、天津威磊、Segger、芯园电子、北极星电子等烧录器厂商。烧录方式分别有SWD和ISP,具体以烧录器型号为准。 GD官方的GD-link烧录工具也支持离线烧录功能,装载好代码后通过按键即可进行脱机烧录,需注意GD-link脱机烧录只能装载768K大小的文件。以下主要介绍GD-link的脱机烧录方法。所需工具和软件:GD-link、官网获取最新版本GD-link Programmer上位机。 3.1 GD-link脱机烧录硬件连接 GD-link脱机烧录的硬件连接方式与在线下载相同,硬件接口和连接方式请参考2.5章节说明
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】二、GD32 <font color='red'>MCU</font> 烧录说明(3)脱机烧录
单片机控制的电池管理实现了成功的互联网
微控制器将在观光噪比(IoT)取向设计大多数因特网主控制元件和这些MCU将有可能被电池供电。电源效率将是实现可接受的电池寿命至关重要因此MCU将需要管理的电池使用更精确地比以往任何时候。许多MCU具有特殊的功能,帮助管理电池电量和使用这些功能优化可能使输赢在市场之间的差异。 本文将很快回顾一些实现高效电池的MCU产品设计,并说明所需的关键功能,例如使用的设备,这些功能如何提高工作效率和电池寿命。软件工具,帮助估计电池寿命将用于展示如何在您详细的设计实施估计寿命。这极大地有助于设备选择并且是一个关键的技术用于创建电源效率的设计。 管理电源域 电池的MCU实现时想我们最初可能,前提是有一个单一的MCU电源域,流失的电池,我们的目标是管
[单片机]
<font color='red'>单片机</font>控制的电池管理实现了成功的互联网
单片机电话单机测试仪的研制
    摘要: 介绍一种新型的单片机电话电机测试仪的工作原理、实现电路、程序设计和功能。给出了串行数据流在单片机内存中的存储格式及快速处理方法。     关键词: 单片机 串行数据 A/D 测试仪 随着我国电讯业的迅速发展,电话单机需求量激增,为此研制了一种能快速、准确测试电话单机主要性能并对其故障定位的测试仪器。测试仪的特点为:信号方式、接口形式符合有关用户交换机的国家标准;操作方法上符合人们的操作习惯;功能较全、测试速度快、定位准确。 单片机电话测试仪的主要功能为: ·环阻测量:测量用户摘机状态环路接通电阻Ron和挂机状态的漏电流Ioff; ·脉冲拔号测量:包括测量脉冲串的个数、速率、断续比、
[工业控制]
STM32f030c8t6单片机ADC模拟看门狗使用
根据st官方手册提供描述不难看出,ADC模拟看门狗其实就是用户可以设置一个AD值上下限值,然后打开此模拟看门狗中断开关,那么就会在检测到当IO输入转换AD值小于下限值或大于上限值时进入相应的中断函数。大致就是这么一个功能实现过程。 根据表63 可以看出,模拟看门狗可以设置为多通道和单通道模式,即可以通过设置相应的寄存器位来选择某一通道或多通道打开模拟看门狗检测。 那么明白了以上这些基础规则,那么我就要根据官方提供的库文件及里面的使用说明来配置相应函数来使用模拟看门狗。 打开此文件后下一步: 看!在这个官方提供的.c文件里面已经有介绍关于模拟看门狗使用的详细介绍的,只要理解了英文描述的意义,结合之前看数据手册关于ADC
[单片机]
IC Insights:未来五年MCU ASP可望缓步回升
    集微网消息,IC Insights预估,未来五年,微控制器(MCU)平均售价可望缓步回升,产值亦可逐年创历史新高至2020年。 IC Insights研究认为,在智能卡与32位MCU带动下,今年MCU市场产值微幅超越159亿美元、出货量更达到221亿套,年成长15%,双双创下历史新高。不过,MCU的产品平均售价(ASP)走势相对较差。 IC Insights调查指出,2015年MCU的ASP剩下0.72美元,年减13%,为历史新低价格;虽然MCU产业呈现量增、价跌走势,但后续产业展望趋于乐观,认为MCU产品跌价趋势应已结束,未来五年ASP可望缓步回升。 IC Insights预估,MCU今年平均售价将回升至0.7
[手机便携]
同时处理MCU和DSP的任务的嵌入式媒体处理器
现在一种嵌入式媒体 处理器 能够同时处理MCU和DSP的任务,从而将那些熟悉用MCU方式进行应用开发的C程式师带入一个新的领域,其中对代码和资料流程的智慧管理会显着提高系统的性能。这对于采用“已经掌握”的编程方法和简单的使用指令高速缓冲 记忆体 (cache, 简称快取记忆体)和资料快取记忆体来管理这些资料流程的程式师很有吸引力。然而,对媒体处理器的高性能直接记忆体访问(DMA)能力应认真地考虑。因爲懂得在这些应用中对使用快取记忆体和DMA进行权衡将有助于更好地理解如何编程来优化系统。 记忆体结构——对记忆体管理的要求 当今的媒体处理器具有分级的记忆体结构,用来平衡几种不同容量和性能等级的记忆体。通常,离核心处理器最近的
[单片机]
同时处理<font color='red'>MCU</font>和DSP的任务的嵌入式媒体处理器
改善8051系统用电效率的微控制器
摘要:一种改进架构的高性能8051设计、外围功能集成、选用合适的时钟源以降低功耗;并介绍节省电能的软件技术及采用待机模式降低功耗的技巧。 关键词:停机模式 空闲模式 功率管理模式 便携式产品的功能和性能日新月异。 消费者对产品性能的要求也越来越高,需要更强大的运算能力支持;另一方面,希望产品具有更低的功耗。 尽管已经出现了很多功耗处理器,但它们的性能通常很有限。Dallas公司的系列高速微控制器在性能和功耗之间取得了一个很好的折衷,采用了8051架构——世界上最流行的微控制器之一。简单易用、丰富的I/O资源使这种微控制器深受设计者的喜爱,并被广泛接受。它的流行势头已蔓延到了便携式领域,在很多应用中都有其用武之地。 本文
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved