mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom: Größte Zahl in einem Array finden


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe leider keine Ahnung wie ich in einer Ansammlung von Zahlen, die bei 
einer Analogspannungsmessung entstehen die größte und kleinste Zahl 
finde. Welche Bascom-Befehle verwendet man da?

Autor: Franz josef Vögel (advors)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal bei den Befehlen MIN und MAX nach. Diese arbeiten auch bei 
Arrays.

Josef

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einige Programmzeilen lösen das Problem.
Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken (10Bit) 
und Du den aktuellen Wert in der Variablen wert ablegst.

mini=1024: maxi=0   'min
DO
  wert=adc(...)   'je nach Aufbau
  IF wert>maxi THEN maxi=wert
  IF wert<mini THEN mini=wert
LOOP ...

Wenn Du die Werte in einem Array abgelegt hast, ähnliches Vorgehen: 
Diesmal statt DO..LOOP eine FOR..NEXT Konstrktion und statt wert die 
Array-Variable nehmen, z.B. messwert(i).

Autor: Kopfschüttler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Netbird (Gast):

Dein Kot ist ziemlich sinnfrei:

> Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken
mini=1024: maxi=0   'min
DO
  wert=adc(...)   'je nach Aufbau
  IF wert>maxi THEN maxi=wert
  IF wert<mini THEN mini=wert
LOOP ...

Die Variablen 'mini' und 'maxi' verden NIE verändert
und stehen IMMER auf der Anfangsinitialisierung.

Ist es denn wirklich zuviel verlangt nochmals VOR dem posten
das eigene Posting auf SINNHAFTIGKEIT zu überprüfen?

Kopfschüttelnd ...

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt muss ich aber mal den Kopf schütteln über den Kopfschüttler - ich 
kann da keinen prinzipiellen Fehler sehen, mal abgesehen von 
Basic-Syntax, das kann ich nicht beurteilen.
Sinngemäss genauso mach ich es auch, allerdings füttere ich min und max 
direkt  nach jeder Wandlung.

struct {
uint16 A2D_Buffer[4096];
uint16 Min;
uint16 Max;} SampleBuffer[2];

So kann ich direkt nach Abschluss des samplings min und max beurteilen, 
spart insgesamt Zeit.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kopfschüttler wrote:
> @Netbird (Gast):
>
> Dein Kot ist ziemlich sinnfrei:
>
>> Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken
>
>
> mini=1024: maxi=0   'min
> DO
>   wert=adc(...)   'je nach Aufbau
>   IF wert>maxi THEN maxi=wert
>   IF wert<mini THEN mini=wert
> LOOP ...
> 
>
> Die Variablen 'mini' und 'maxi' verden NIE verändert
> und stehen IMMER auf der Anfangsinitialisierung.
>
> Ist es denn wirklich zuviel verlangt nochmals VOR dem posten
> das eigene Posting auf SINNHAFTIGKEIT zu überprüfen?

Ich kenn das:
Manchmal bellt man einfach den falschen Baum an, wie die Amerikaner
so schön sagen. Insbesonders wenn man dem Originalautor mangelnde
Sorgfalt vorwirft, wirkt das besonders lustig, wenn der Original-
autor absolut recht hat und der Antwortende sich verhaut hat.

In diesem Sinne: Kehre vor deiner eigenen Tür.

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er bezieht sich wahrschinlich auf die Zeile:

wert=adc(...)  'je nach Aufbau

die in der DO LOOP Schleife ohne Indexänderung immer gleich bleibt. 
Gemeint war mit dieser Zeile aber bestimmt nur "hier kommt jetzt der 
neue Wert in die Variable 'wert'" - darum steht hier ja auch "je nach 
Aufbau"...

Man darf nicht immer alles so wörtlich nehmen...

Außerdem sollte man schon - wenn man jemanden Fehler vorwirft - auch 
darauf hinweise wo derjenige zu suchen hat. Wäre konstruktiver...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Er bezieht sich wahrschinlich auf die Zeile:

>wert=adc(...)  'je nach Aufbau

Mit der darauffolgenden Abfragenreihe werden auf jeden Fall Minima und 
Maxima gefunden. Danach kann man "wert" auch noch in ein Array 
schreiben...
Sofern "adc(...)" den "aktuellen" ADC-Wert zurückliefert funktioniert 
der Spaß auch ohne explizites Array.
Das Problem ist wohl eher, dass "mini" irgendwann gleich 0 und "maxi" 
irgendwann gleich 1023 ist. Das wären aber Werte, die man vorhersagen 
könnte...

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip fehlt auch noch die Abbruchbedingung. FOR NEXT wäre 
wahrscheinlich der bessere Ansatz.

Hab grade gesehen, LOOP hat normalerweise auch eine Abbruchbedingung - 
kann man also auch nehmen...

Autor: Andreas K. (oldcoolman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kopfschüttel

erstens hat netbird recht.
und zweitens hat er hinter loop ein paar pünktchen gemacht.

und noch zusätzlich auf die Änderung Richtung Array und
For ..Next hingewiesen.

ich stimme Herrn Buchegger vollkommen zu

Gruß an alle

Andi

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke an alle, die mitdenken können/wollen!

Meine Zeilen sollen dem Frager zeigen, wie er vorgehen kann. Ob/ wann/ 
wie er seine Schleife abbricht, muss er wissen und in sein Programm 
einbauen. Dass er ggf. mini, maxi neu initialisieren muss, wenn's weiter 
gehen soll, ebenso.

Der einzige "Fehler", den ich gemacht habe -SHAME ON ME- ist, dass der 
ADC-Wert in Bascom gelesen wird mit GETADC(..), im Zweifel nachsehen in 
der Hilfe!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.