Forum: Mikrocontroller und Digitale Elektronik Hysterese im Programm?!


von Michael T (Gast)


Lesenswert?

Hi,
hab mir Programm zu recht gemacht das mit dem Mega8 eine Spannung
überwacht.

vergleich:
                   ldi  div0,low(400)
       ldi  div1,high(400)
       cp   erg0,div0
       cpc  erg1,div1
       brge schalten
       sbi  PORTD,LED
                   ret

schalten:
                   cbi  PORTD,LED
       ret

Doch wie bekomme ich eine Hysterese hin damit die Led im Grenzbereich
nicht flagert?

Wäre für jeden Tip dankbar.

Gruß Michael T

von Jankey (Gast)


Lesenswert?

mein Tip:

lern C

von Jankey (Gast)


Lesenswert?

naja ok will mal ned gemein werden, den Hystere Bereich erweiter, du
hast ja nen Oberen Punkt an dem dein Zustand dann wirklich "Ein" wird
und einen unteren an dem es dann "Aus" wird. Prinzip eines 1Punkt
Reglers,

von Peter D. (peda)


Lesenswert?

"lern C"

das ist aber nicht die Lösung des Problems.


Lösung:

manche 2 Vergleiche, je nachdem, ob die LED an oder aus ist.

Pseudocode:

if( LED = an ){
  if( i < min )
    LED = aus
}else{
  if( i > max )
    LED = an
}

Peter

von Sebastian (Gast)


Lesenswert?

vielleich noch ein vergleich mit... sagen wir 420

vergleich > 420 -->led an-->schalten_an
vergleich > 400 -->led an, wert speichern, vergleich mit vorwert wenn

                   DIF>10-->schalten_an  DIF<10-->nich schalten
vergleich < 400 -->led aus-->schalten_aus


nur ne idee

von mmerten (Gast)


Lesenswert?

so z.b.
vergleich:
    ldi     div0,low(400)
    ldi     div1,high(400)
    cp      erg0,div0
    cpc     erg1,div1
    brlo    led_high                ;< 399  sbi PORTD,LED
    ldi     div0,low(401)
    ldi     div1,high(401)
    cp      erg0,div0
    cpc     erg1,div1
    brsh    led_low                 ;>= 401 cbi PortD,LED
    ret

led_low:
    cbi     PORTD,LED
    ret
led_high
    sbi     PORTD,LED
    ret

von Michael T (Gast)


Lesenswert?

Danke an alle.
Hab das ganze jetzt so gelöst:

ergleich:
       sbic PORTD,LED         ;Überspring nächsten Sprungbefehl
       rjmp led_ein           ;wenn LED im PORTD aus ist
       rjmp led_aus

led_aus:
                   ldi  div0,low(400)     ;Den Wert 400 zum
       ldi  div1,high(400)    ;vergleichen laden
       cp   erg0,div0         ;und mit dem Ergebnis der
       cpc  erg1,div1         ;A/D Wandlung vergleichen
       brlo led_aus1          ;Ist Ergebnis < Led aus
                   ret                    ;zurück

led_aus1:
                   sbi  PORTD,LED         ;Led aus
       ret                    ;zurück

led_ein:
                   ldi  div0,low(404)     ;Den Wert 404 zum
                   ldi  div1,high(404)    ;vergleichen laden
       cp   erg0,div0         ;und mit dem Ergebnis der
       cpc  erg1,div1         ;A/D Wandlung vergleichen
       brsh led_ein1          ;Ist Ergebnis >= Led ein
                   ret

led_ein1:
                   cbi  PORTD,LED         ;Led ein
       ret                    ;zurück

Gruß
    Michael T

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.