- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 30

Thema: Zeitschleife Mikrocontroller

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Die Verwendung des dritten Registers ist eine Ressourcenverschwendung. Zu Anfang denkt man sich: "Ich hab doch 32 davon (R0..31)". Dann stellt man fest, man kann nur mit den oberen 16 alle Assemblerbefehle nutzen und eigentlich gehen davon auch noch die obersten 6 Register noch einmal ab, weil nur damit die 16-Bit-Adressierungen über X, Y und Z möglich sind.
    Was bleibt, sind magere 10 Registerchen zur vollen Verwendung.

    Zum Abschluss und zum Gedanken anregen:
    Wenn es Dir gelingt, eine 1Mikrosekunde-Warteschleife zu verfassen
    Wait1u:
    //Einsprung 3 Takte über rcall
    nop //10*1
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    ret //Rücksprung 3 Takte
    //16 Takte


    Dann kannst Du doch auch eine Routine über 100 Mikrosekunden verfassen, in der Du die Wait1u-Routine wiederverwendest:
    Wait100u:
    //3 Takte Einsprung über rcall
    push r16 //1
    ldi r16, 84 //1
    Wait100u_Loop:
    rcall Wait1u //16 Takte
    dec r16 //1
    brne Wait100u_Loop //2
    Wait100u_End:
    pop r16 //1
    ret //3
    //19*84 + 9 = 1605


    Dann kannst Du auch nach der gleichen Form eine Wait1m schreiben
    Wait1m:
    //3 Takte Einsprung über rcall
    push r16 //1
    ldi r16, 10 //1
    Wait1m_Loop:
    rcall Wait100u //1605 Takte
    dec r16 //1
    brne Wait1m_Loop //2
    Wait1m_End:
    pop r16 //1
    ret //3
    //1608*10 + 9 = 16089 Takte


    Und ganz zum Schluss
    Wait5m:
    //3 Takte Einsprung über rcall
    push r16 //1
    ldi r16, 5 //1
    Wait5m_Loop:
    rcall Wait1m //16089 Takte
    dec r16 //1
    brne Wait5m_Loop //2
    Wait5m_End:
    pop r16 //1
    ret //3
    //16089*5 + 9 = 80454 Takte

    Diese Routinen (ich hab's jetzt hier im Editor geschrieben, mag noch irgendwo ein Fehlerchen drin sein) sind erweiterbar (Du kannst Dich damit bis in den Stundenbereich hochkaskadieren), anpassbar (Du musst nur die unterste Funktion an die Frequenz anpassen) und einfach wartbar (die Wartefunktionen haben immer die gleiche Form).
    Aber das Wichtigste: das einzige verwendete Register r16 ist in jedem Fall save, weil es in jeder Aufrufebene gepusht und gepoppt wird. Du kannst es also vor dem Aufruf einer der o.g. Wartefunktionen mit einem Wert beschreiben und nach dem Aufruf immer noch sicher sein, dass in r16 noch das steht, was Du dort hineingeschrieben hast.
    Geändert von Holomino (15.08.2015 um 00:08 Uhr)

Ähnliche Themen

  1. Zeitschleife Mikrocontroller
    Von sisi im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 4
    Letzter Beitrag: 08.10.2015, 20:44
  2. [ERLEDIGT] Zeitschleife zu kurz....ATTiny2313
    Von oderlachs im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 10.03.2013, 15:10
  3. Taster mit Zeitschleife
    Von bnitram im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 28.05.2010, 18:01
  4. Zeitschleife
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 07.06.2006, 17:32
  5. Zeitschleife
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 01.06.2006, 14:34

Berechtigungen

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

12V Akku bauen