ATmega8+PT100热敏电阻+AD824S proteus仿真与源程序

发布者:WhisperingRain最新更新时间:2019-11-08 来源: 51hei关键字:ATmega8  PT100热敏电阻  AD824S 手机看文章 扫描二维码
随时随地手机看文章

pt100热敏电阻+AD824S放大并由ATmega8单片机主控的测温系统仿真原理图如下
0.jpg0.png

ATmega8单片机源程序如下:

/*****************************************************

This program was produced by the

CodeWizardAVR V2.03.4 Standard

Automatic Program Generator

?Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.


Project : 

Version : 

Date    : 2011-4-16

Author  : 

Company : 

Comments: 



Chip type           : ATmega8

Program type        : Application

Clock frequency     : 8.000000 MHz

Memory model        : Small

External RAM size   : 0

Data Stack size     : 256

*****************************************************/


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

if ((fR>=80.31)&&(fR<100)) //-30~0 度

{

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

    {

      fT=fT0+(fR-100*(1+A*fT0+B*fT0-100*C*fT0*fT0+C*fT0*fT0*fT0))/

      (100*(A+2*B*fT0-300*C*fT0*fT0+4*C*fT0*fT0*fT0));

      if(fabs(fT-fT0)<0.001) break;

      else

      fT0=fT;

    } 

}  else if(fR>=100&&fR<=390.481) // 0~850 度

{

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

   {

     fT=fT0+(fR-100*(1+A*fT0+B*fT0*fT0))/(100*(A+2*B*fT0));

     if (fabs(fT-fT0)<0.001) break;

     else

     fT0=fT;

   }

  

}  else fT=-1000.0;

return fT;

};

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;

……………………



关键字:ATmega8  PT100热敏电阻  AD824S 引用地址:ATmega8+PT100热敏电阻+AD824S proteus仿真与源程序

上一篇:AVR16 AVR128的DS18B20温度传感器protues仿真与源码
下一篇:MEGA2560主控自行车骑行监测器

推荐阅读最新更新时间:2024-11-02 20:03

基于SCA100T的倾角测量系统设计
引言 目前,业内对倾角的测量多是基于MEMS的加速度传感器,SCA100T是由芬兰VTI公司推出,采用三维MEMS技术开发的一款高精度双轴倾角传感器,可同时测量相对于水平面的倾斜和俯仰角度,具有温度补偿功能。本文以塔式起重机为应用背景,采用SCA100T倾角传感器实时采集倾斜信息,检测塔式起重机支撑架的平衡性能,避免由于其过度倾斜而引发事故。以SCA100T为基础设计了一款小巧、灵敏度高的倾角测量系统,分析了SCA100T倾角传感器测角的原理,给出了系统各个模块的软硬件设计方法,同时提供了两种具有可扩展性的应用方法。 1 整体设计 图1所示为本系统的整体结构框图。该系统采用ATmega8单片机控制SCA100T倾角传感器
[单片机]
基于SCA100T的倾角测量系统设计
ATmega88 控制和状态寄存器MCUCSR
AVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。 · Bit 7..4 – Res: 保留位 ATmega48/88/168中的这些位都没有适用,读返回值始终为 0”。 · Bit 3 – WDRF: 看门狗复位标志 看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 · Bit 2 – BORF: 掉电检测复位标志 掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 · Bit 1 – EXTRF: 外部复位标志 外部复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 · Bit 0 – PORF: 上电复位标志 上电复位发生时置位。只能通过写”0” 来
[单片机]
<font color='red'>ATmega8</font>8 控制和状态寄存器MCUCSR
单片机ATmega8读取165串入的拨码开关程序
/***********74HC165并入串出例子程序************/ // 单片机 ATmega8读取165串入的拨码开关地址 // // 晶振:内部1M // // Author:wanghu // // AVRGCC @2008.6.1 // /**********************************************/ #include avr/io.h #include util/delay.h /**********定义位操作的位移宏 by wanghu********/ #define setb
[单片机]
ATmega88 复位与中断处理
AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安全性。详见 P254“ 存储器编程” 的描述。 程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P47“中断”。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR) 的IVSEL,中断向量可以移至引导Fla
[单片机]
atmega8 例程:定时器T1 普通模式
/***************************************************************** * 函数库说明:ATMEGA8 定时器T1 普通模式 * 版本: v1.00 * 修改: 庞辉 芜湖联大飞思卡尔工作室 * 修改日期: 2011年08月11日 * * 说明: 6M外部晶振 10ms定时 * * 版本更新: 详见readme.txt * * 20110805 V1.02 *
[单片机]
ATmega8 掉电模式
当SM2..0 为010 时, SLEEP 指令将使MCU 进入掉电模式。在此模式下,外部晶体停 振,而外部中断、两线接口地址匹配及看门狗(如果使能的话)继续工作。只有外部复 位、看门狗复位、BOD 复位、两线接口地址匹配中断、外部电平中断INT0 或INT1,或 外部中断INT2 可以使MCU 脱离掉电模式。这个睡眠模式停止了所有的时钟,只有异步 模块可以继续工作。 当使用外部电平中断方式将MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。具 体请参见 P 62“ 外部中断” 。 从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来。 唤醒周期与由熔丝位CKSEL 定义的复位周期是一样的,如
[单片机]
ATMEGA8单片机频率计程序与电路图
原理上采用32.768K外部晶振产生异步时钟信号 ,作为M8定时器2的时钟源,设定1024的预分频,可以得到TCNT2溢出的精确时间为1s,在溢出中断时控制74ls00与非门进而控制被测信号的通断,累计1s 内计数器获得的值,经过简单的运算则可获得被测信号的频率 M8 采用内部 8M 内部RC震荡 工作模式 , 电路采用74ls393 对被测信号进行预分频,相当于扩张T1计数器的位数,T1 为16位,74ls393为8位,扩展后为24位,T1不溢出的话 最高可测 16.777216M ,溢出则累计中断次数然后进行累加即可。(另外添加74ls393进行预分频的目的是为了解决T1引脚时钟信号不宜大于 单片机 工作频率的二分之一的问题
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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