- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 16

Thema: Code Optimierung für Interrupt möglich?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Da gibt es 2 Ansatzpunkte zur Optimierung:
    1. für Count könnte man im wesentlichen eine 8 Bit Variable nutzen, un die lange Verzögerung nach den Servo Pulsen seperat machen, z.B. indem man die Interrupts seltener macht. Der Zugriff auf das Feld könnte ggf. auch noch etwas schneller gehen, wenn man einen Pointer benutzt. Ob das viel bringt weiss ich aber nicht. Wenn es unbedingt sein muss gäbe es noch Assembler - gerade für Software PWM ist da ein recht großer Geschwindigkeitsvorteil drin, vor allem wenn die IO Ports günstig liegen.

    2. Man macht die Servo Pulse nicht alle gleichzeitig, sondern versetzt nacheinander. Die Verzögerung kann man dann über das Timerregister einstellen, nicht über das Zählen von Interrupts. Allerdings ist man damit auf etwa 10 Servos beschränkt. Die 2 verbleibenden Servos könnte man per Hardware PWM (16 Bit) ansteuern. Als etwa komplizierte Alternative kann man auch immer je 2 Pulse parallel bearbeiten, um rund 1 ms versetzt. Das ist aber nicht so ganz einfach.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Was an Optimierungspotential vorhanden ist, lässt sich leider schlecht beurteilen da die Quelle wegen der zig ... nicht übersetzbar ist.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    Danke, das war mir eine große Hilfe:

    count habe ich zumindest als short (16bit) deklartiert und die ausgänge sozusagen kaskadiert (per if Abfrage) - so, dass die Beine separtiert nacheinander abgearbeitet werden - jetzt bin ich unterhalb von 2µS während der Abarbeitung.

    Übrigens, nach langem suchen hab ich die Einstellung für den Debugger gefunden: bei Umstellung von 4Mhz auf 16Mhz viertelt sich die Zeit!


    [EDIT:]

    bei den "..." sind nur wierholungen für die deklarierung aller Servo-Ports sowie nicht verwendete Funktionen.
    Meine Projekte auf Youtube

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Servo Pulse nacheinander zu erzeugen hat vor allem den Vorteil, das man gar keinen Interrupt in kurzem Abstand braucht, sonder einfach den Timer so einstellt, das der nächste Interrupts kommt, wenn der aktuelle Puls zu Ende ist, und mit dem nächsten Puls begonnen werden kann. Die Auflösung wird dann nur noch vom Timer und der Interrupts Latenz bestimmt. Man kommt so auch auf unter 1 µs Auflösung, wenn man es will.

Ähnliche Themen

  1. [ERLEDIGT] Fehler im Code? Optimierung nicht optimal? überfordert!
    Von erik_wolfram im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 30.03.2011, 17:27
  2. Software Uart, Interrupt möglich?
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 07.03.2011, 16:53
  3. Code Optimierung
    Von Siro im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 19.08.2010, 22:45
  4. Interrupt & Debounce möglich?
    Von Wasi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 04.11.2005, 14:02
  5. Code für Interrupt?
    Von Felixx87 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 22.09.2005, 16:41

Berechtigungen

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

12V Akku bauen