Da ich noch keine Sensoren habe, möchte ich mein Chassis zum Test erst mal ein bischen mit der Fernbedienung durch die Gegend scheuchen.
Ich habe zuerst ein kleines Programm zur Auswertung der RC5 Signale der Fernbedienung zusammenkopiert, das funktioniert auch.
Dann habe ich das Beispielprogramm zur Servo-Ansteuerung das bei Bascom dabei ist etwas angepasst, das funktionierte auch.
Dann habe ich versucht beides zu kombinieren, das klappt aber nicht.
Ich bekomme ständig dieselbe Fehlermeldung, das blöde ist nur, dass die Zeile mit dem fehlerhaften Code immer hinter meinem Programmende liegt und mir die Fehlermeldung gar nichts sagt.
Die Fehlermeldungen lauten:
Kann es sein, dass Bascom das angeblich doppelte Label selber verursacht, weil intern in den Routine für RC5 Auswertung und für die Servos jeweils ein Label mit demselben Namen verwendet wird?Code:Error : 60 Line : 204 Duplicate label [_SYSTEM_T0_ISR ] , in File : C:\PROGRAMME\BASCOM-AVR\MYPROJECTS\MINIBOT2.BAS Error : 60 Line : 204 Duplicate label [_SYSTEM_T0_ISR_EXIT ] , in File : C:\PROGRAMME\BASCOM-AVR\MYPROJECTS\MINIBOT2.BAS Error : 221 Line : 204 Backward jump out of range [_SYSTEM_T0_ISR_EXIT [ 275]] , in File : C:\PROGRAMME\BASCOM-AVR\MYPROJECTS\MINIBOT2.BAS
Oder reservieren sich vielleicht beide Routinen denselben Timer oder irgendeine andere Resource?
Wenn ich entweder alles was mit Servos oder alles was mit RC5 zutun hat rauschmeisse sind die Fehlermeldungen weg.
Vielleicht kann ja mal jemand einen kurzen Blick auf den Code werfen, ob er den Fehler entdeckt.
Ist zwar relativ lang, sind aber nur ein paar relevante Zeilen, der Rest sind Konstanten und ein paar ganz simple Routinen.
Code:'Servo's need a pulse in order to operate 'with the config statement CONFIG Servos we can specify how many servo's we 'will use and which port pins are used 'A maximum of 16 Servos might be used 'The SERVO statements use one byte for an interrupt counter and the TIMER0 'This means that you can not use TIMER0 anymore 'The reload value specifies the interval of the timer in uS 'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 '$lib "mcsbyte.lbx" $crystal = 4000000 $baud = 9600 'we must configure the port pins used to act as output Config Portd = Output ' PinD.2 als Eingang RC5-Fernbedienung Config Pind.2 = Input Config Rc5 = Pind.2 'we use 2 Servos with 10 uS resolution(steps) Config Servos = 2 , Servo1 = Portd.5 , Servo2 = Portd.4 , Reload = 10 'finally we must turn on the global interrupt 'Enable Interrupts Print "#######################################################################" Print "Programmstart:" 'Konstanten für Tastenbelegung Fernbedienung Const T_ahead1 = 2 Const T_ahead2 = 130 Const T_back1 = 8 Const T_back2 = 136 Const T_left1 = 4 Const T_left2 = 132 Const T_right1 = 6 Const T_right2 = 134 Const T_rotleft1 = 1 Const T_rotleft2 = 129 Const T_rotright1 = 3 Const T_rotright2 = 131 Const T_stop1 = 5 Const T_stop2 = 133 Const T_speedlow1 = 0 Const T_speedlow2 = 128 Const T_slower1 = 7 Const T_slower2 = 135 Const T_faster1 = 9 Const T_faster2 = 137 Const T_off1 = 45 Const T_off2 = 173 ' Konstanten für Servo Ansteuerung 'links Stillstand = 56 portd.5 'rechts Stillstand = 59 Portd.4 Const Loff = 56 Const Lfor = 100 Const Lback = 0 Const Roff = 59 Const Rfor = 0 Const Rback = 100 Dim Adress As Byte , Command As Byte Gosub _init Wait 1 Gosub _init Print "Programmstart:" '############################################################################### Do Getrc5(adress , Command) Waitms 50 Print Command 'Stop If Command = T_stop1 Then Print "Stop" Elseif Command = T_stop2 Then Print "Stop" 'Vor Elseif Command = T_ahead1 Then Print "Vor" Elseif Command = T_ahead2 Then Print "Vor" 'zurück Elseif Command = T_back1 Then Print "Zurück" Elseif Command = T_back2 Then Print "Zurück" 'links Elseif Command = T_left1 Then Print "Links" Elseif Command = T_left2 Then Print "Links" ' Gosub F_lmotoff 'rechts Elseif Command = T_right1 Then Print "Rechts" Elseif Command = T_right2 Then Print "Rechts" 'rotate links Elseif Command = T_rotleft1 Then Print "Rotate Links" Elseif Command = T_rotleft2 Then Print "Rotate Links" 'rotate rechts Elseif Command = T_rotright1 Then Print "Rotate Rechts" Elseif Command = T_rotright2 Then Print "Rotate Rechts" End If Waitms 50 Loop '############################################################################### _init: Gosub _off Return _off: Servo(1) = Loff Servo(2) = Roff Print "Motoren stopp" Return _for: Servo(1) = Lfor Servo(2) = Rfor Print "fahre vorwaerts" Return _left: Servo(1) = Loff Servo(2) = Rfor Print "fahre links" Return _right: Servo(1) = Lfor Servo(2) = Roff Print "fahre rechts" Return _back: Servo(1) = Lback Servo(2) = Rback Print "fahre rueckwaerts" Return _rotleft: Servo(1) = Lfor Servo(2) = Rback Print "rotiere links" Return _rotright: Servo(1) = Lback Servo(2) = Rfor Print "rotiere rechts" Return Ende: 'Do Print "Programmende" 'Loop End







Zitieren
Lesezeichen