PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maximal Wert ermitteln?



TobiasBlome
07.06.2008, 22:12
Hallo,
ich möchte von dem analogeingang den höchsten Wert pro sekunde an ein LCD ausgeben. (MaxWert)

gibt es da eine Funktion oder wie würdet ihr das machen?

Meine idee ist etwas umständlich :-k :

-timer für eine Sekunde laufen lassen,
-AnalogWert messen und speichern
-nächsten AnalogWert messen und mit gespeichertem Wert vergleichen
-wenn neuer wert größer als gespeicherter Wert: Wert ersetzen
-wenn neuer Wert kleiner als gespeicherter Wert :gespeicherten Wert behalten
-nächste messung...bin sekunde voll/Timer durchgelaufen
-wenn sekunde voll gespeicherten Wert auf LCD ausgeben und Speicher auf 0 setzen.

oder gibt es da vielleicht eine Funktion für?

Tobias

for_ro
07.06.2008, 22:19
Hallo Tobias,
deine Methode funktioniert und ist insofern gut, dass zum Ende der Sekunde der max-Wert sofort verfügbar ist.
In Bascom gibt es ja die Max()-Funktion.
Dazu musst du aber alle Werte in ein Array speichern und dann am Ende deiner Sekunde aufrufen. Die ist wahrscheinlich schneller, als wenn du es selber in Bascom programmierst. Aber je nachdem wieviele Werte es sind, kann es schon eine kleinere Verzögerung geben.

Gruß

Rolf

TobiasBlome
08.06.2008, 06:40
Hallo,
welche metode belastet denn den µC weniger (der soll ja noch etwas neben her machen...)

wie gebe ich denn wo die Werte von meinem Analogeingang hin?


'Dim some variables
Dim Wb As Byte , B As Byte
Dim W(10) As Word

'fill the word array with values from 1 to 10
For B = 1 To 10
W(b) = B
Next

Print "Max number " ; Max(w(1))

for_ro
08.06.2008, 09:37
Hallo,
nach deiner Messung schreibst du den Getadc-Wert an die aktuelle Position (also der Index) im Array. Dann erhöhst du aktuelle Position.
Hast du eigentlich immer eine absolut konstante Anzahl von Messungen pro Sekunde? Ansonsten hast du bei der Max()-Funktion noch das zusätzliche Problem, dass du einerseits dein Array so groß machen musst, wie maximal Messungen kommen könnten.
Alles Zusatzaufwand gegenüber deiner Methode.
Wenn es zeitkritisch ist und viele Werte kommen würde ich auf jeden Fall deine Methode vorziehen.


welche metode belastet denn den µC weniger (der soll ja noch etwas neben her machen...)
Wie schon geschrieben: Bei deiner Methode verteilst du den Aufwand über die ganze Sekunde und hast den Wert nachher sofort verfügbar. Bei der Max()-Funktion hast du keinen Aufwand während der Sekunde, dafür am Ende jede Menge.
Wenn die Anzahl der Messungen konstant ist, brauchen beide Methoden dieselbe Anzahl an Vergleichen. Bei variabler Anzahl musst du das Array von oben befüllen, sprich mit dem höchsten Index anfangen. Du kannst bei der Max()-Funktion nämlich das erste Element des Arrays angeben, ab dem das Array druchsucht wird.

Gruß

Rolf

TobiasBlome
08.06.2008, 13:26
vielen Dank für die Erklärung,
dann verteil ich das lieber über eine sekunde ;-)
also ich denke mal das vieleicht 5-10 Messungen / Sekunde ausreichend sind - das kann sicher ein Timer erledigen.