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
Verstehe nochimmer nicht, was du genau machen willst? So wie ich das mitbekommen hab, ist dir der ADC zu ungenau?
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. ???
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.