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
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")
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. ..........
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.