Dringend, für klausur! Abfrage und Speichern von mehreren AD-Werten

Gast #3201796
Lesenswert?
• ▲
▼
Hi Leute, brauche dringend Hilfe bei meinem Projekt.
Hab folgendes Problem:
Der AD-Wandler bekommt von einem Sensor mehrere Spannungswerte im 
Bereich 0V bis -0,6V. Wie kann ich nun den negativsten Wert (also 
die-0,6V) Speichern und ausgeben, damit er auf dem Display stehen 
bleibt? Habe da irgendwie an ein Array gedacht, aber leider kein Plan 
wie ich dies Syntaxtechnisch umsetzen kann...

wäre echt gut, wenn mir da jmd weiterhelfen könnte...


Mit freundlichem Gruß
F F
#3201806
Lesenswert?
• ▲
▼
"Klausur"?

Wenn man einem Grundschüler eine Liste von Zahlen vorliest, und ihm 
sagt, er soll dir am Schluss die kleinste Zahl sagen, wie macht er das?

Wie könntest du das in Software giessen?

Und nein, du must dir nicht alle Zahlen gleichzeitig merken. Das muss 
der hypothetische Grundschüler auch nicht.
Gast #3201866
Lesenswert?
• ▲
▼
sorry für die schlechte Angabe. Ich meine nicht Klausur, sondern 
Projekt.

Die Sprache ist C.

Die analogen Werte vom Sensor werden bereits eingelesen, und in digitale 
umgewandelt. Dies funktioniert soweit.

Nun kenne ich mich leider mit der Funktion der Arrays nicht gut aus. Ich 
weiss, dass man mit diesen Werte speichern kann um auch beispielsweise 
Mittelwerte oder sonstiges zu bilden.

Aber wie genau so ein Syntax aussieht, dass zB bei einer AD Spannung von 
0.0Volt die Speicherung in den Arrays anfängt und dann mir den kleinsten 
Wert (im Minus-Bereich) nach ca.10 sekunden ausgibt. Ich brauch also nur 
den Minimalsten Wert nach 10 Sekunden Messzeit ab 0,0V Start.


Gruß
Gast #3201870
Lesenswert?
• ▲
▼
Was willst du da mit einem Array ?

Wenn du nur den kleinsten Wert brauchst, reicht es doch, wenn du bei 
jedem neuen ADC-Wert so etwas machst:
1
int minimum = 0;
2
int neuerWert = getADC(); //Woher auch immer der Wert kommt...
3
if(neuerWert < minimum) minimum = neuerWert;
Gast #3201876
Lesenswert?
• ▲
▼
Warum Array? Wenn Du den größten/kleinsten Apfel von einem Baum haben 
willst, versuchst Du doch auch nicht alle gepflückten Äpfel in der Hand 
zu halten.

1. Zwei Äpfel pflücken
2. den kleineren/größeren weglegen
3. den nächsten pflücken
4. zurück zu 2...
Wenn der Baum leer ist, hältst Du den größten/kleinsten Apfel in der 
Hand.
Gast #3201885
Lesenswert?
• ▲
▼
Du brauchst mich nicht:
1
volatile int minimum;
2
volatile int maximum;
3

4
void min_reset(void)
5
{
6
  minimum =    0;
7
  maximum =  -600;
8
}
9

10
int ADC_umrechnen(void)
11
{
12
  int spannung_in_millivolt;
13
  // skaliere hier deinen Kram
14
  spannung_in_millivolt = ADCREGISTER * / + - lalala...
15
  
16
  return(spannung_in_millivolt);
17
}
18

19
void ADC_interrupt(void)
20
{
21
  int adc = ADC_umrechnen();
22

23
  minimum = (minimum > adc)?adc:minimum;
24
  maximum = (maximum < adc)?adc:maximum;
25
}
Gast #3201982
Lesenswert?
• ▲
▼
Danke vorab für die zahlreichen Infos.

Leider bekomme ich den Wert immernoch nicht gespeichert.

Das Ganze Programm läuft in einer While(1) Schleife ab. Dort wird der 
ADC Wert ständig abgefragt mit der Variable ulVoltage. Diese Variable 
verändert sich durch Benutzung des Sensors dann im Breich von +0,1V bis 
-..irgendwas.. V. Der Wert des Sensors ist ca. bei 0,05V, wenn er nicht 
reagiert. Bei Sensortest gibt es innerhalb von 10 Sekunden einen 
Maximalen-negativen Ausschlag. Diesen max. negativen Ausschlagen in 
dieser 10 sekunden Zeitspanne möchte ich auf dem Display gespeichert 
ablesen können.


Dabei brauche ich doch irgendwie eine Speicherung, oder verstehe ich das 
falsch?


Danke.


Gruß
F F
#3202011
Lesenswert?
• ▲
▼
Die Speicherung ist doch in dem von troll beschriebenen Fall durch die 
Variable minimum schon gegeben.

So sollte es gehen - getADC() und ausgabe() sind anzupassen:
1
int minimum = 0;
2
ausgabe(minimum);
3

4
while(1) {
5
   int ulVoltage = getADC(); //Woher auch immer der Wert kommt...
6
   if(ulVoltage < minimum) {
7
      minimum = ulVoltage;
8
      ausgabe(minimum);
9
   }
10
}
Gast #3202160
Lesenswert?
• ▲
▼
Ich weiß nicht...

  int minimum = 0;

sollte so geändert werden, dass nicht mit 0, sondern mit dem maximalen 
int-Wert initialisiert wird. Sonst erfasst die Schleife nachher keinen 
einzigen positiven Wert.

  ausgabe(minimum);

sollte m.E. nach der Schleife stehen und nicht innerhalb.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.