Firmware yornbot
Aus C3MAWiki
Version vom 2. Dezember 2006, 03:26 Uhr von Yorn (Diskussion | Beiträge)
Die erste vorzeigbare Version v0.1a!
DECLARE SUB Go() DECLARE SUB Wenden() DECLARE FUNCTION Tastenabfrage() AS Byte $regfile = "m32def.dat" DIM I AS INTEGER DIM N AS INTEGER DIM Ton AS INTEGER DIM Wsen AS Word DIM Wbump AS Word $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Adc = SINGLE , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung Config Pina.7 = INPUT 'Für Tastenabfrage Porta.7 = 1 'Pullup Widerstand ein DIM Taste AS Byte 'Ports für linken Motor Config Pinc.6 = OUTPUT 'Linker Motor Kanal 1 Config Pinc.7 = OUTPUT 'Linker Motor Kanal 2 Config Pind.4 = OUTPUT 'Linker Motor PWM 'Ports für rechten Motor Config Pinb.0 = OUTPUT 'Rechter Motor Kanal 1 Config Pinb.1 = OUTPUT 'Rechter Motor Kanal 2 Config Pind.5 = OUTPUT 'Rechter Motor PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = CLEAR Down , Compare B Pwm = CLEAR Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b OR &H02 'Prescaler = 8 PRINT PRINT "yornbot v-0.1a" PRINT FUNCTION Tastenabfrage() AS Byte LOCAL Ws AS Word Tastenabfrage = 0 Ton = 600 Start Adc Ws = Getadc(7) IF Ws < 500 THEN SELECT CASE Ws CASE 400 TO 450 Tastenabfrage = 1 Ton = 550 CALL Go CASE 330 TO 380 Tastenabfrage = 2 Ton = 500 CALL Wenden CASE 260 TO 305 Tastenabfrage = 3 Ton = 450 CASE 180 TO 220 Tastenabfrage = 4 Ton = 400 CASE 90 TO 130 Tastenabfrage = 5 Ton = 350 END SELECT SOUND Portd.7 , 400 , Ton 'BEEP Waitms 100 END END IF END FUNCTION SUB Go() PRINT "*GO*" 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 200 DO Pwm1a = I Pwm1b = I Waitms 20 I = I + 20 LOOP UNTIL I > 281 ' Do 'Wbump = Getadc(1) 'If Wbump > 500 Then 'Print "*WENDEN - I think we hit something!*" 'Call Wenden 'End If DO Wsen = Getadc(0) 'Print 'Print "**** Sharp Sensor Test *****" 'Print "**** ADC-Wert: " ; Wsen 'Waitms 100 IF Wsen > 200 THEN PRINT "*WENDEN - Object in range!*" CALL Wenden END IF LOOP END SUB SUB Wenden() 'Linker Motor ein Portc.6 = 0 'bestimmt Richtung Portc.7 = 1 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 0 'bestimmt Richtung rechter Motor Portb.1 = 1 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 200 DO Pwm1a = I Pwm1b = I Waitms 20 I = I + 20 LOOP UNTIL I > 281 WAIT 1 Pwm1a = 0 Pwm1b = 0 'Linker Motor ein Portc.6 = 0 'bestimmt Richtung Portc.7 = 1 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 200 DO Pwm1a = I Pwm1b = I Waitms 20 I = I + 20 LOOP UNTIL I > 281 WAIT 1 Pwm1a = 0 Pwm1b = 0 CALL Go END SUB\\
'v-0.2a DECLARE SUB Go() DECLARE SUB Wenden() DECLARE SUB Links() DECLARE SUB Rechts() DECLARE FUNCTION Tastenabfrage() AS Byte $regfile = "m32def.dat" DIM I AS INTEGER DIM I2 AS INTEGER DIM N AS INTEGER DIM Ton AS INTEGER DIM Wsen AS INTEGER DIM Wre AS INTEGER DIM Wli AS INTEGER DIM Wr AS INTEGER DIM Wl AS INTEGER DIM W0 AS INTEGER $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Adc = SINGLE , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung Config Pina.7 = INPUT 'Für Tastenabfrage Porta.7 = 1 'Pullup Widerstand ein DIM Taste AS Byte 'Ports für linken Motor Config Pinc.6 = OUTPUT 'Linker Motor Kanal 1 Config Pinc.7 = OUTPUT 'Linker Motor Kanal 2 Config Pind.4 = OUTPUT 'Linker Motor PWM 'Ports für rechten Motor Config Pinb.0 = OUTPUT 'Rechter Motor Kanal 1 Config Pinb.1 = OUTPUT 'Rechter Motor Kanal 2 Config Pind.5 = OUTPUT 'Rechter Motor PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = CLEAR Down , Compare B Pwm = CLEAR Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b OR &H02 'Prescaler = 8 PRINT "yornbot v-0.2a" PRINT FUNCTION Tastenabfrage() AS Byte LOCAL Ws AS Word Tastenabfrage = 0 Ton = 600 Start Adc Ws = Getadc(7) IF Ws < 500 THEN SELECT CASE Ws CASE 400 TO 450 Tastenabfrage = 1 Ton = 550 CALL Go CASE 330 TO 380 Tastenabfrage = 2 Ton = 500 CALL Wenden CASE 260 TO 305 Tastenabfrage = 3 Ton = 450 CASE 180 TO 220 Tastenabfrage = 4 Ton = 400 CASE 90 TO 130 Tastenabfrage = 5 Ton = 350 END SELECT SOUND Portd.7 , 400 , Ton 'BEEP Waitms 100 END END IF END FUNCTION SUB Go() PRINT "*GO*" 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 200 DO Pwm1a = I Pwm1b = I Waitms 20 I = I + 20 LOOP UNTIL I > 281 DO W0 = Getadc(0) Wr = Getadc(1) Wl = Getadc(2) Wsen = W0 + Wr Wsen = Wsen + Wl Wre = W0 + Wr Wli = W0 + Wl IF Wsen > 1000 THEN PRINT "*WENDEN - Blocked!*" CALL Wenden END IF IF Wre > 400 THEN PRINT "*HINDERNISS RECHTS- Ausweichen nach links!*" CALL Links END IF IF Wli > 400 THEN PRINT "*HINDERNISS LINKS- Ausweichen nach rechts!*" CALL Rechts END IF LOOP END SUB SUB Links() 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 281 I2 = 101 Pwm1a = I2 Pwm1b = I Waitms 20 WAIT 1 Pwm1a = 0 Pwm1b = 0 CALL Go END SUB SUB Rechts() 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 101 I2 = 281 Pwm1a = I2 Pwm1b = I Waitms 20 WAIT 1 Pwm1a = 0 Pwm1b = 0 CALL Go END SUB SUB Wenden() 'Linker Motor ein Portc.6 = 0 'bestimmt Richtung Portc.7 = 1 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 0 'bestimmt Richtung rechter Motor Portb.1 = 1 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 200 DO Pwm1a = I Pwm1b = I Waitms 20 I = I + 20 LOOP UNTIL I > 281 WAIT 1 Pwm1a = 0 Pwm1b = 0 'Linker Motor ein Portc.6 = 0 'bestimmt Richtung Portc.7 = 1 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 200 DO Pwm1a = I Pwm1b = I Waitms 20 I = I + 20 LOOP UNTIL I > 281 WAIT 1 Pwm1a = 0 Pwm1b = 0 CALL Go END SUB