?? ad-pwm.txt
字號:
'////////////////////////////////////////////////////////////////////
'/這個程序用于測試FASTAVR的PWM以及A/D轉換輸出功能是否正常,這個程序 /
'/可以通過修改變成PWM脈寬調速的基本程序 /
'/這個程序是用ADC的采樣值大小來控制PWM的脈寬的大小 /
'/語言:FASTAVR4.1.3 /
'/作者:JAMESKING /
'/參考程序:fastavr中文使用手冊以及FastBW.pdf /
'/編譯及使用情況:通過編譯,沒有錯誤;通過試驗板測試,采用 /
'/TEK公司的TDS220數(shù)字存儲示波器分別觀測兩通道波形,完全滿足設計要求 /
'////////////////////////////////////////////////////////////////////
$Device = m8 '
$Clock = 11.0592 '
$Stack=125 '反正內部RAM大,不用白不用,用了也白用:)
$Lcd =PORTD.4 , RS = PORTD.2 , EN = PORTD.3, 16, 2 'LCD連接方式DB4、5、6、7連接PD4、5、6、7,此處必須要連續(xù)端口,其余應該可以看得懂的
$Baud = 115200 '波特率設置為115200,
$Source=On '
$Timer1=PWM, 10, Pwm1A=Normal,Pwm1B=Normal,Prescale=1024 '設置timer1為10位PWM,PWM輸出為同相方式,預分頻為1024(10位方式可以更改為8、9位方式,
'因為我使用了Mega8,所以有兩個PWM輸出端口,并且兩個端口可以同時輸出占空比完全不同的
'PWM波形),并且,可以根據(jù)芯片的不同采用不同的分頻比。
Cls '清LCD1602
WaitMs 5 '等待5ms
Locate 1, 1 '定位光標于第一行第一列
Cursor On '光標打開
Cursor Blink '光標閃爍
Lcd "JAMESKING" '顯示我的網絡名稱JAMESKING
Nop 10 '在液晶的第一行顯示字符
Locate 2 , 2 : Lcd "SWJTU.EDU.CN " '在第二行的第二列顯示字符
Nop 5 '
Wait 1 '等待1秒鐘
Set DDRB.1 '置位PB1為輸出
Nop 5 '
Wait 1 '
Set PORTB.1 '置位PB1
Nop 5 '
Wait 1 '
Reset PORTB.1 '清除PB1
Set DDRB.2 '置位PB2為輸出
Nop 5 '
Set PORTB.2 '置位PB2
Nop 5 '
Wait 1 '
Reset PORTB.2 '清除PB2
Nop 5 '
Cls '清除LCD1602
Locate 2 , 2 : Lcd "MATS&ENG" '定位光標于第二行第二列,顯示我的院系MAT&ENG
Wait 1 '
Cls '
Nop 5
Print "The World is Not Enough" '串行口輸出字符“The World is Not Enough”至PC機
Nop 5
Cls '從這里開始,我來了個空檔接龍
WaitMs 5 '等待5ms,不等待的話,這里根本就不會顯示
Dim n As Byte '因為只會采樣40次,所以這里用byte就足夠了
Dim volts As Word '因為我的ADC采用的是10位,故這里用word
Dim voltraw As Word '采樣的原始值
Dim voltav As Word '采樣的累加和
Nop 5 '
Start Adc , Vref = Int '開始單次采樣,VREF采用內部2.56V
Nop 5 '穩(wěn)定ADC
Do
For n = 1 To 40 ' ADC采樣40次
Nop 10 '
voltraw = Adc(0) '選擇ADC0通道
Nop 5
Locate 1,1: Lcd "Raw Input "; voltraw; " " '在LCD上顯示ADC采樣原始值(實際上顯示的不是十六進制而是十進制)
voltav = voltav + voltraw 'ADC的原始值累加
Next '
Nop 5
Wait 1 '這個地方如果不等待一秒鐘,那么現(xiàn)在天氣很冷,LCD肯定不聽話
voltav = voltav / 40 ' 對ADC采樣值求平均
Locate 2,1: Lcd "Filtered "; voltav; " " '顯示ADC求平均以后的平均值
WaitMs 200 '原理同上,還是等等吧,咱不在乎這200ms,只是顯示時間太短了
Pwm1A=voltraw 'PWM端口1A占空比受ADC0的采樣初始值控制,設置的參數(shù)為變量,設置的參數(shù)須配合PWM的位數(shù)
Pwm1B=voltav 'PWM端口1B占空比受ADC0的40次采樣平均值控制,設置的參數(shù)為變量,設置的參數(shù)須配合PWM的位數(shù)
Set DDRB.1 '置PWM1A為輸出口
Set DDRB.2 '置PWM1B為輸出口
Start Timer1 '啟動定時期T1(就是啟動PWM),輸出PWM坡形
Loop '循環(huán)
End '
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -