|
这是一个BASCOM-AVR教学课堂演示。综合了PWM、AC、ADC三方面的硬件应用。中心问题是用AC进行模数转换,PWM的数模转换提供比较电压,ADC验证转换结果。程序的思路与《AVR单片机BASIC语言编程及开发》P158所说的对半加减法相同,仅仅是数模转换方式不同。向初学者介绍本实验的目的是:1.实现容易--PWM1A输出的脉冲,只要一级阻容低通滤波平滑(100K,0.1uF),接到比较器的AIN0(PD6),而AIN1(PD7)联接到待测电压(实验用100K的电位器,两端接单片机电源,滑臂接PD7)。2. 综合性强--涵盖了三种硬件的使用,程序短小精干。
硬件联接:OC1A(PB1)--》R 100K --》C 0.1uF(另一端接地)--》AIN0(PD6)
电位器滑臂--》AIN1(PD7)、ADC(5)(PC5)
$regfile = "m8def.dat" '可以使用其他单片机
$crystal = 8000000
$baud = 9600 '单片机与PC串行通信波特率(RS232)
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1
‘PWM1A配置,用于数模转换作比较电压
Ddrb = 2 ‘PWM1A输出端子
Config Adc = Single , Prescaler = Auto , Reference = Avcc ‘ADC配置,验证用
Config Aci = On , Compare = Off , Trigger = Rising 'AC配置
Dim A As Word , B As Bit , C As Word , X As Word , S As String * 5 , U As String * 5
B Alias Acsr.5 'Acsr.5是比较器的比较结果
Start Ac '启动所有硬件
Start Timer1
Start Adc
Do
Input X '仅仅用作转换启动,回车即可
A = 512 : C = 0 : X = 256 '变量A是PWM的比较值,也是最后的模数转换结果
'变量C是暂存器,也可能是最后的转换结果
Pwm1a = A ' PWM1A装入脉冲宽度比较值
Do '该DO......LOOP是转换过程循环
Waitms 20 '因为RC平滑滤波要求,进行短暂延时
If B = 0 Then
A = A + X
Elseif B = 1 Then
C = A
A = A - X
End If
Pwm1a = A
X = X / 2
Loop Until X = 0
If B = 0 Then A = C '转换结束,A 是实验结果
S = Str(a)
Print "Measure: " ; S '通过RS232向PC输出实验结果
C = Getadc(5) '读单片机ADC转换结果进行对比
S = Str(c)
Print "Adconvert: " ; S '输出单片机ADC转换值
Loop
End |
|