⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc3_2_pwm4.bas

📁 bascom 的AVR mega88 3路ADC 其中两路结果 通过4路PWM输送出(分成互补的两组)
💻 BAS
字号:
$regfile = "m88def.dat"                                     ' ???¨??±êμ¥???ú?a ATmega88
$crystal = 1000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb = Output

Dim Adc_x As Word                                           'adc RESULT
Dim Adcxl As Byte                                           'X-L
Dim Adcxr As Byte                                           'X-R

Dim Adc_y As Word
Dim Adcyl As Byte                                           'Y-F
Dim Adcyr As Byte                                           'Y-B

Dim Adc_z As Word
Dim Adczb As Byte                                           'Z

Dim Int_x As Byte                                           'X pre-Setting. Should be set to a init val during power up
Dim Int_y As Byte                                           'Y
Dim Int_z As Byte                                           'Z

Dim Offgnd As Byte                                          'The edge or so called offset of hang in air

Dim Pbtmp As Byte                                           'PWM output temp
'PBTmp.0 NC
'PBTmp.1 Left  motor
'PBTmp.2 Right motor
'PBTmp.3 Front motor
'PBTmp.4 Back  motor

Dim N As Byte
Dim M As Word

Int_x = &B1000
Int_y = &B1000
Int_z = &B1000

Start Adc
   Do                                                       ' main loop
      Set Portb.0                                           'use PB.0 test how long AD need
      Adc_x = Getadc(0)
      Adc_y = Getadc(1)
      Adc_z = Getadc(2)
      Reset Portb.0
      Shift Adc_x , Right , 6                               'get high 4 bits
      Shift Adc_y , Right , 6
      Shift Adc_z , Right , 6
      Adcxl = Adc_x : Adcyl = Adc_y : Adczb = Adc_z         'CHANGE WORD TO BYTE

      If Adcxl >= Int_x Then                                ' balance left right
         Adcxr = Adcxl - Int_x
         Adcxr = Int_x - Adcxr
      Else
         Adcxr = Int_x - Adcxl
         Adcxr = Int_x + Adcxr
      End If

      If Adcyl >= Int_y Then                                ' balance front back
         Adcyr = Adcyl - Int_y
         Adcyr = Int_y - Adcyr
      Else
         Adcyr = Int_y - Adcyl
         Adcyr = Int_x + Adcyr
      End If


      Offgnd = 0
      N = Offgnd + 16
      Adcxl = Adcxl + Offgnd
      Adcxr = Adcxr + Offgnd
      Adcyl = Adcyl + Offgnd
      Adcyr = Adcyr + Offgnd

      If Adczb > Int_z Then                                 'fit G
         Adcxl = Adcxl - 1
         Adcxr = Adcxr - 1
         Adcyl = Adcyl - 1
         Adcyr = Adcyr - 1
      Elseif Adczb < Int_z Then
         Adcxl = Adcxl + 1
         Adcxr = Adcxr + 1
         Adcyl = Adcyl + 1
         Adcyr = Adcyr + 1
      Else
         Adcxl = Adcxl
         Adcxr = Adcxr
         Adcyl = Adcyl
         Adcyr = Adcyr
      End If

      Do
         N = N - 1
         Pbtmp = &B1 & Portb                                ' clear temp
         'LEFT & RIGHT---------------------------
         If Adcxl > 0 Then
            Adcxl = Adcxl - 1
            Pbtmp = Pbtmp Or &B10
         Else
            Adcxl = Adcxl
            Pbtmp = Pbtmp And &B11111101
         End If
         If Adcxr > 0 Then
            Adcxr = Adcxr - 1
            Pbtmp = Pbtmp Or &B100
         Else
            Adcxr = Adcxr
            Pbtmp = Pbtmp And &B11111011
         End If
         'FRONT & BACK---------------------------
         If Adcyl > 0 Then
            Adcyl = Adcyl - 1
            Pbtmp = Pbtmp Or &B1000
         Else
            Adcyl = Adcyl
            Pbtmp = Pbtmp And &B11110111
         End If
         If Adcyr > 0 Then
            Adcyr = Adcyr - 1
            Pbtmp = Pbtmp Or &B10000
         Else
            Adcyr = Adcyr
            Pbtmp = Pbtmp And &B11101111
         End If
         '---------------------------------------
         Portb = Pbtmp
         For M = 1 To 1
         Next M
       Loop Until N = 0
   Loop
End

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -