- Labornetzteil AliExpress         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 45

Thema: Multitasking

  1. #21
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Anzeige

    E-Bike
    Da beisst es leider aus... ich kann kein Assembler... tut mir leid...
    Gruß,
    Franz

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    und ich nicht so gut in C! hmm....
    kannst du es mir in worten aufschreiben?


    MFG
    Michael

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Also, sagen wir "merker" sei eine Globale Variable.

    Diese Timerfunktion wird Pro Sekunde einmal ausgeführt:
    TIMER-FUNKTION{
    WENN( merker ungleich 0 )Dann{ merker = 0; }Ansonsten{ merker = 1; }
    }


    Bedeutet, dass die Varible "merker" im sekundentakt 0...1....0...1 annimmt.


    Dann kann man irgendwo anders im hautpprogramm sagen:

    WENN(merker unngleich 0)Dann{ PORTA = 0xFF; }Ansonsten{ PORTA = 0x00; }


    Folglich Blinken die LEDs an PortA im Sekundentakt


    Hmm... ist es so verständlich?
    Gruß,
    Franz

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    nien nicht so richtig! sorry!

    MFG
    Michael

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    ah ich glaube habs jetzt so ungefähr kapiert!
    Ich mache 3 Timer!
    der erste soll 25us eine interrupt auslösen
    der zweite 50us
    der dritte 75 us

    MFG
    Michael

  6. #26
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Es genügt doch ein Timer... mit 25µs. Das Ereignus für 50µs führst du nur jedes 2. mal aus, das für 75µs jeder 3. mal und das für 25µs eben in jeder IRQ.
    Disclaimer: none. Sue me.

  7. #27
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    versteh dich nicht ganz sprinter!
    also alle 25us interrupt! was mache ich dann mit 50us und 75 us!!

    MFg
    Michael

  8. #28
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Stell dir vor du hast eine IRQ, die alle 25µs aufgerufen wird. Dann machst du folgendes; hier als irgendein Speudo-Code. Für 50µs geht's analog wie für die 75µs.

    Code:
    integer wert_75µs := 0
    
    BEGIN IRQ_25µs
    
       CALL job_25µs
    
       wert_75µs := wert_75µs + 1
    
       IF wert_75µs = 3 
       THEN
          wert_75µs := 0
          CALL job_75µs
       ENDIF
       
    END IRQ_25µs
    Disclaimer: none. Sue me.

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2006
    Beiträge
    153
    so ich verstehe nur assembler und nicht C! ^^

    MFG
    Michael

  10. #30
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Ein Interrupt ist eine Unterbrechung im normalen Programmablauf. Sobald ein Interrupt ausgelöst wird, springt der Controller automatisch in die passende ISR (Interrupt Service Routine). Das ist im Prinzip eine ganz normale Funktion, nur daß man die eben nicht selber aufruft sondern das dem Controller überlässt.

    Wenn du also den Timer so einstellst daß er alle 25µs überläuft, und den passenden Interrupt aktivierst, wird eben alle 25µs die ISR aufgerufen die du für den Timer-Interrupt geschrieben hast.

    Du möchtest eine LED blinken lassen? Dann schalte in der ISR eben den entsprechenden Pin um. Und wenn sie langsamer blinken soll (also 50µs an - 50µs aus etc.), dann musst du den Pin eben bei jedem zweiten Aufruf der ISR umschalten. Dazu brauchst du natürlich eine Variable die mitzählt wie oft die ISR aufgerufen wurde (also einfach bei jedem Aufruf eins hochzählen).
    So viele Treppen und so wenig Zeit!

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

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

12V Akku bauen