Firmware yornbot

Aus C3MAWiki
Version vom 2. Dezember 2006, 03:26 Uhr von Yorn (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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
\\


Die Version mit besserer Navigation v0.2a!

'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
Meine Werkzeuge