Forum: Mikrocontroller und Digitale Elektronik Sinus: Maximum und Minimum einer Perdiode


von Alexus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

habe folgendes Problem:

Ich habe eine Analoge Sinuskurve, die in 10Bit digital umgewandelt wird. 
Die Abtastungen sind ca. alle 30ms.
Die 10Bit sind aufgeteilt in P5 (bit 9, 8) und P4 (bit 7-0).
Nebenbei läuft ein Rechtecksignal. Das toggelt immer an der Grenz zu 
2,5V (die Hälfte).

Ich habe nun folgende kleine Programme geschrieben die jeweils den 
kleinsten Wert von P4 und P5 ermitteln.

Ich brauche nun eine Ausgabe, die immer nur das neuste Maxima bzw Minima 
anzeigt. Da die Kurve ja periodisch weiter läuft...

Steh grad auf dem Schlauf und weiß nicht wie ich das realisieren kann. 
Hat jemand eine Idee/ Vorlage/ Fertiges UP?

Viele Grüße




Aufruf aus der ISR (timer0)

timer0:
.........
.....
..
  Wandlung usw in P5, P4   (Beispiel: 11 (P5) 1100 1010 (P4))

  call kleinste_P5_in_R2  ; Vorheriger Wert R5 wird mit P5 verglichen
  call kleinste_P4_in_R3   ; Vorheriger Wert R4 wird mit P4 verglichen

  mov R5, P5
  mov R4, P4
...
...
.....

ret





; +++ Findet kleinsten Wert von P5 und schreibt diesen in R2 +++
kleinste_P5_in_R2:
  mov A, R5
    cjne A, P5, ungleich_P5      ; R2 wird mit P5 verglichen
    sjmp R5_KlGl_P5           ; C=0, R2=P5
ungleich_P5: jc   R5_KlGl_P5         ; C=1, R2<P5
    jmp R5_Gr_P5                  ; C=0, R2>P5
R5_KlGl_P5:                       ; R2<=8
  ret
R5_Gr_P5:
  mov r2, P5
  ret


; +++ Findet kleinsten Wert von P4 und schreibt diesen in R3 +++
kleinste_P4_in_R3:
  mov A, R4
    cjne A, P4, ungleich_P4      ; R2 wird mit P5 verglichen
    sjmp R4_KlGl_P4           ; C=0, R2=P5
ungleich_P4: jc   R4_KlGl_P4         ; C=1, R2<P5
    jmp R4_Gr_P4                  ; C=0, R2>P5
R4_KlGl_P4:                       ; R2<=8
  ret
R4_Gr_P4:
  mov r3, P4
  ret

von Karl H. (kbuchegg)


Lesenswert?

* Wenn P5 kleiner als dein vorheriges kleinstes_P5 ist,
  dann hast du auf jeden Fall ein neues Minimum:
    P5 als kleinstes_P5    und
    P4 als kleinstes_P4
  merken

* Wenn P5 gleich deinem vorhergehenden kleinstes_P5 ist,
  dann hängt es alleine von P4 ab, ob ein neues Minimum
  vorliegt.
  Ist P4 kleiner als kleinstes_P4, dann gibt es ein neues
  Minimum:
      P4 als kleinstes_P4
  merken

* Ist P5 schon größer als das vorhergehende kleinstes_P5
  dann kann das kein neues Minimum sein.

Bsp im Dezimalsystem:
Dein bisheriger kleinster Wert sei 3 4  (alias 34, die 3 sei
in kleinstem_P5 und die 4 in kleinstem_P4)

Jetzt stellt sich die Frage, ob  2 7  (alies 27) kleiner
ist. ( 2 sei in P5, 7 in P4)

Da 2 kleiner als 3 ist, hast du mit Sicherheit eine kleiner
Zahl gefunden.

Was ist mit    3 2?      (bisheriges kleinstes wieder 3 4)
Die P5-er Stellen vergleichen, ergibt das 3 gleich 3 ist.
Also hängt es von den P4-Stellen ab: 2 ist kleiner als 4
-> neuer kleinster Wert.

Was ist mit    3 8?
Die P5-Stellen vergleichen ergibt wieder: 3 gleich 3.
Also werden die P4 Stellen untersucht. 8 ist aber nicht kleiner
als 4. Also kann 3 8  nicht kleiner als 3 4 sein.

Was ist mit    5 9?
P5-Stellen vergleichen: Da 5 nicht kleiner als 3 ist, braucht man
die P4-Stellen nicht mehr vergleichen. Die Zahl 5 9 kann nicht
kleiner als 3 4 sein.


Die kleinste Zahl in all deinen P4-Werten zu suchen ist zwar eine
nette Übung, aber völlig sinnlos. Du kannst das Minimum nur dann finden,
wenn du an jedem Messpunkt den zugehörigen P5+P4 Wert als 16-Bit
Zahl auffasst und mit dieser Kombination aus P5+P4 Wert deine
Minimumsuche veranstaltest.

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.