Forum: Mikrocontroller und Digitale Elektronik ADC-Auswertung kleiner/größer


von batty m. (battyman)


Lesenswert?

Frohe OSTERN - mal an dieser Stelle  ;-)

Ich bastel nun seit Tagen wieder mit meinen Codes rum und bin mal wieder 
beim ADC angekommen. Einlesen und damit was auslösen funzt ja bereits. 
Mein jetziges Anliegen liegt eigentlich darin, eine Auswertung des 
Vorherigen Zusatandes zu machen.
Ich benutze ein Labornetzteil, bei dem ich ziemlich genau und 
gleichbleibend in mV-Bereich einstellen kann.
Angenommen ich habe eine Spannung von 1,524 V anliegen. Nun lasse ich 
eine Mittelwertmessung laufen. Um jetzt den µC die Auswertung auf 
größer, kleiner, gleich des vorherigen Messwertes ermöglchen zu können, 
speicher ich meinen ADCW in einer Hilfvariablen ab. Anschließend starte 
ich erneut eine Messung. Dieser ADCW kann ja nun einen dieser drei 
Zustände haben. Jetzt würde ich einen Vergleich anstellen mit 
Hilfsvariablen zu ADCW.

Problem dabei scheint nur, dass auch bei Verminderung des 
Spannungseinganges mein neuer ADCW größer wie die Hilfsvariable ist und 
das kann eigentlich nicht sein. Dies ist aber auch nur der Fall wenn 
wirklich meine Verringerung nicht mehr wie 20mV sind. Aber dies ist 
leider nicht akzeptabel, da ich eine Auflösung von 2mV habe.
Wenn ich gar keine Änderung am Eingangssignal vornehme, dann würde ich 
eine nach Gauß Verteilung erwarten. Doch habe ich eine enorme Gewichtung 
das ADCW größer Hilfsvariable ist.

Hat jemand damit schon Erfahrungen gesammelt durch gleiche 
Problemstellung und eine bessere Lösung oder dufte Tipps für 
Verbesserungsvorschläge meiner Überlegungen???

Also eigentlich möchte ich eine Vergleichsgenauigkeit von 4mV (also 
eigentlicher Wert +/- 2mV Schwankung) und eben den Vergleich der 
Vorherigen Messung und noch cooler auch der davor um eine 
Richtungsaussage machen zu können.
Damit möchte ich späeter meine PWM-Signale erhöhen oder verringern, also 
eben in Abhängigkeit des ADCW.

Wenn man so möchte eine einfache Regelung des PWMs zu ADCW.

Vielen lieben Dank und gut Eier suchen

LG

von Hubert G. (hubertg)


Lesenswert?

Und was soll verbessert werden?

von dirk h. (Gast)


Lesenswert?

Verstehe nochimmer nicht, was du genau machen willst?
So wie ich das mitbekommen hab, ist dir der ADC zu ungenau?

von batty m. (battyman)


Lesenswert?

Mein Problem liegt gerade darin, dass bei einer Verminderung des 
Spannungseingangs von 1-20mV der gemessene ADCW größer wie der vorherige 
Messwert sein soll. Zumindest wertet das mein µC so aus. ???

Und dann hatte ich noch die Frage ob es einen anderen Weg des 
ADCW-Vergleichens gibt. ???

von dirk h. (Gast)


Lesenswert?

Post doch mal deinen code

von Hubert G. (hubertg)


Lesenswert?

batty man schrieb:
> Mein Problem liegt gerade darin, dass bei einer Verminderung des
> Spannungseingangs von 1-20mV der gemessene ADCW größer wie der vorherige
> Messwert sein soll. Zumindest wertet das mein µC so aus. ???

Wie groß ist denn der Rauspegel auf deiner Meßspannung?
Das wird dein größeres Problem sein.

von batty m. (battyman)


Lesenswert?

Hubert G. schrieb:
> Wie groß ist denn der Rauspegel auf deiner Meßspannung?
> Das wird dein größeres Problem sein.
Das mit dem Rauschen müsste eigentlich durch die 100 Messungen doch 
ziemlich gut rausgemittelt werden. Meine Anzeige steht auch sehr gut 
still ohne ständig die Einer-mV-Stelle zu ändern. wenn ich am 
Labornetzteil nichts anfasse sollte dies schon "gleichbleibend" sein. 
Meine Anzeige bleibt auch nach Minuten schön ruhig stehen.
Ein Rauschen und damit eine Messung zwischen +/-2mV würde ich deswegen 
noch verstehen. Aber eine falsche Auswertung bei einer echten Änderung 
(adcval kleiner werdend um ca. 20mV) ist nicht wirklich akzeptabel. Alle 
LCD-Ausgaben kommen daher, damit ich im Prozess überprüfen kann wo der 
µC wann wohin gesprungen und ausgeführt hat. Mit dem Simulieren und 
Watchdog etc. habe ich leider noch keine Berührungen gemacht. Sollte 
aber ja nicht zur Sache tun, denn so überprüfe ich ja gleich mit 
entsprechender Hardware.

ganz einfach so:
1
g = 1024;
2
3
 while (1)
4
 {
5
          if (g >= adcval)
6
          {
7
            if (adcval <=5 )
8
            {
9
              m--;
10
              n++;
11
              lcd_setcursor(0,3);
12
              lcd_string("kleiner 5");
13
              _delay_ms(1000);
14
            }
15
            else if (adcval > 5 && adcval <= 10)
16
            {
17
              m -= 2;
18
              n += 2;
19
              lcd_setcursor(0,3);
20
              lcd_string("kleiner 10");
21
              _delay_ms(1000);
22
            }
23
            else if (adcval > 10 && adcval <= 100)
24
            {
25
              m -= 5;
26
              n += 5;
27
              lcd_setcursor(0,3);
28
              lcd_string("kleiner 100");
29
              _delay_ms(1000);
30
            }
31
            lcd_setcursor(0,2);
32
            lcd_string("Einmal rauf gegangen");
33
            _delay_ms(1000);
34
          }
35
36
          if (g<adcval)
37
          {
38
            if (adcval <=5 )
39
            {
40
              m++;
41
              n--;
42
              lcd_setcursor(0,3);
43
              lcd_string("kleiner 5");
44
              _delay_ms(2000);
45
            }
46
            else if (adcval > 5 && adcval <= 10)
47
            {
48
              m += 2;
49
              n -= 2;
50
              lcd_setcursor(0,3);
51
              lcd_string("kleiner 10");
52
              _delay_ms(2000);
53
            }
54
            else if (adcval > 10 && adcval <= 100)
55
            {
56
              m += 5;
57
              n -= 5;
58
              lcd_setcursor(0,3);
59
              lcd_string("kleiner 100");
60
              _delay_ms(2000);
61
            }
62
            lcd_setcursor(0,1);
63
            lcd_string("Einmal runter gegangen");
64
            _delay_ms(10000);
65
          }
66
67
  g = adcval;
68
  for (f=0; f<800; f++)
69
  adcval = ADC_Read_Avg(0, 100);      //Mittelwertübergabe aus 100 Einzelmessungen - Kanal 0
70
  }

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.