-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Problem mit der Streckenberechnung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.05.2007
    Ort
    Breisach
    Alter
    26
    Beiträge
    72

    Problem mit der Streckenberechnung

    Anzeige

    Hi,

    Ich hab ein Problem mit der Streckenberechnung an meinem Bot bzw. ich verstehe etwas nicht. Gehen wir mal davon aus ich schreibe
    Code:
    Dim Zahl as Integer
    
    Do 
    
    Portb.0 = 1
    portb.1 = 1  'das sind die zwei Motoren
    waitms 600
    
    If Pinb.4 = 1 then 'Das ist der Taster zur Streckenberechnung 
     gosub Zaehlen
    End if
    
    If Pind.2 = 1 then 'Noch ein Taster
     gosub Auswertung
    End if
    
    loop
    
    zaehlen:
    
    Zahl = Zahl + 1  'hier wird der Wert addiert
    return
    
    Auswertung:
    
    Print "Der Roboter hat eine Strecke von " ;Zahl; "cm zurückgelegt
    waitms 500
    return
    Das ist jetz natürlich kein realistisches Programm, ich habe es mir als Beispiel schnell ausgedacht und der einfacheit halber alle Infos wie etwa $regfile und so weiter weggelassen.. Jetz aber zu meiner Frage:

    So wie das Programm jetzt ist, überprüft der µC erst nach dem waitms ob der Taster genau in diesem Moment gedrückt wird... Ich will aber, das er das während desd waitms Befehls macht. Ich weiß das ein µC nur einen Befehl nach dem anderen Abbarbeiten kann aber wie habt ihr das (in meinen augen große Problem) gelöst?

    Vielen Dank schonmal im Vorraus für eure Antworten.

    Gruß, Felix
    - Status meines ersten Bot BUG 1.0 : Mit dem US-Sensor rumärgern
    - Meine Homepage

  2. #2
    Neuer Benutzer Öfters hier Avatar von TobiWan
    Registriert seit
    17.12.2006
    Ort
    Friedrichshafen
    Alter
    29
    Beiträge
    15
    Schau dir mal in der Bascom Hilfe den Teil über Timer/Counter an

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    24.05.2007
    Ort
    Breisach
    Alter
    26
    Beiträge
    72
    Oh, manchmal hat man einfach ne vorm Kopf . Aber in Bascom Hilfe ist das extrem verwirrend, keine Angaben was man wie einzustellen hat und kein Beispiel. Im RN-Wissensbereich ist das aber sehr gut erklärt, vielen Dank Roberto (Der Autor^^)


    EDIT:

    Hallo nochmal, ich hab jetzt aber doch ein Problem: Ich habe folgendes Programm in meinen Robby reingeschrieben:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portc.0 = Output
    
    Config Pind.2 = Input
    
    Config Timer1 = Timer , Prescale = 256
    On Timer1 Isr_von_t1
    Enable Interrupts
    Timer1 = 34285
    
    Dim X As Byte
    
    
    Main:
    
    Do
    
    
    If Pind.2 = 1 Then                                          'Wenn ein Taster gedrückt wird
    
    Enable Timer1                                               'wird der Timer angeschalten
    Portc.0 = 0
    Portb.0 = 1                                                 'Die LED soll low bleiben
    Portb.1 = 1                                                 'die beiden Motoren gegen an
    End If
    
    
    If X = 5 Then
     Gosub Stopp                                                'wenn x = 5 dann zum Unterprogramm stopp
    End If
    
    
    Loop
    
    
    Isr_von_t1:                                                 'Unterprogramm wird aufgerufen wenn T1 overflow hat
    
     X = X + 1                                                  'zu x wird eins addiert
     Timer1 = 34285                                             'der timer soll wieder bei 34258 anfangen zu zählen
     Toggle Portc.0                                             'Die LED wird umgeschalten
     Return                                                     'Return in die Main-schleife
    
    Stopp:
    
     Stop Timer1                                              'der timer wird gestoppt
     X = 0                                                      'X wird auf 0 zurückgesetzt
     Portb.0 = 0                                                'die beiden Motoren gegen aus
     Portb.1 = 0
     Gosub Main                                                 'Und man kehrt in das Main-Programm zurück
    Dann drücke ich den Taster: Alles wunderbar es funktioniert und nach 5 Sekunden stehen die Motoren wieder still. Wenn ich dann jedoch noch mal die Taste drücke dann laufen die Motoren an aber weder die LED blinkt noch stoppen die Motoren nach 5 Sekunden sondern laufen Munter weiter... Findet jemand einen Fehler in meinem Programm?? Also ich finde keinen...

    Gruß, Felix
    - Status meines ersten Bot BUG 1.0 : Mit dem US-Sensor rumärgern
    - Meine Homepage

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    24.05.2007
    Ort
    Breisach
    Alter
    26
    Beiträge
    72
    Kann mir denn niemand hekfen? Ich weiß echt nicht weiter, keine Ahnung an was es liegt, dass die Motoren dann dauerhaft laufen und die LED gar nichts mehr macht, hier noch einmal ne Beschreibung was das Programm machen soll.

    Der Timer wird aktiviert, wenn Der Taster (Pind.2) gedrückt wird. Nachdem der Timer aktiviert ist, laufen die Motoren an. Sobald der Timer "überläuft" springt das Programm zum Unterprogramm des Timers, dort wird zu der Variablen x eine 1 addiert, dann soll der Timer wieder bei 34285 anfangen zu zählen, und durch return kehrt es wieder zurück in das Hauptprogramm. Dort steht die Ifthen-verzweigung, sobald also X den wert 5 errecht spring das Programm in das Unterprogramm stopp. Dort wird der Timer gestoppt, Die Motoren gehen aus, danach springt das Programm wieder zurück in das Hauptprogramm. WEnn man jetz wieder den Taster drückt müsste das Programm eigentlich wieder genauso ablaufen, das tut es aber nicht! Beide Motoren laufen an, aber die LED geht nicht an und die Motoren gehen auch nicht mehr aus. Weiß jemand an was das liegt?? Hängt sich das Programm durch irgendein Programmierfehler vlt. auf?
    - Status meines ersten Bot BUG 1.0 : Mit dem US-Sensor rumärgern
    - Meine Homepage

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Du musst natürlich auch x wieder auf 0 setzen damit es wieder auf 5 kommen kann.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    24.05.2007
    Ort
    Breisach
    Alter
    26
    Beiträge
    72
    Ist es doch, schau mal ins unterprogramm Stopp da steht X= 0... oder muss das an ne andere Stelle???
    - Status meines ersten Bot BUG 1.0 : Mit dem US-Sensor rumärgern
    - Meine Homepage

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    Hi, also ich hab jetzt den code nur überflogen aber müsste in deiner if-Verzweigung nicht start timer stehen anstatt enable timer. Soweit ich weiß ist enable global zum aktivieren des timers generell. probier mal start.

    mfg milkbubi

    edit: also enable müsste dann trotzdem noch vor deine main-schleife

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    24.05.2007
    Ort
    Breisach
    Alter
    26
    Beiträge
    72
    Vielen Dank, jetzt funktioniert es einwandfrei! \/

    Gruß Felix
    - Status meines ersten Bot BUG 1.0 : Mit dem US-Sensor rumärgern
    - Meine Homepage

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    Super, das freut mich für dich.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Sorry, hatte ich übersehen. Ich habe mich auf den QC im ersten Post eingeschossen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •