Forum: Projekte & Code 16bit Limiter in assembler ATMEGA8


von Stefan (Gast)


Lesenswert?

Hallo Leute,
anbei ein Limiter für 16bit Werte (atmega8)
Ist das effektiv oder geht es besser?
Kommentare erwünscht!

;--------------------------------------------------------
; Limitieren in r19:r18 auf +/-450
;
  ldi  r16,lo8(450)  ; pos Limit definieren
  ldi  r17,hi8(450)
  cp  r18,r16       ; Vergleiche
  cpc  r19,r17
  brmi  lim2
  mov  r18,r16   ; ggf. limit in r19:r18 setzen
  mov  r19,r17
   rjmp  ausgabe2
lim2:
  com  r16       ; Negation des Limits in r17:r16
  com  r17
  subi  r16,0xFF
  sbci  r17,0xFF
  cp  r18,r16   ; Vergleiche
  cpc  r19,r17
  brpl  ausgabe2
  mov  r18,r16   ; ggf. neg. Limit in r19:r18 setzen
  mov  r19,r17
ausgabe2:

;-----------------------------------------------------------------


Gruß
Stefan

von Gast (Gast)


Lesenswert?

Kannst du mal ganz kurz erläutern für was man das braucht?
(Bin in dem Gebiet eher Anfänger und immer offen für neue "Techniken")

von Stefan (Gast)


Lesenswert?

Sowas wird benötigt um z.B. Stellgrößen in einem Regelkreis sowohl 
positiv als auch negativ auf einen bestimmten Betrag zu begrenzen.

Ich verwende das hier um bei der Ansteurung eines Servos den Maximalweg 
zu begrenzen.

Eine weitere Anwendung ist z.B. die Limitierung des Integral-Anteils bei 
einem PID-Regler.
..........

von Wolfram Q. (quehl)


Lesenswert?

sieh Dir mal die Anweisung NEG an, statt COM und SUB.

mfg

von Stefan (Gast)


Lesenswert?

Für 8-Bit Operation hätte ich schon NEG (2-complement) verwendet, aber 
für 16bit muß ich das wohl byteweise machen. Daher zweimal COM in 
Verbindung mit SUBI und SBCI.

Trotzdem Danke
Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.