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?
Schau mal bei den Befehlen MIN und MAX nach. Diese arbeiten auch bei Arrays. Josef
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).
@Netbird (Gast):
Dein Kot ist ziemlich sinnfrei:
> Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken
1 | mini=1024: maxi=0 'min |
2 | DO |
3 | wert=adc(...) 'je nach Aufbau |
4 | IF wert>maxi THEN maxi=wert |
5 | IF wert<mini THEN mini=wert |
6 | 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 ...
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.
Kopfschüttler wrote: > @Netbird (Gast): > > Dein Kot ist ziemlich sinnfrei: > >> Nehmen wir an, dass die ADC-Werte zwischen 0 und 1024 schwanken > >
1 | > mini=1024: maxi=0 'min |
2 | > DO |
3 | > wert=adc(...) 'je nach Aufbau |
4 | > IF wert>maxi THEN maxi=wert |
5 | > IF wert<mini THEN mini=wert |
6 | > LOOP ... |
7 | > |
> > 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.
Er bezieht sich wahrschinlich auf die Zeile:
1 | 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...
>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...
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...
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
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!!!
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.