Forum: Mikrocontroller und Digitale Elektronik Dringend, für klausur! Abfrage und Speichern von mehreren AD-Werten


von Ferdinand Freund (Gast)


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

: Verschoben durch Moderator
von Peter II (Gast)


Lesenswert?

es wird dir mit den paar info niemand helfen.

welche Programiersprache
welche CPU
welches Display

von Εrnst B. (ernst)


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.

von Ferdinand (Gast)


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ß

von troll (Gast)


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;

von troll (Gast)


Lesenswert?

Auf 0 darfst du minimum natürlich nicht jedes Mal neu setzen ;)

von marvin m. (Gast)


Lesenswert?

Hallo,

du befindest dich in einer Sackgasse... Vergiss den Ansatz mit dem 
Array, das brauchst du nicht.
Lies dir den Vorschlag von Ernst nochmal langsam durch....

von Martin (Gast)


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.

von Array (Gast)


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
}

von Ferdinand Freund (Gast)


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

von Felix P. (fixxl)


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
}

von Rätsler (Gast)


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.

von Ferdinand Freund (Gast)


Lesenswert?

Danke an alle. Einen besonderen Dank gilt Felix und Troll, die mich auf 
den richtigen Weg gebracht haben. Jetzt funktioniert´s....
danke danke und nochmal danke.


Gruß
FF

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.