Hier mein Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
$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 |