www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software Lösung für eine Zeitschleife


Autor: Dominik F. (dominik1202)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich soll eine Software Lösung für eine Zeitschleife mit einer 
Verzögerungszeit von 160us entwerfen. Der MC hat eine TF von 8MHz

Wie sieht dazu die Lösung auf?

Ich habe da schon die Taktrate berechnet, die ist 1280, aber ich weiss 
einfach nicht wie ich den Assembler schreiben soll...

Gruß und Danke im Vorraus!
Dominik

Autor: BT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für welchen controller?
für einen AVR könnte ich mal meinen Codewizard im Workpad bemühen ;-)

Autor: BT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, naja scheint ja doch nicht so wichtig zu sein... also hier mal ein 
beispiel für ne simple warteroutine

;--------------------------------------------------------------------
; Prozessor : ATmega16
; Takt : 8000000 Hz
; Datum : 19.11.2006
;--------------------------------------------------------------------
; created by myAVR-CodeWizard
;--------------------------------------------------------------------
; Warte-Routine für 16 µs
; die Routine wartet inclusive Aufruf 15,88 µs
;--------------------------------------------------------------------
myWait_16us:
   push   r16
   ldi   r16,1
myWait_16us_3:
   push   r16
   ldi   r16,1
myWait_16us_2:
   push   r16
   ldi   r16,34
myWait_16us_1:
   dec   r16
   brne   myWait_16us_1
   pop   r16
   dec   r16
   brne   myWait_16us_2
   pop   r16
   dec   r16
   brne   myWait_16us_3
   pop   r16
   ret
;--------------------------------------------------------------------


cu BT

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das schöne am AVR ist,das sogut wie jeder Befehl genau einen Takt zur 
Ausführung benötigt.Das ist bei etlichen anderen Mikrocontrollern nicht 
so.Da würde dann z.B. der Comparebefehl 2 Takte benötigen während ein 
Speicherzugriff 3 Takte benötigt.Das macht es schwer,die genaue Dauer 
einer Befehlssequenz vorher zu berechnen.

Um nun die Warteschleife zu schreiben,benötigt man nun also folgende 
Dinge:

- 2  Allzweckregister (8 Bit besitzen nur einen Wertebereich von 
0..255):
  R16 und R17
- den Inkrementbefehl  inc  (inc R16 bedeutet R16 = R16+1)
- einen Befehl um unseren Allzweckregisterinhalt mit einem konstanten 
Wert zu vergleichen: cpi
- und zuguter letzte einen bedingten Sprung: breq (branch equal,springe 
wenn gleich)

Damit lassen sich dann 2 inneinander verschachtelte Schleifen erzeugen:

                  R16 = 0
äussere Schleife: R17 = 0
innere schleife : R17 = R17+1
                  Ist R17 < Konstante1?
                  wenn ja -> springe innere Schleife
                  R16 = R16+1
                  ist R16 < Konstante2?
                  wenn ja -> springe äussere Schleife

Die Konstante berechnen und das ganze aus dem Pseudocode in Assembly 
überführen musst du schon selber.Mit hoher Wahrscheinlichkeit wirst du 
keine 2 Konstanten finden,die genau zu 1280 Takten führen.Da nimmt man 
dann den nächst kleinere Wert und schreibt füllt unter der Schleife den 
Code mit 'nop'-Befehlen auf.Die dauern exakt einen Takt und tun exakt 
garnichts.

Einfacher ist diese Warteschleife übrigens mit einem Timer zu 
realisieren.Den initialisiert man einmal und kann eine sehr exakte 
Warteschleife durch das pollen (periodisches abfragen) eines Flags 
realisieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.