- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Zeitschleife Mikrocontroller

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Dir ist aber schon klar das in der Wartezeit das komplette Programm steht. Es sind weder Eingaben noch Ausgaben möglich.
    Für diese Aufgaben sind die Timer vorgesehen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Dir ist aber schon klar das in der Wartezeit das komplette Programm steht. Es sind weder Eingaben noch Ausgaben möglich.
    Für diese Aufgaben sind die Timer vorgesehen.
    Klares "Jein" dazu.
    Das kommt auf den Anwendungsfall an. Ich persönlich finde es grausam, ein Konstrukt über einen Timer zu entwerfen, dass mir z.B. das Blinken einer einfachen Betriebs-LED im Sekundentakt erlaubt (am Blinken über die Wait-Routine siehst Du sogar, wie Deine IRQ-Auslastung ist).
    Alles in IRQs auzulagern, während das Hauptprogramm sich bei
    Main: jmp Main
    in der Nase bohrt, ist auch Kappes.

    Timer verwendest Du, wenn Du ein Timing (nach oben und nach unten, z.B. UART-Emulation) einhalten willst. Die Verwendung von einfachen Warteschleifen zur Einhaltung von Mindestzeiten (z.B. Tastenentprellen, I2C-Emulation,...) ist meiner Ansicht nach legal.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Das ist wohl etwas Ansichtssache. Ich verwende wait-Routinen ausschließlich nur vor dem main um zu warten bis externe Geräte oder Bauteile Ready sind oder um auf dem Display Programmname und Versionsnummer anzuzeigen.
    Innerhalb der main gibt es nur Timer, wenn es ein ernst gemeintes Programm ist. Ein "blinky" zählt nicht dazu.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Kein Gerücht, siehe Hubert G.:
    Noch 2014 hat Hubert G. bei einem LED-Problem geholfen, siehe https://www.roboternetz.de/community...ight=Hubert+G.
    Damals hielt er die Verwendung der _delay_ms-Funktion in der Main für legitim,
    Heute schließt er dies quasi aus.
    Der hat sich weiterentwickelt.


    Übrigens: Lass mich bitte nicht dumm sterben: Wo steht diese Norm? Ist das schon ISO-zertifiziert? Ich lerne gern.

  6. #6
    Robobionic
    Gast
    Zitat Zitat von Holomino Beitrag anzeigen
    Kein Gerücht, siehe Hubert G.:
    Noch 2014 hat Hubert G. bei einem LED-Problem geholfen, siehe https://www.roboternetz.de/community...ight=Hubert+G.
    Damals hielt er die Verwendung der _delay_ms-Funktion in der Main für legitim,
    Heute schließt er dies quasi aus.
    Der hat sich weiterentwickelt.
    Ich wüsste nicht weshalb solche Beispiele der Maßstab für Anfänger sein sollten.

    Zitat Zitat von Holomino
    Übrigens: Lass mich bitte nicht dumm sterben: Wo steht diese Norm? Ist das schon ISO-zertifiziert? Ich lerne gern.
    Ich bezweifle das Du gerne lernst, Du hast sie selbst erwähnt.

    Zitat Zitat von Holomino
    Eher die Erfahrung aus der Praxis, die zeigt, dass auch von Anfängern zusammengefummelte Lösungen neben der Norm exzellent laufen können

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Zitat Zitat von Holomino Beitrag anzeigen
    Kein Gerücht, siehe Hubert G.:
    Noch 2014 hat Hubert G. bei einem LED-Problem geholfen, siehe https://www.roboternetz.de/community...ight=Hubert+G.
    Damals hielt er die Verwendung der _delay_ms-Funktion in der Main für legitim,
    Heute schließt er dies quasi aus.
    Der hat sich weiterentwickelt.
    Ich habe allerdings auch geschrieben:
    Innerhalb der main gibt es nur Timer, wenn es ein ernst gemeintes Programm ist. Ein "blinky" zählt nicht dazu.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Zu diesen Diskussionen fällt mir immer nur auf (und das ist meine Erfahrung):
    - "Ich finde...", "meiner Meinung nach ...", " Für mich"... sind Meinungsäußerungen.
    - "...ist unprofessionell..", "..nimmt man.." sind dargestellte Fakten.
    Bringt man Euch diese Art von Diskussionskultur gar nicht mehr bei?
    Über Meinungen kann man sich nicht streiten. Fakten kann man widerlegen.

    Ich für meinen Teil verwende Wait-Funktionen immer noch gerne, insbesondere zu Diagnosezwecken bei der Inbetriebnahme. Da kann man wunderschön schnell kleine Testroutine schreiben, die einzelnen Signale durchpingen. Wenn ich wissen will, ob der benachbarte I2C-Bus Transienten auf dem AD-Eingang erzeugt, gebe ich mit Waitern in drei Minuten proggen oszilloskoptaugliche Rechtecke auf dem zu testenden Port aus.

    Und wenn ich ein Programm mit einfachem Ablauf schreibe (z.B. polle an I2C, sende als UART), hindert mich nichts, aber auch gar nichts daran, die ganze Sache sequenziell mit zwei emulierten Schnittstellen auf dem Tiny45 mit Wait-Routinen herunterzuproggen.
    Solange ich da auf beiden Schnittstellen Master bin und nichts asynchrones zu befürchten habe, muss ich das für meinen Teil nicht haben. Es würde mit Timern nicht besser funktionieren.

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Holomino Beitrag anzeigen
    .. Klares "Jein" .. während das Hauptprogramm sich bei ... Main: jmp Main ... in der Nase bohrt, ist auch Kappes ...
    Ein klares, hartes, umfassendes Urteil! Nur, obs stimmt? Ich weiß nicht ob das nur Ansichtssache oder (auch) Programmierstil ist, aber ich kann Hubert.G nur uneingeschränkt beipflichten.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Ein klares, hartes, umfassendes Urteil! Nur, obs stimmt? Ich weiß nicht ob das nur Ansichtssache oder (auch) Programmierstil ist, aber ich kann Hubert.G nur uneingeschränkt beipflichten.

    Das ist weder ein klares noch ein hartes Urteil. Eher die Erfahrung aus der Praxis, die zeigt, dass auch von Anfängern zusammengefummelte Lösungen neben der Norm exzellent laufen können, dass man Anfängern ihre Lernkurve und die verbundenen Fehler zugestehen muss. Die Ansprüche steigen mit der Zeit automatisch, damit die Wissbegierde und der Kenntnisstand. Dazwischen aber müssen erst einmal spielerische Erfolgserlebnisse her.

    Schau mal im AVR-Tutorial bei Mikrocontroller.net (oder in Dein altes AVR-Assembler-Buch im Regal), in welchem Kapitel Timer angesprochen werden. Über den didaktischen Sinn, diese Infos in die zweite Hälfte des Lehrinhaltes zu schieben, mag ich mich mit Dir nicht streiten (und Du sicherlich auch nicht mit den Autoren).

Seite 1 von 2 12 LetzteLetzte

Ä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
  •  

Labornetzteil AliExpress