用AVR单片机制作的电容表_第1页
用AVR单片机制作的电容表_第2页
用AVR单片机制作的电容表_第3页
用AVR单片机制作的电容表_第4页
用AVR单片机制作的电容表_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用 AVR 单片机制作的电容表这种用 AVR 单片机制作的数显直读式电容表,具有能测量小至1pF 的电容,量程广(1pF-470uF ),能自动换挡,使用方便等优点。( 1)硬件电路用分立元件电路测量电容的容量,至少要一个电压比较器,一个时间计数器以及一些逻辑电路,而用AVR 单片机 AT90S2313 就可以实现这些功能。1) 工作原理用 AVR 单片机制作的数显直读模式电容表的电路图如图1图 1该电路由 AT90S2313 单片机带输出锁存和三态控制的串入/并出转换器以及 4 位共阳数码管等组成,所用元件不多,硬件电路非常简单。该电路采用小,整机工作电流仅32mA 左右。CD40949V稳

2、压块 78L05 ,叠层电池供电,功耗较(2)工作过程将待测电容Cx 插入 JP2,在测量从低量程开始,单片机先将阻 R16 对 Cx 充电,500ms 内将会触发以下测量过程。PB3 置为高电平,使Q1 截止,断开3.3k 电阻R15,仅通过3.3M电单片机开始计时, Cx 上的电压经 R14 送单片机内比较器的 AIN0 端,并与 AIN1 端的电压 0.5Vcc 比较,如果在 130ms 内 AIN0 端的电压 Vc 达不到 0.5Vcc ,说明 Cx 大于 57Nf ,应切换到高量程,反之,单片机将充电时间换算成 Cx 如果需要切换到高量程,则单片机会将的容量,连同容量的单位通过数码管

3、显示出来;PB0 口置低, Cx 通过 PB0 放电,放电完成后再将PB3 置低,使 Q1 导通,切换到高量程,R15 R16 并联向 Cx 充电(加快充电时间),并重新计时,如果 1 秒内 Cx 上的电压 Vc 达不到 0.5Vcc ,说明 Cx 大于 440uF,超量程,数码管显示 “ E2”,表示测量失败,反之,单片机将充电时间换算成Cx 的容量,连同容量的单位通过数码管显示出来。( 3)源程序.include“ 2313def.inc ”.include“ avr.inc.def _0=r15;零寄存器.def _Stm1=r14;系统定时器.def _Stm2=r13;系统定时器.d

4、ef _Flags=r25;标志寄存器;b0:结果为 minus;b1: 捕获完毕;b2:累计时间溢出;b7:有键按下;-数据存储器定义 -;. RAMTOPDispPtr:.byte1;显示缓冲区DispBuf:.byte4KeyScan:.byte2Comp1:.byte2; 低量程校准.Comp2:.byte2;高量程校准.Comp3:.byte2;零校准值StrBuf:.byte 10;十进制转换缓冲区;-程序区-;.csegrjmp reset;复位rjmp 0;外中断 INT0rjmp 0;外中断 INT1rjmp tc0_cap;TC1 捕获rjmp 0;TC1 捕获rjmp t

5、c1_ovf;TC1 溢出rjmp tc0_ovf;TC0 溢出;rjmp 0;Rx 接收寄存器准备好;rjmp 0;Tx 发送寄存器准备好;rjmp 0;Tx sfr 空;rjmp 0;模拟比较器;-初始化 -;reset:outi SPL,low(RAMEND)clr_0;清零寄存器ldiw Z, RAMTOP清 RAM;ldiAL, 128stZ+,_0decALbrne PC2outi PORTD,0b0111100outi DDRD,0b1111111outi PORTB,0b01111000outi DDRB,0b10001101outi TCCR0,0b100;TC0 时钟 =3

6、9kHzouti TIMSK,0b00000010;TC0 溢出允许sbi ACSR, ACIC;接 AC0 至 TC1 输入捕获clr _Flagsseildiw Y , DisoBuf; 显示测试 (500ms)ldiAL, 1stdY+0, ALstdY+1, ALstdY+2, ALstdY+3, ALldiAL, 125rcalldlyrcallload_eep;读增量校准值breqPC+6ldiwZ, form3*2rcall put_formedldiAL, 250rcalldly;-主程序 -;main:ldi AL, 25等待 100ms,定时器 2erapsedmov _S

7、tm1,ALcbr _Flags,bit7sbrc _Flags,7rjmp btn_pressedtst _Stm1brne PC5ldi AL,125; 启动定时器 2( 500ms)mov _Stm2,ALrcall measure;低量程测量brcc PC+3;超时,试高量程cbiPORTB,3rcall measurercall adjust_zero;刷新显示rcall adjust_gainrcall disp_valsbiPORTB,3;置为低量程rjmpmainbtn_pressed:ldiAL,4;延时 16msrcall dlysbis PINB,6;ISP1-3 短路?

8、rjmp cal_low;是,校准低量程sbis PINB,5;ISP4-6 短路?rjmp cal_high;是,校准高量程rjmp can_offset;否则,校零cal_high:cbi PORTB,3;测大容量标准电容rcall measuresbiPORTB,3ldiw C,0;X:D:C=1000*65536;(100nF 标准电容 )ldiw D,1000ldiw X,0ldiw Z,Comp2cal_low:rcall measure; 测小容量标准电容rcall adjust_zeroldiw C,0;X:D:C=1000*65536;(1nF 标准电容 )ldiw D,10

9、000ldiw X,0ldiw Z,Comp1cal_copm:clrwTO;X:D:C/=B:A;clrw T2ldi EL,48lslw Crolw Drolw Xrolw T0rolw T2cpw T0,Acpcw T2,Binc CLdec ELbrne PC21or DL,DH;溢出检测or DL,XLor DL,XHbrne cal_errstdw Z+0,Crcall clr_disprcall save_eeprjmp maincan_offset:rcall measure;测量电容为零or BL, BH;检测精度范围brne cal_errcpi BH, high(2000

10、)brcc cal_errstsw Comp3,A; 设此值为零点rcall clr_disprjmp maincal_err:ldiw Z,form4*2rcall put_formedldi AL,250rcall dlyrjmp maindly: mov _Stm1,ALtst _Stm1brne PC1ret;-测电容 -;measure:outTCNT1H,_0; 清 TC1 并置时限outTCNT1L,_0clrT2LldiAL, 20sbisPORTB, 3ldiAL, 152movT2H, ALoutiTIFR,0b10001000; 允许 TC1 溢出, TC1 捕获outi

11、TIMSK,0b10001010cbr_Flags,bit0+bit1+bit2outiTCCR1B,0b01000001;开 TC1cbiDDRB,0; 开始充电sbrc _Flags, 2;等待累计结束rjmp mea_oversbrs _Flags,1rjmp PC-3outi TCCR1B, 0b01000000;关 TC1movew A,T4;取结果movew B, T6clcretmea_over:outiTCCR1B,0b01000000;关 TC1ldi AL,4;等待 16msrcalldlyldi BH, 1secretadjust_zero:sbis PORTB,3; 高

12、量程,跳一行rjmp PC+19ldsw C,Comp3;B:A -=Comp3subw A,Csbc BL,_0sbc BH,_0brcc PC+10;CY=0,B:A *= 1;置符号标志sbr _Flags,bit0comw Acomw Badc AL,_0adc AH,_0adc BL,_0adc BH,_0retadjust_gain:ldiw Y ,Comp1sbis PORTB,3;增益调整adiw YL,2; 据量程取校准值送 Dlddw D,Y+0subw C, C;B:A = B:A * D / 65536;ldi EL,33brcc PC+3addw C,Drorw Cr

13、orw Brorw Adec ELbrne PC10movew A,Bmovew B,Cret;-显示 B:A 值,单位 0.1pF-;disp_val:diw X,StrBuf;十进制转换缓冲区clrDL;十进制数incDL;-Digits+clrCL;-/=10;lslw Arolw BrolCLcpiCL,10brcs PC+3subi CL,10inc ALdec CHbrne PC10st X+,CLcp AL,_0cpc AH,_0cpc BL,_0cpc BH,_0brne PC19cpiDL,2;调整 0.0pF 数brcc PC+3stX+,_0incDLsbis PORTB

14、, 3;高量程,数字调整addi DL,3ldiw Z, form2*2 4;模式选择sbrs _Flags, 0adiw ZL,16adiw ZL,4decDLcpiDL,2brcc PC3put_formed:clr AHldiw Y ,DispBuflpmadiw ZL,1mov AL,TOLcltcpiAL,2brcc PC+3bstAL,0ld AL, Xpushw Zldiw Z,seg7*2addwZ,AlpmpopwZbldT0L,0stY+,T0LcpiYL,DispBuf+4brne PC20retclr_disp:ldiwY,DispBufstY+,_0cpiYL,Dis

15、pBuf+4brne PC2retform4:.db14,5,15,15;E5form3:.db14,4,15,15;E4form2:.db10,1,0,13;-0.0p.db10,0,0,13;-00p.db14,3,15,15;E3.db14,3,15,15;E3form1:.db15,1,0,13;0.0p.db0,1,0,13;00.0p.db0,0,0,13;000p.db1,0,0,12;0.00n.db0,1,0,12;00.0n.db0,0,0,12;000n.db1,0,0,11;0.00u.db0,1,0,11;00.0u.db0,0,0,11;000u.db14,2,15

16、,15;E2.db14,2,15,15;E2.db14,2,15,15;E2seg7:.db0 xfc,0 x60,0 xda,0 xf2,0 x66,0 xb6,0 xbe,0 xe00, 1,2,3,4,5,6,7.db0 xfe,0 xf6,0 x02,0 x4e,0 xc4,0 xce,0 x9e,0 x008 , 9 , - , u , n , p , E ,;-EEPROM 读写 -;load_eep:ldiwY,Comp1; 取校准数据ldiw C,0 x5501rcall read_eepst Y+,ALadd CH, ALcpi YL,Comp1+4brne PC-4rcal

17、l read_eep;和校验cp AL,CHbreq PC+6sti Y, 1st Y,ALst Y,ALst Y,ALretsave_eep:ldiwY,Comp1;存校准值ldiw C,0 x5501ld AL, Y+add CH,ALrcall write_eepcpi YL,Comp1+4brne PC4mov AL,CHwrite_eep:outEEAR,CLinc CLout EEDR,AL; 存校验和SUMclisbi EECR,EEMWEsbi EECR,EEWEseisbic EECR,EEWErjmp PC 1retread_eep:out EEAR,CLinc CLsbi

18、 EECR,EEREinAL,EEDRret;-TC1 溢出中断处理 -;T2L 计数溢出form TCNT1;置超时错标志.Tc1_ovf:push ALin AL,SREGpush ALinc T2Lcp T2L,T2Hbrcs PC+6sbi DDRB,2sbi DDRB,0sbr _Flags,bit2outi TIMSK,0b00000010pop ALout SREG,ALpop ALreti;-TC1捕获中断-;tc1_eep:pushAL;结束测量in AL,SREGpush ALsbis DDRB,2;转移by测量脉冲rjmp tc1c_edtc1c_st:in T4L,IC

19、R1L;Vc 达到 0.17Vccin T4H,ICR1H;取 T1movT6L,T2LcbiDDRB,2;置 Vth 为 0.5VccldiAL,20decALbrne PC1outi TIFR,0b00001000rjmp tc1c_etc1c_ed:mov T6H,T4L;Vc 达到 0.5Vccin T4L,ICR1L;取 t2t1sub T4L,T6Hmov T6H,T4Hin T4H,ICR1Hsbc T4H,T6Hmov T6H,T6Lmov T6L,T2LclrT6HsbiDDRB,2; 置 Vth 为 0.17Vcc.sbiDDRB,0; 电容放电outi TIMSK,0b0

20、0000010;中断屏蔽sbr _Flags,bit1;测量结束tc1c_e:pop ALout SREG,ALpop ALreti;-TC0 溢出中断处理(1kHz ) -;刷新显示 .键盘扫描 .减 _Stm1 和 _Stm2.(250Hz)tc0_ovf:pushALouti TCNT0, 39seiin AL,SREGpushw Apushw Zldiw Z,DispPtr;下一个显示数据ld AH,Zinc AHcpi AH,4brcs PC+3rcall scan_keyclr AHst Z+,AHouti PORTD,0b0111100;关显示add ZL,AHldi AL,bit6lsr ALsubi AH,1brcc PC2com ALandi AL,0b0111100ld AH,Z;取段码ldi ZL,8;段码送 sregsbrs AH,0sbi POR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论