-
        

Ergebnis 1 bis 8 von 8

Thema: Mega 32 2 sachen gleichzeitig bearbeiten

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.06.2009
    Ort
    Hamburg
    Alter
    24
    Beiträge
    38

    Mega 32 2 sachen gleichzeitig bearbeiten

    Anzeige

    Hallo,

    Ich hab eine Frage...
    Ich hab ein Roboter der soll die Bumper und Hall Sensoren abfragen.

    Wenn aber ein Bumper auslöst geht er ja in die ausweich routine und kann die Hall Sensoren nicht mehr abfragen...

    Wie kann ich jetzt beides gleichzeitig machen oder geht das überhaupt?

    MFG ARB1

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    z.B. indem du per Interrupt auf die Bumper reagierst.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    ich würd mal sagen grundsätzlicher programmfehler wenn dieses in einer routine länger hängen bleibt.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.897
    Gleichzeitig geht bei einem ATMEGA Controller nichts, aber schnell hintereinander schon.

    Du könntest die beiden Geberabfragen in einen Interrupt verpacken und Auswertung im Hauptprogramm machen lassen.

    Beispiel:
    Ein Bumper wurde aktiv. Der "Bumper" Interrupt wir ausgelöst und schaltet die Motoren deines Bots ab. Im Interrupt wird dann noch festgestellt welcher Bumper aktiv war und ein entsprechendes Flag ( Bitvariable ) wird gesetzt.
    Dann wird der Interrupt verlassen.

    Im Hauptprogramm werden ständig diese Flags ( Bitvariablen ) abgefragt und entsprechend darauf reagiert.

    Die Hall Sensoren ( Drehzahlmessung ?? ) lösen dann ebenfalls einen Interrupt aus und geben die ermittelten Werte in entsprechende Pufferspeicher. Zusätzlich kann man da noch ein Flag einbauen, das es neue Werte gibt, die dann im Hauptprogramm nach Verarbeitung wieder gelöscht werden.

    Im Hauptprogramm werden dann diese Pufferspeicher ausgelesen und die benötigten Werte berechnet, sowie die Flags gelöscht.

    Wichtig ist, das die Interruptroutinen möglichst kurz sind.
    Zeitschleifen oder umfangreiche Recheoperationen ( Multiplikationen, Divisionen ) sollte man vermeiden.

    Währende eines laufenden Interrupts kann kein weiterer Interrupt ausgeführt werden ( Es geht doch, aber nur mit Tricks ).

    Ein anstehender Interrupt geht aber trotzdem nicht verloren, weil das entsprechende Flag Register ja aktiviert wurde.
    2 gleichzeitig anstehende Interrupts werden einfach nacheinander abgearbeitet.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von Vitis
    ich würd mal sagen grundsätzlicher programmfehler
    SOOO Grundsätzlich ist das nicht (wirklich), 2 Dinge gleichzeitig
    gibt es nicht (wirklich). Der Prozessor arbeitet sein Programm
    Befehl für Befehl nacheinander ab, kann also zwangsläufig nicht
    gleichzeitig "hier oder dort" Werkeln....da ämdert auch ein IRQ
    nichts dran. Außer mehrere Kerne mit gemeinsamen Takt natürlich.

    Gruß Richard

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wirklich gleichzeitig geht nur sehr eingeschränkt für spezielle von der HW unterstützte funktionen. Es gehen aber 2 oder mehr Dinge fast gleichzeitig, so das es bei dem Fahrzeug nicht weiter ausfällt. Oft geht das z.B. mit interrupts. Wie man da genau macht, kann man so noch nicht sagen. Da ist die Problemstellung zu ungenau beschrieben.

    Hier leigt der Fehler vermutlich schon in der Planungsphase. Eine exacte Beschreibung der Anforderungen ist dabei oft schon die halbe Lösung.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    12.06.2009
    Ort
    Hamburg
    Alter
    24
    Beiträge
    38
    Hallo,

    Ok danke schon mal.

    Ja Die Hall Sensoren sind für die Drehzahlmessung da.
    Also ich hab das immer so gemacht (ich bin Anfänger ) :

    Code:
     
    Do
    
    '-----Zufalszahl-----
    If Zufalszeit > 1500 Then
    Zufalszeit = 500
    End If
    
    Zufalszeit = Zufalszeit + 10
    
    '---Bumper Links---
    If Pina.0 = 1 Then
    Sound Portd.7 , 400 , 400
    Call Zuruck
    Waitms 1000
    Call Stope
    Waitms 1000
    Call Rechts
    Waitms Zufalszeit
    End If
    
    '---Bumper Rechts---
    If Pina.1 = 1 Then
    Sound Portd.7 , 500 , 400
    Call Zuruck
    Waitms 1000
    Call Stope
    Waitms 1000
    Call Links
    Waitms Zufalszeit
    End If
    
    Call Forward
    
    Loop
    End
    Und da komm ich ja nicht mehr raus wenn ein bumper gedrückt wurde...

    MFG ARB1

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    So etwas wie die Drehzahlmessung bzw. das mitzählen von Umdrehungen kann man recht gut in einen Interrupt verlegen. Dazu müßte der Hallsensor aber an einem Pin sein, der auch einen Interrupt auslösen kann.

    Eine weniger gute Alternative wäre es einen Timerinterrupt zu nutzen. Damit könnt man z.B.alle 10 ms etwas Rechenzeit abzweigen. Man muß den Teil dann aber so schreiben, das man immer nur kleine Teile in eins macht.

    Ähnlich wie mit dem Timerinterupt könnte man es auch realisieren, wenn man jeweils beim warten ein Unterprogramm aufruft, das sich dann für einen kurze Zeit um die Drehzahl kümmert.

Berechtigungen

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