Programm 6 (4Kanal Hardware-PWM)

Hier  mein Programm:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32

$crystal = 16000000                                         'Quarzfrequenz

Dim Taste1 As Bit
Dim Wert1 As Integer
Dim Wert2 As Integer
Dim Wert3 As Integer
Dim Wert4 As Integer
Dim Volt1 As Integer
Dim Spannung1 As Single
Dim Spa1 As String * 6

Declare Sub 4motvorw()
Declare Sub 4motruck()
Declare Sub Bremsen()
Declare Sub Spannungmessen()
Declare Sub Tastenabfrage()
Const Fest = 5 / 1023                                       'Zur Spannungsmessung


Config Porta = &B00111111                                   'Drehrichtung 3 Mot A7&A6 AD Wandler
Config Portb = &B00000011                                   'Drehrichtung 1 Mot B0&B1 (1=Ausgang 0=Eingang)
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Adc = Single , Prescaler = Auto

Config Timer0 = Pwm , Pwm = On , Compare = Clear , Prescale = 1
' 8 Bit PWM Ausgang Portb.3
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
' 8 Bit PWM Ausgang Portd.4 und Portd.5
Config Timer2 = Pwm , Pwm = On , Compare = Clear , Prescale = 1
' 8 Bit PWM Ausgang Portd.7
Enable Timer0
Enable Timer1
Enable Timer2

'Festgelegte Werte  Servos 1 - 4 = Wert1 = 179 : Wert2 = 178 : Wert3 = 158 : Wert4 = 173

Cls
Wait 1
Locate 1 , 1
Lcd "8 Bit PWM 4 Motore"
Locate 2 , 1 : Lcd "PWM1A="
Locate 2 , 11 : Lcd "PWM1B="
Locate 3 , 1 : Lcd "PWM0 ="
Locate 3 , 11 : Lcd "PWM2 ="
Locate 4 , 1 : Lcd "Ubat ="
Locate 2 , 7 : Lcd Wert1
Locate 2 , 17 : Lcd Wert2
Locate 3 , 7 : Lcd Wert3
Locate 3 , 17 : Lcd Wert4
Locate 4 , 11 : Lcd Spa1
Locate 4 , 12 : Lcd "V"
Call Spannungmessen

Do

Call Tastenabfrage

For Wert4 = 130 To 255
Call 4motvorw
Waitms 80
Next Wert4
Wert4 = 0

Call Bremsen

For Wert1 = 110 To 255 Step 5
Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1
Call 4motvorw
Waitms 100
Next Wert1

Wait 5

For Wert1 = 255 To 110 Step -5
Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1
Call 4motvorw
Waitms 100
Next Wert1

Call Bremsen

For Wert1 = 110 To 255 Step 5
Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1
Call 4motruck
Waitms 25
Next Wert1

Wait 5

For Wert1 = 255 To 110 Step -5
Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1
Call 4motruck
Waitms 25
Next Wert1

Call Bremsen

For Wert1 = 140 To 255 Step 5
Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1
Call 4motvorw
Waitms 10
Next Wert1

Wait 5

For Wert1 = 255 To 140 Step -5
Wert2 = Wert1 : Wert3 = Wert1 : Wert4 = Wert1
Call 4motvorw
Waitms 10
Next Wert1

Call Bremsen

Wert1 = 0 : Wert2 = 0 : Wert3 = 0 : Wert4 = 0

Loop
End

Sub 4motvorw()                                              'Motoren Ein
'Linker Motor ein
Porta.0 = 1                                              'Richtung vorw.
Porta.1 = 0                                              'Richtung vorw.
Portd.4 = 1                                              'Linker Motor EIN OC1B

'Rechter Motor ein
Porta.2 = 1                                              'Richtung vorw.
Porta.3 = 0                                              'Richtung vorw.
Portd.5 = 1                                              'rechter Motor Ein OC1A

Porta.4 = 1                                              'Richtung vorw.
Porta.5 = 0                                              'Richtung vorw.
Portb.3 = 1                                              'Linker Motor EIN OC0

'Rechter Motor ein
Portb.0 = 1                                              'Richtung vorw.
Portb.1 = 0                                              'Richtung vorw.
Portd.7 = 1                                              'rechter Motor Ein OC2

Compare1a = Wert1                                     '255=Maxspeed  :  0=Minspeed
Compare1b = Wert2
Compare0 = Wert3
Compare2 = Wert4

Locate 2 , 7 : Lcd "    "
Locate 2 , 7 : Lcd Wert1
Locate 2 , 17 : Lcd "    "
Locate 2 , 17 : Lcd Wert2
Locate 3 , 7 : Lcd "    "
Locate 3 , 7 : Lcd Wert3
Locate 3 , 17 : Lcd "    "
Locate 3 , 17 : Lcd Wert4
Call Spannungmessen
End Sub

Sub 4motruck()                                              'Motoren Ein
'Linker Motor ein
Porta.0 = 0                                              'Richtung vorw.
Porta.1 = 1                                              'Richtung vorw.
Portd.4 = 1                                              'Linker Motor EIN OC1B

'Rechter Motor ein
Porta.2 = 0                                              'Richtung vorw.
Porta.3 = 1                                              'Richtung vorw.
Portd.5 = 1                                              'rechter Motor Ein OC1A

Porta.4 = 0                                              'Richtung vorw.
Porta.5 = 1                                              'Richtung vorw.
Portb.3 = 1                                              'Linker Motor EIN OC0

'Rechter Motor ein
Portb.0 = 0                                              'Richtung vorw.
Portb.1 = 1                                              'Richtung vorw.
Portd.7 = 1                                              'rechter Motor Ein OC2

Compare1a = Wert1                                     '255=Maxspeed  :  0=Minspeed
Compare1b = Wert2
Compare0 = Wert3
Compare2 = Wert4

Locate 2 , 7 : Lcd "    "
Locate 2 , 7 : Lcd Wert1
Locate 2 , 17 : Lcd "    "
Locate 2 , 17 : Lcd Wert2
Locate 3 , 7 : Lcd "    "
Locate 3 , 7 : Lcd Wert3
Locate 3 , 17 : Lcd "    "
Locate 3 , 17 : Lcd Wert4
Call Spannungmessen
End Sub

Sub Bremsen()                                               'Motoren Ein
'Linker Motor ein
Porta.0 = 0                                              'Richtung vorw.
Porta.1 = 0                                              'Richtung vorw.
Portd.4 = 1                                              'Linker Motor EIN OC1B

'Rechter Motor ein
Porta.2 = 0                                              'Richtung vorw.
Porta.3 = 0                                              'Richtung vorw.
Portd.5 = 1                                              'rechter Motor Ein OC1A

Porta.4 = 0                                              'Richtung vorw.
Porta.5 = 0                                              'Richtung vorw.
Portb.3 = 1                                              'Linker Motor EIN OC0

'Rechter Motor ein
Portb.0 = 0                                              'Richtung vorw.
Portb.1 = 0                                              'Richtung vorw.
Portd.7 = 1                                              'rechter Motor Ein OC2

Compare1a = 255                                       '255=Maxspeed  :  0=Minspeed
Compare1b = 255
Compare0 = 255
Compare2 = 255
Waitms 200

End Sub

Sub Spannungmessen()                                        'Spannungsmessung an pin A7

Start Adc
Volt1 = Getadc(7)                                           'Versorgungssp.
Volt1 = Volt1 * 11                                          'Spannungsteiler 10k/1k
Spannung1 = Volt1 * Fest
Spannung1 = Spannung1 * 100 : Spannung1 = Int(spannung1)    '*100 dann nur Vorkommastellen
Spa1 = Str(spannung1) : Spa1 = Left(spa1 , 4)               'Die ersten 4 Stellen als String
Locate 4 , 7 : Lcd "     "                                  'Löschen
If Spannung1 > 999 Then                                     'Mehr als 9.99V
Locate 4 , 7 : Lcd Left(spa1 , 2) ; Chr(46) ; Mid(spa1 , 2 , 2)
Goto Raus
End If
Locate 4 , 7 : Lcd Left(spa1 , 1) ; Chr(46) ; Mid(spa1 , 2 , 2)       'Weniger als 10
Raus:
Locate 4 , 19

End Sub

Sub Tastenabfrage()                                         'Diese Unterfunktion fragt die Taste An b4 ab

Warten:
Taste1 = Pinb.4
If Taste1 = 0 Then Taste1 = 1 Else Goto Warten           'Taste Betätigt, dann raus sonst warten

End Sub

 

Die Robotik & Arduino Seite