Tach an alle, ich kämpfe immer noch mit meinem ADC des ATmega2560 und meiner Wechselspannungsmessbrücke. Ich habe wie immer ein Verständnisproblem mit dem Datenblatt. Ich dachte bis dato, dass ich den MC keine negative Spannung aussetzen darf. Wenn ich das jetzt aber richtig gelesen habe kann ich über "Differential Channel" dies doch tun, ist das richtig? Ich möchte folgendes tun: - Signalkabel 1 mit AC - Signalkabel 2 mit entgegengesetzter AC beide AD-Eingaänge würden demnach eine sinusförmige Spannung (mit Durchgang durch den Nullpunkt) bekommen. Diese möchte ich wandeln und dann gegeneinander verrechnen. Mein Problem ist derzeitig, dass ich nicht so genau weiß, wie ich das Sinussignal in den MC bekomme ohne diesen zu zerstören??? Kann mir bitte einer dabei auf die Sprünge helfen bzw. das anders als im DS erklären? Vielen lieben Dank
Im Datenblatt findest du unter "absolute Grenzen", dass kein Pin mehr als wenige Millivolt negativer als GND sein darf. Ein Sinussignal koppelt man über einen Kondensator auf den Eingangspin und legt den Pin mittels zweier Widerstände gleichspannungsmässig auf die Mitte zwischen VCC und GND.
Georg G. schrieb: > Im Datenblatt findest du unter "absolute Grenzen", dass kein Pin mehr > als wenige Millivolt negativer als GND sein darf. also ist das doch richtig, wie ich es als normal verstanden habe. Dachte nur jetzt das es mittlerweile erweiterte Funktionen bzw. Beschaltung möglich sind , um doch ein solches Signal direkt einspeisen zu können. > Ein Sinussignal koppelt man über einen Kondensator auf den Eingangspin > und legt den Pin mittels zweier Widerstände gleichspannungsmässig auf > die Mitte zwischen VCC und GND. Wirkt denn der zwischen geschaltete Kondensator nicht als Widerstand??? Ich habe doch eine Wechselspannung anliegen, wodurch das zur Impedanz wird. Mit den ohmschen Widerständen bastel ich mir doch ein Hochpassfilter zusammen und hau mir tiefe Frquenzen raus. Mein Sinussignal läuft derzeitig mit 1,9kHz. Weiterhin, hat doch diese Einbindung auch einen Einfluss auf die davor geschaltete Messbrücke (in der auch Kondensatoren enthalten sind), wodurch ich mir an dieser Stelle die Messung versaue, ist doch richtig oder???
So nach dem Duschenn kann man auch wieder besser denken ;-) denn wenn der Dreck von den Füssen läuft rutsch so einiges runter. Georg G. schrieb: > Im Datenblatt findest du unter "absolute Grenzen", dass kein Pin mehr > als wenige Millivolt negativer als GND sein darf. also ist das doch richtig, wie ich es als normal verstanden habe. Dachte nur jetzt das es mittlerweile erweiterte Funktionen bzw. Beschaltung möglich sind , um doch ein solches Signal direkt einspeisen zu können. > Ein Sinussignal koppelt man über einen Kondensator auf den Eingangspin > und legt den Pin mittels zweier Widerstände gleichspannungsmässig auf > die Mitte zwischen VCC und GND. Das mit dem Kondensator zwischen schalten: Meine Sinusspannung kommt an den Kondensator an, lädt diesen mit (Tau=...) auf. Durch die negative Sinuswelle würde der Kondensator sich wieder entladen. Da die Zyklen durch die Frequenz der Sinusspannung nicht mehr erreicht werden, da zu schnell, wir der Kondensator zur Impedanz!!! So, nun schalte ich aber über einen Widerstand nach Vcc und mittels einen Anderen an GND an. Die positive Halbwelle kommt am Kondensator an und lädt diesen wieder. Danach kommt es wieder zur negativen Halbwelle, durch den Anschluss an Vcc wird diese jedoch am Kondensator ausgeglichen, wodurch die Ladung nicht abgegeben wird sondern eben gehalten. Soweit alles richtig??? Wozu jetzt aber noch einen an GND, hab ich denn einen Überschuss an posiiver Spannung die ich darüber ableiten möchte? Ich gehe mal davon aus, dass die Auslegung des Spannungsteilers dann mit zwei gleichgroßen Widerständen ausgestattet wird, um den Teilungsfaktror 1/2 zu bekommen, korrekt??? -> D.h., ein Spannungsteiler mit Signalanhebung auf 2,5V - arichtig?? 1.) Nur wie und nach welcher Maßgabe lege ich eigentlich die Größen der Widerstände und des Kondensators fest? 2.) Und Beeinflusse ich meine Messbrücke durch die Zuageb von Vcc nicht doch??? Denn einen Rückfluss von Gleichspannung darf ich für meinen Messaufbau nicht haben!!! -> Elektrolyse von Flüssigkeiten ist schlecht! Bitte um Hilfe. Oder korrektur meiner Gedankengänge bzw. Verständnisses
batty man schrieb: > 1.) Nur wie und nach welcher Maßgabe lege ich eigentlich die Größen der > Widerstände und des Kondensators fest? Der AD hat einen Eingangswiderstand in der Größenordnung Megaohm. Wenn du also zwei Widerstände mit je 100kOhm nimmst, wird die Mitte hinreichend genau getroffen. Der Eingangswiderstand des Gebildes ist dann etwa 50kOhm. Mit einem Kondensator von 22nF hast du bei 2kHz einen Fehler im Bereich Promille. Genauer ist dein AD auch nicht. Nimm 100nF, die sind in jeder Bastelkiste und es passt. > 2.) Und Beeinflusse ich meine Messbrücke durch die Zuageb von Vcc nicht > doch??? Denn einen Rückfluss von Gleichspannung darf ich für meinen > Messaufbau nicht haben!!! Deine Messbrücke sieht keine Gleichspannung. Wie soll die auch über den Kondensator kommen? Es wäre hilfreich, wenn du ein Schaltbild zeigen würdest. Wenn du jegliche Rückwirkung vermeiden möchtest, bleibt dir nur ein OpAmp zwischen Brücke und AD. Dessen Auslegung ist aber auch nicht trivial und bringt dir auch Fehler in die Messung. Fang klein an und sieh, was herauskommt. Daraus lernst du und kannst es dann verbessern.
Georg G. schrieb: > Der AD hat einen Eingangswiderstand in der Größenordnung Megaohm. Wenn > du also zwei Widerstände mit je 100kOhm nimmst, wird die Mitte > hinreichend genau getroffen. Der Eingangswiderstand des Gebildes ist > dann etwa 50kOhm. Mit einem Kondensator von 22nF hast du bei 2kHz einen > Fehler im Bereich Promille. Genauer ist dein AD auch nicht. Nimm 100nF, > die sind in jeder Bastelkiste und es passt. Kann ich auch anstatt der 100kOhm an der Stelle 1MOhm verwenden oder ist dies eher kontraproduktiv? Wenn 22nF besser sind kann ich auch die benutzen, das ist nicht das Problem
Auch das geht. Die Fehler, die du da einbaust, gehen im Rauschen unter (aus deinen Fragen schliesse ich nämlich, dass dir die Erfahrung mit ADCs fehlt. Und da lernt man nur unter Schmerzen durch eigene Erfahrung. Das Layout und die Masseführung sind wichtig, die Entkopplung der Referenz...) Viel Erfolg!
Georg G. schrieb: > ...Erfahrung mit > ADCs fehlt. Und da lernt man nur unter Schmerzen durch eigene Erfahrung. > Das Layout und die Masseführung sind wichtig, die Entkopplung der > Referenz...) Jup, die fehlt mir leider. Also ich würde mal so behaupten dass ich vieles mittlerweile dazu gelernt habe, gerade im Bezug auf Elektronik und Schaltungstechnik. Leider reicht das anscheinend noch lange nicht. Das mit dem Layout und Masse habe ich schon mitbekommen, denn das ist meine 4 Messbrücke die ich gebaut habe und die zum ersten Mal auch einen funktionalen AC-Abgleich herstellt. Das mit dem Lernen durch Erfahrung ist super, deswegene mache ich das ja auch alles, leider habe ich nur nicht mehr so viel Zeit mein Projekt zu bearbeiten. Wusste nicht das dies so heftig wird. :-( Aber vielen Dank, ich probier alles aus und speicher ab was ich sehe und versuch zu verstehen warum dem so ist. Ich habe voll die Masseprobleme und weiß auch nicht woher und an welcher Stelle ich mist baue. Alles echt nicht so einfach.
batty man schrieb: > Alles > echt nicht so einfach. Schaltbilder und Bilder vom Aufbau können uns helfen dir Tipps zu geben wo du den Bock schießt aber so ganz ohne Bilder…meine Glaskugel läuft immer noch nicht zuverlässig.
So das Bild wäre mein derzeitiger Schaltungsaufbau (nach Hinweis von Georg G), wobei Cx mein zu bestimmender Kondensator ist. Der Brückenabgleich (4nF zu 4nF) ist möglich, sofern ich mit einem Multimeter an den zwei Brückenpins messe. Benutzte Frequenz liegt dabei um die 1,9kHz. Maximaler AC-Effektiv-Wert beträgt 3,9V (bei ca. 0,766nF zu 4nF). Dazu ist die gesamte Verdrahtung aus Coax bestehend. Das Signal leite ich durch die Adern. Die Metallhülle ist an allen Seiten (rechte und linke Ende) mit den anderen Verbunden und zusammen auf Masse gelegt. Nun nach den Tipp habe ich mein Gleichrichter entfernt und anschließend mit einem 100nF Kondensator mit hinterliegenden Spannungsteiler erweitert. Zum Messen habe ich nun aus einem Labornetzteil +5V als Vcc und GND entsprechend der Zeichnung angeschlossen. Mein Brückeneingangssignal kommt von einem Funktionsgenerator mit eben 1,9kHz. Die Pins für den ADC0 und ADC1 habe ich an Messspitzen zum Oszi. GND der Messspitzen an GND-Seite vom Spannungsteiler. Heraus kommen zwei schöne sinusförmige Wellen mit einem positiven Offset von DC = 2,5V. Verrechne ich nun am Oszi die Werte so kommt für "Math" = 3,04V eff. raus und liegt ein wenig unterhalb zum Brückenpin gesehen, aber im zu erwartenden Bereich. -> Eigentlichschon mal voll freu und bisher das beste Messergebnis. :-D Ein ganzen Großen Dank an dieser Stelle!!! THX Neu aufkeimende Fragen durch Schaltungsänderung: Nun muss ich doch zwei AD-Eingänge nutzen und habe zu dem noch den Wechselspannungsanteil drauf, den es ja auch auszuwerten gilt. Wie kann ich denn nun die zwei Kanäle geeignet auslesen, so dass dies immer zum selben Zeitpunkt geschieht??? Muss ja dann Kanal1 minus Kanal2 (bzw. ADC-Wert1 minus ADC-Wert2) rechenen. Dazu muss das doch auch alles zeitlich passen, auch wenn ich natürlich im Vorfeld das Abtasttheorem beachte und im Bereich mit ca 4kHz eine Wandlung machen muss???
>Nun muss ich doch zwei AD-Eingänge nutzen Warum? Wahrscheinlich habe ich den Grund überlesen. >Wie kann ich denn nun die zwei Kanäle geeignet auslesen, so dass dies >immer zum selben Zeitpunkt geschieht? Das geht gar nicht weil es nur einen ADC gibt. Die Messungen passieren nacheinander mit umschalten des Multiplexers. Vieleicht ist ein uC mit echten zwei ADCs die bessere Wahl für dich.
holger schrieb: > Das geht gar nicht weil es nur einen ADC gibt. Die Messungen > passieren nacheinander mit umschalten des Multiplexers. > > Vieleicht ist ein uC mit echten zwei ADCs die bessere Wahl für dich. genau da liegt ja mein Problem. Ich muss beide Brückenleitungen auswerten, um mein echtes Potential zu kennen. Ich habe nur den einen MC und es ist auch nicht mehr machbar einen anderen eventuell geeigneteren zu beschaffen. Das ich beide nicht zur gleichen Zeit wandeln kann ist mir ja bewusst und deswegen frage ich wie es hier so die könner anstellen würden um solch ein Problem wie meines zu bewerkstelliegen??? Also ich sehe die Probleme in den Startzeitpunkt, der Wandlungstakte und der verwendeten Frequenz, da für ein Brückenabgleich auch die Eingangsfrequenz geändert werden muss, wodurch es dann natürlich auch zu Zeitverschiebungen bei der Wandlung kommt. Durch das Sinussignal ist auch die Approximation wahrscheinlich nicht in nur standard 13 takten gemacht. Ich stell mir das so vor, dass ich den ADC-Eingang auf eine Steigende Flanke triggern müsste und dann bei 512 starten würde (DC-Offset bei 2,5V) wenn die Wandlung in immer gleichen Wandlungstakten von statten gehen würde könnte ich ja anschießend den AD-Eingang wechseln und gleiches von vorne tun. Anschließend würde ich die entstandenen ADC-Werte gegeneinander verrechnen und kann mit den folgenden Aufgaben weiter machen. Kann man das so realiseren oder gäbe es einen besseren Weg???
Der ADC tastet das Signal unmittelbar vor der Wandlung ab und hält es intern in einem Kondensator für die Dauer der Wandlung fest. Die Kurvenform der Spannung am Eingang hat keinen Einfluss auf das Ergebnis. Mit MUX5:0 auf 010000 macht der ADC automatisch eine Differenzmessung zwischen ADC0 und ADC1. Wo ist dann das Problem?
Georg G. schrieb: > Der ADC tastet das Signal unmittelbar vor der Wandlung ab und hält es > intern in einem Kondensator für die Dauer der Wandlung fest. Die > Kurvenform der Spannung am Eingang hat keinen Einfluss auf das Ergebnis. Heißt also für mich, dass er den Eingang für eine bestimmte Zeit öffnet und das ankommende Signal auf den internen Kondensator geht, wobei der Spannungs-Effektivwert dabei ausschlaggebend ist - richtig?? Das heißt der ist für mehr als nur ein Wellenabschnitt offen??? - Sorry nur wenn ich es schon lerne dann würde ich es auch gern verstehen, da es die Gehversuche mit der AD-Wandlung sind. ;-) > Mit MUX5:0 auf 010000 macht der ADC automatisch eine Differenzmessung > zwischen ADC0 und ADC1. Wo ist dann das Problem? In meinem Verständnis was ich vor mir habe (Signal, Anzahl etc.) und das nicht genau Wissen, was der MC eben alles so kann, auch wenn ich das Datenblatt schon des Öfteren gelesen habe. (-> für mich als Einsteiger und ohne jegliche Elekronikerfahrung, Chemielaborant, ist das wie Gesetzestexte lesen und am Ende doch nichts verstanden) Danke für eure Geduld für meine einfachen Fragen
Suche im Datenblatt nach "Analog Input Circuitry". Dort findest du ein Prinzipschaltbild des Eingangs. Bei deiner Differenzmessung wird analog die Differenz zwischen z.B. ADC0 und ADC1 gebildet. Das Ergebnis bekommst du als Zahl mit Vorzeichen im Bereich von -512 bis +511. Die Wandlung beginnt damit, dass das Differenzsignal für etwa 2 Taktzyklen auf den Haltekondensator durchgeschaltet wird. Das ist aber nicht der Effektivwert sondern der Momentanwert! Da deine Brücke eine Wechselspannung ausgibt, reicht es nicht, nur eine Wandlung zu machen. Mit etwas Pech erwischt du gerade den Nulldurchgang. Also viele Messungen und den Maximalwert nehmen (denn du willst ja auf Minimum abgleichen). Wenn dir die 10Bit Auflösung nicht ausreichen, kannst du über MUX5:0 auch noch einen Verstärker (bis 200x) vorschalten. Das Datenblatt solltest du auf jeden Fall im Bereich ADC durchlesen, drüber schlafen und dann noch einmal lesen. "Wo ist das Problem" war scherzhaft gemeint. Das geht allen so. Sobald man weiß, wie es funktioniert, versteht man auch das Datenblatt :-)
Georg G. schrieb: > Bei deiner Differenzmessung wird analog die Differenz zwischen z.B. ADC0 > und ADC1 gebildet. Das Ergebnis bekommst du als Zahl mit Vorzeichen im > Bereich von -512 bis +511. D.h., dass mein Offset von DC = 2,5V mit AC-Nulldurchgang den ADC-Wert 0 ergibt, denn:
Jegliche Auslenkung meiner AC-Differenz bildet nun den entsprechenden ADC-Wert, der auf 5V Vref umgerechnet wird Wenn ich das jetzt richtig sehe, darf meine AC-Maximum keine 2,5V übersteigen, denn:
und ist somit am Vcc angelangt. Korrekt, oder ist das bei Differenzmessung mit dem Übersteigen des VRef an dieser Stelle nicht relevant??? Wäre ja wichig zu wissen, damit ich die Brückeneingangsspannung dann darauf anpasse. Ich glaube jetzt muss ich nochmal in mich gehen. Habe das Gefühl ich bring kurzeitig mal alles durcheinander, sorry. > Die Wandlung beginnt damit, dass das Differenzsignal für etwa 2 > Taktzyklen auf den Haltekondensator durchgeschaltet wird. Das ist aber > nicht der Effektivwert sondern der Momentanwert! > > Da deine Brücke eine Wechselspannung ausgibt, reicht es nicht, nur eine > Wandlung zu machen. Mit etwas Pech erwischt du gerade den Nulldurchgang. > Also viele Messungen und den Maximalwert nehmen (denn du willst ja auf > Minimum abgleichen). Das meinte ich ja. Also das ich mir genau diesen zufälligen Reinfall mit erkennender Flanke und dann Wandlungsstart entgegnen wollte. Ich hätte nun 100 Messungen durchgeführt und daraus eben den Mittelwert gebildet. > Wenn dir die 10Bit Auflösung nicht ausreichen, kannst du über MUX5:0 > auch noch einen Verstärker (bis 200x) vorschalten. Ok, nur was verrät mir dieser Zusatz im Datenblatt bei der Benutzung von MUX5:0?? "To reach the given accuracy, 10× or 200× Gain should not be used for operating voltage below 2.7V." -> meine Messspannung kann doch unterhalb von 2,7V liegen (bzw. tut sie ja auch wenn die Differenz gegen Null geht), warum sollte ich genau dort die Verstärkung nicht nutzen - also in wie fern wird denn die Genauigkeit schlechter? Um den Faktor 10 bzw. 200?
Ok, ich habe wieder ein wenig mit meinem Board geforscht. Also mein ADC-Projekt habe ich jetzt so abgewandelt, dass ich aus einer internen RefSp von 2,56V auf 5V hochgezogen habe. Weiterhin habe ich meinen Teiler von 1024 auf auf 512 runterskaliert um auf meinem Text-LCD gleich von Digitalwert auf Spannung zurückrechnen und anzeigen lasse. Vorversuch für Erstüberprüfung: - Labornetzteil mit zwei Gleichspannungsausgängen - +Ausgang1 an ADC0 und +Ausgang2 an ADC1 mit zusammengekoppelter Masse für gleichen Bezugspunkt - Am MC zwischen ARef und GND liegen exakt 4,979V an - aktivieren des ADC - starten des ADC - warten bis ADC fertig - mach das 100mal, addiere auf und teil anschließend - Wertumrechnung und Ausgabe LCD -> So lange +Ausgang1 größer-gleich +Ausgang2 ist, ist alles super funktional und reagiert sofort auf kleine Änderungen, wobei meine Anzeigeauflösung nun von damals 2mV auf jetzt ca 10mV verschlechtert ist, aber egal das ist eben erstmal so - viel wichtiger das es mit der Differenzmessung funktioniert. Heißt, dass bei Differnz von Null auch 0V auf meiner Anzeige erscheint. Wird die Differnz pos. größer, so erhöht sich der Anzeigewert von 0 auf maximal 5V, je nach Spannungsgrößen. -> ist jedoch der +Ausgang2 größer (negativer Differnz- ADC-Wert) zeigt mir mein Display kein Vorzeichen mit an und zählt lustig von '10' (erst Null und dann 9,9..) wieder abwärts. D.h., dass bei immer größer werdender Neg.-Diff der Anzeigewert von 9,9.. in Richtung 0 kleiner wird. Eigentlich müsste der Wert doch minusbehaftet von Null weggehend werden??? Meine Deklarationen habe ich alle von unsigned auf signed abgeändert. Ich denke mal ich habe das Problem der Wert-Justage ob rechts oder linksbündig, wobei ich diesen Sachverhalt noch nicht genau verstanden habe. Ich habe exktra mal die Zeile
1 | ADMUX = (1<<REFS0); |
um
1 | ADMUX = (1<<REFS0) | (1<<ADLAR); |
erweitert, jedoch kamm dann auch für den positiven Differenz-Spannungs-Fall nur Mist heraus, wodurch ich diese wieder rückgängig gemacht habe. Was habe ich nicht beachtet? THX
batty man schrieb: > Ok, nur was verrät mir dieser Zusatz im Datenblatt bei der Benutzung von > MUX5:0?? > "To reach the given accuracy, 10× or 200× Gain should not be used for > operating voltage below 2.7V." -> meine Messspannung kann doch unterhalb > von 2,7V liegen OMG "operating voltage" != "measure voltage" Kauf' dir ein Wörterbuch...
Deine Rechnungen bezüglich Differenzbildung und Maximalwert waren richtig. Und du hast auch richtig erkannt, dass niemals und nirgends Vref (VCC in deinem Fall) überschritten werden darf. Die Ausgaben deines Versuchs mit dem Labornetzgerät deuten für mich erst einmal auf einen Fehler in der Software hin. Zeig uns das Programm, dann geht es einfacher.
Hi >Also mein ADC-Projekt habe ich jetzt so abgewandelt, dass ich aus einer >internen RefSp von 2,56V auf 5V hochgezogen habe. Bei differentieller Messung gilt min max VREF Reference Voltage 2.7 AVCC - 0.5 V ^^^^^^^^^^ MfG Spess
Na dann ist ja erstmal mehr richtig gedacht wie ich selbst erwartet habe :-D
1 | #include <avr/io.h> |
2 | #include "lcd.h" |
3 | #define F_CPU 8000000UL
|
4 | #include <util/delay.h> |
5 | #include <avr/interrupt.h> |
6 | |
7 | #define CHARS_PER_LINE 20 //Zeilenlänge des LC-Displays EA W204B-NLW
|
8 | #define RefSpannung 49789000 //Referenzspannung gemessen mit Multimeter "VOLTCRAFT VC 850"
|
mit
1 | void ADC_Init(void) // ADC0 = Port F - Pin 0 (BA: ATmega2560) |
2 | { // ADC1 = Port F - Pin 1 |
3 | ADMUX = (1<<REFS0); /* | (1<<ADLAR); */ //setzt die Referenzspannung als intern und mit AVcc = 5V |
4 | ADCSRA = (1<<ADPS2) | (1<<ADPS1); //Taktfrequ.-Teilungsfaktor (Prescaler Select) = 64 für f = 125 kHz |
5 | ADCSRA |= (1<<ADEN); //aktiviert den AD-Wandler |
6 | ADCSRA |= (1<<ADSC); //startet die AD-Wandlung |
7 | |
8 | while (ADCSRA & (1<<ADSC)) { //wartet auf Beendigung der Wandlung |
9 | }
|
10 | |
11 | (void)ADCW; //im Register abgelegter ADC-Wert |
12 | }
|
13 | |
14 | int16_t ADC_Read(uint8_t channel) //AD-Wandlung - Einzelmessung |
15 | { //Kanal 16 für Differenzmessung ADC0 minus ADC1 |
16 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); //Wahl des Kanals - Maskierung der 5 Mux-Bits |
17 | ADCSRA |= (1<<ADSC); //startet die AD-Wandlung |
18 | while (ADCSRA & (1<<ADSC)) { //wartet auf Beendigung der Wandlung |
19 | }
|
20 | return ADCW; //AD-Wandler auslesen und ausgeben |
21 | }
|
22 | |
23 | int16_t ADC_Read_Avg(uint16_t channel, uint16_t nsamples) //AD-Wandlung - Mehrfachmessung mit Mittelwert (engl. Average) |
24 | { //Kanal 16 für Differenzmessung ADC0 minus ADC1 |
25 | int32_t sum = 0; //32-Bit Variable für Summe |
26 | for (uint16_t i = 0; i < nsamples; i++) //von 0 bis Anzahl der Messung |
27 | {
|
28 | sum += ADC_Read(channel); //Aufaddierung der Einzelmessungen |
29 | }
|
30 | return (uint16_t)(sum / nsamples); //Ausgabe des Mittelwertes |
31 | }
|
und
1 | int main(void) |
2 | {
|
3 | char Puffer[6]; //Zwischenspeichervariable für Integer To ASCII Umwandlung |
4 | ADC_Init(); |
5 | while (1) //durchläuft die Anweisungen so lange Brückenspannung ungleich Null ist |
6 | {
|
7 | adcval = ADC_Read_Avg(16, 100); //Mittelwertübergabe aus 100 Diff.-Einzelmessungen - Kanal 16 |
8 | |
9 | Spannung = (RefSpannung/512)*adcval; //Ref.-Sp. [µV] (plus Kommastelle zum Runden) durch Auflösung mal aktueller ADC-Wert |
10 | Spannung = Spannung + 55555; //Rundung auf die volle mV-Stelle |
11 | //Kommastelle >5 wird plus 1, <5 bleibt unverändert
|
12 | my_itoa(Spannung, Puffer); //Übergabe des Ist-Spannungswertes zum String-Umwandler |
13 | LCD_Ausgabe(Puffer,0,2,3); //Spannungswert-Ausgabe mit Komma an der 2.Stelle [V] und drei Nachkommastellen [mV] |
14 | lcd_string(" V"); //Einheitsangabe |
15 | _delay_ms(200); |
16 | lcd_setcursor(0,0); //setzt Curser an die erste Stelle um den neuen Wert zu überschreiben |
17 | }
|
18 | }
|
batty man schrieb: > return (uint16_t)(sum / nsamples); //Ausgabe des Mittelwertes Hier ist der Wert plötzlich wieder unsigned? Und denk bitte daran, dass der Compiler mit "Integer" rechnet, wenn es nicht anders vereinbart ist (z.B. beide Produktterme sind Long). Stichwort "implizite Typumwandlung". Lass doch im ersten Versuch die Umwandlung in Volt weg. Schreib dir die ADC Rohwerte in ein Array und sieh es dir als Hex-Wert an.
:
Bearbeitet durch User
Georg G. schrieb: > batty man schrieb: >> return (uint16_t)(sum / nsamples); //Ausgabe des Mittelwertes > Hier ist der Wert plötzlich wieder unsigned? Ah - danke, hatte ich noch übersehen. Ist abgeändert. > Und denk bitte daran, dass der Compiler mit "Integer" rechnet, wenn es > nicht anders vereinbart ist (z.B. beide Produktterme sind Long). > Stichwort "implizite Typumwandlung". Wieso sind beide Long?
1 | int16_t ADC_Read_Avg(uint16_t channel, uint16_t nsamples) //uint16_t nsamples ist doch ein normaler Integer |
2 | |
3 | int32_t sum = 0; //1xlong |
2^32 ist zwar ein LONG, doch bei nur 100-facher Messung mit einem Max-ADCVAL-Wert von 512 im Bereich und wenn ich nun anschließend durch 100 teile reicht doch die Um-Deklaration für ADC_Read_Avg mit int16_t. > Lass doch im ersten Versuch die Umwandlung in Volt weg. Schreib dir die > ADC Rohwerte in ein Array und sieh es dir als Hex-Wert an. Klingt einfach und logisch, aber an meiner Umsetzung hapert es bei solchen Analysen. Deswegen nutze ich das LCD um mir was anziegen zu lassen, jedoch muss ich dort ja immer eine Zahl in einen String wandeln. Vllt. geht sogar auch dort was schief??!! Mhh - für die Wandlung und Ausgabe habe ich aus dem Tutorial my_itoa so benutzt wie es drin ist. Und diese ist mit Vorzeichen-Abfrage etc gebaut.
batty man schrieb: > Klingt einfach und logisch, Ist es auch. > aber an meiner Umsetzung hapert es bei > solchen Analysen. Du meinst, du kommst nicht selbst auf die Idee erst mal alles wegzulassen, was nicht unbedingt notwendig ist und nur Potential für weitere Fehler hat? Es gibt nichts, was so einfach wäre, dass man nicht trotzdem einen Fehler einbauen könnte. Fazit: Fang so einfach wie möglich an. Jede weitere Komponente, und sei es nur eine Umrechnung in einen anderen Zahlenbereich, ist erst mal nichts anderes als eine mögliche Fehlerquelle. Brauchst du die Komponente unbedingt, weil sonst die Funktion nicht mehr gegeben ist? Wenn nein, dann lass sie fürs erste weg. Du willst wissen, ob deine Brücke arbeitet? Gut. Brauchst du dazu unbedingt die Ausgabe in Volt (oder µ-Volt)? Nein! Die Ausgabe des Wertes vom ADC, ungeschönt und ungeschminkt, erfüllt genau den gleichen Zweck: zu sehen, ob der ADC so arbeitet wie du dir das vorstellst. Also lass die Umrechnung weg. > Deswegen nutze ich das LCD um mir was anziegen zu > lassen, jedoch muss ich dort ja immer eine Zahl in einen String wandeln. > Vllt. geht sogar auch dort was schief??!! Mhh - für die Wandlung und > Ausgabe habe ich aus dem Tutorial my_itoa so benutzt wie es drin ist. > Und diese ist mit Vorzeichen-Abfrage etc gebaut. Man kann auch fürs erste ganz einfach mal sprintf benutzen. sprintf ist zwar eine eierlegende Wollmilchsau, aber erst mal wissen wir, das sprintf so gesehen keinen Fehler macht.
1 | #define RefSpannung 49789000 //Referenzspannung gemessen mit
|
2 | |
3 | ....
|
4 | |
5 | Spannung = (RefSpannung/512)*adcval; //Ref.-Sp. [µV] (plus Kommastelle zum Runden) durch Auflösung mal aktueller ADC-Wert |
welchen Datentyp hat 'Spannung'? Dir ist hoffentlich klar, dass da riesige Zahlen raus kommen werden? Mit einem int hast du da nichts angefangen. Wenn Spannung aber kein int ist, warum benutzt du dann eine Funktion my_itoa? Das i in 'i to a' steht für int. D.h. in dem Fall wäre das dann die falsche Funktion dafür.
:
Bearbeitet durch User
Karl Heinz schrieb: > Du willst wissen, ob deine Brücke arbeitet? Nicht nur ob sie arbeitet, sondern die genaue Brückenausgangs-Wechselspannung. Ich kann für meinen Versuch nur Wechselspannung benutzen und diese möchte ich anstatt mit einem Multimeter eben mit einem MC erfassen, um anschließend mit den Wert Folgeaufgaben automatisch abarbeiten zu können. > Gut. Brauchst du dazu unbedingt die Ausgabe in Volt (oder µ-Volt)? > Nein! Die Ausgabe in Volt brauch ich für die Erfassung natürlich nicht, jedoch möchte ich die akuell, anliegende Brückenspannung ablesen können und dafür brauch ich das LCD und dann will ich es am Ende auch in Normalform lesen können. > welchen Datentyp hat 'Spannung'?
1 | int32_t Spannung; //da RefSpannung ein großer Wert ist |
2 | int16_t adcval; //da die Übergabe von ADC_Read_Avg auch eine 16-Bit ist |
> Dir ist hoffentlich klar, dass da riesige Zahlen raus kommen werden? Mit > einem int hast du da nichts angefangen. Wenn Spannung aber kein int ist, > warum benutzt du dann eine Funktion my_itoa? Das i in 'i to a' steht für > int. D.h. in dem Fall wäre das dann die falsche Funktion dafür. Das es Integer zu ASCII heißen soll habe ich ja geschnallt und dann hat es zudem auch noch kurioserweise bis dator gut und wie erwartet funktioniert. So bald ich eine positive Differnzspannung habe ist ja auch alles genau so wie ich es haben möchte und was auch wirklich zwischen den beiden Ausgängen des Labornetzteils als Differenz anliegt. In dem Augenblick wo ich eben eine negative Differenz haben müsste, ist meine Anzeige nicht mehr kongruent und zählt anstatt von 0 in den Minusbreich kleiner werden, eben von 9,9 an abwärts.
batty man schrieb: >> Gut. Brauchst du dazu unbedingt die Ausgabe in Volt (oder µ-Volt)? >> Nein! > Die Ausgabe in Volt brauch ich für die Erfassung natürlich nicht, jedoch > möchte ich die akuell, anliegende Brückenspannung ablesen können und > dafür brauch ich das LCD und dann will ich es am Ende auch in Normalform > lesen können. Du verstehs es immer noch nicht. Du bist in der Entwicklungsphase! Das du zum Schluss irgendwann mal die Spannung am LCD stehen haben willst, ist doch klar. Aber du brauchst sie nicht in der Form von Volt, während du die Programmentwicklung machst! Du willst ZUVIEL auf EINMAL. Und das kannst du eben noch nicht.
:
Bearbeitet durch User
Karl Heinz schrieb: > Du verstehs es immer noch nicht. Sorry hatte dich nicht ganz verstanden. Das ich für die Entwicklung das mit sprintf umsetzen soll habe ich gerafft. Dachte an dieser Stelle jetzt nur, dass du das auf für mein realisiertes Projekt meintest, sorry. So nun habe ich mein AD-Wandlungsprogramm auf sprint umgestellt und folgendes kam dabei heraus (mit AREF = 5V): 1.) +Ausgang1 = +Ausgang2 => 2,5V = 2,5V -> ADCW = 0 2.) +Ausgang1 = +Ausgang2 => 2,5V : 0V -> ADCW = 271 3.) +Ausgang1 = +Ausgang2 => 5V : 0V -> ADCW = 487 4.) +Ausgang1 = +Ausgang2 => 2,5V : 2,501V -> ADCW = 1023 Heißt für mich, dass mein Wandlungswert nicht stimmt und ich anstatt von -512-0-511 ein Wertebereich von 0-1023, wobei der erste Teil naheliegend wäre und bei Null-Durchgang fängt er dann eben von oben 1023 an und zählt dann wieder abwärts. Benutzt habe ich Kanal 16 (BA:2560 -> ADC0 minus ADC1 mit 1*Gain). Wo ist denn nun mein Denkfehler? Mein Übungsprogramm:
1 | #include <avr/io.h> |
2 | #include <stdio.h> |
3 | #include "lcd.h" |
4 | #define F_CPU 8000000UL
|
5 | #include <util/delay.h> |
6 | |
7 | void ADC_Init(void) // ADC0 = Port F - Pin 0 (BA: ATmega2560) |
8 | { // ADC1 = Port F - Pin 1 |
9 | ADMUX = (1<<REFS0); //setzt die Referenzspannung als intern und mit AVcc = 5V |
10 | ADCSRA = (1<<ADPS2) | (1<<ADPS1); //Taktfrequ.-Teilungsfaktor (Prescaler Select) = 64 für f = 125 kHz |
11 | ADCSRA |= (1<<ADEN); //aktiviert den AD-Wandler |
12 | ADCSRA |= (1<<ADSC); //startet die AD-Wandlung |
13 | |
14 | while (ADCSRA & (1<<ADSC)) { //wartet auf Beendigung der Wandlung |
15 | }
|
16 | |
17 | (void)ADCW; //im Register abgelegter ADC-Wert |
18 | }
|
19 | |
20 | int16_t ADC_Read(uint8_t channel) //AD-Wandlung - Einzelmessung |
21 | { //Kanal 16 für Differenzmessung ADC0 minus ADC1 |
22 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); //Wahl des Kanals - Maskierung der 5 Mux-Bits |
23 | ADCSRA |= (1<<ADSC); //startet die AD-Wandlung |
24 | while (ADCSRA & (1<<ADSC)) { //wartet auf Beendigung der Wandlung |
25 | }
|
26 | return ADCW; //AD-Wandler auslesen und ausgeben |
27 | }
|
28 | |
29 | int main(void) |
30 | {
|
31 | int16_t adcval; |
32 | char Puffer[20]; |
33 | lcd_init(); |
34 | ADC_Init(); |
35 | while (1) |
36 | {
|
37 | adcval = ADC_Read(16); |
38 | sprintf( Puffer, %d", adcval); |
39 | lcd_string(Puffer);
|
40 | _delay_ms(500);
|
41 | lcd_setcursor(0,0);
|
42 | }
|
43 | return 0;
|
44 | }
|
Ich habe extra nur mit einer Einzelmessung gearbeitet um weitere Eventuallitäten zu unterbinden. Das Labornetzteil ist in seiner Spannungserhaltung sauber und gleichbleibend genug, was sich nachher ja durch meine Brücke stark ändern wird. Das müsste doch vorerst genug einfach gehalten sein. Mhh???
:
Bearbeitet durch User
Hi >Heißt für mich, dass mein Wandlungswert nicht stimmt und ich anstatt von >-512-0-511 ein Wertebereich von 0-1023, Du interpretierst das nur falsch. 1023 = 0x3FF -> -1 MfG Spess
spess53 schrieb: > Du interpretierst das nur falsch. > > 1023 = 0x3FF -> -1 > > MfG Spess Mhh, mein ADC-Wert kommt also von 522 bis bis 1023 für den negativen Bereich und von 0 bis 488 für den Positiven. Das ich das für mich genau so interpretieren kann und auch schon gemacht habe ist klar, nur weiß ich noch nicht so ganz, warum es eben zu keinen Nulldurchbruch mit neg.-ADCW kommt, sondern eben von der 10-Bit Obergrenze nach unten zählt??? Weiterhin ist es doch komisch das ich 501 negative Werte erhalte, die Null und 488 Positive -> das sind doch bloß 990-Werte und keine 1024???
batty man schrieb: > ich noch nicht so ganz, warum es eben zu keinen Nulldurchbruch mit > neg.-ADCW kommt Bitte lies doch das Datenblatt, Abschnitt 26.7 "ADC Conversion Result". Falls du lieber Bilder magst: Figure 26-15 zeigt es sehr gut. Dein ADC misst richtig, du interpretierst nur die Ergebnisse falsch.
Georg G. schrieb: > Bitte lies doch das Datenblatt, Abschnitt 26.7 "ADC Conversion > Result". Falls du lieber Bilder magst: Figure 26-15 zeigt es sehr gut. > > Dein ADC misst richtig, du interpretierst nur die Ergebnisse falsch. So, das habe ich zum zichsten Mal getan. Aus der Zeichnung konnte ich das immer noch nicht wirklich interpretieren, aus der Tabelle mit dem Bsp, dann schon eher. Hatte "kurz :-D "gebraucht und eine lange Excel-Tab. (mit wirklich allen Werten und Umrechnung von pos-Dezimal, neg-Dez., Hexadezimel und Binärcode) später, - dann habe ich mein Problem und damit den besagten Groschen bekommen. Noch ein paar wenige Minuten Später war dann meine Logik und Rechnung mit der des MC kongruent und ich habe dann wirklich das gerafft, schwere Geburt...voll sorry ;-) Nun kann ich aber wie gewünscht meine Spannung anzeigen und das von - bis +. 1.) - So, nun aber mal wieder zum eigentlichen. Trotzdem habe ich nicht den vollen Bereich, warum auch immer weiß ich noch nicht wirklich: -502...o...488; an irgend einer Stelle haperts noch oder ist das normal das es weniger als 10-Bit-Auflösung jedoch weit aus mehr als eine 9-Bit-ige? Weiterhin folgendes: 2.) - In einem Differenzbereich von -30...0...30 kann kein genauer Wert ermittelt werden und meine Anzeige springt nur so fröhlich bis >1000 immer hin und her. Wenn ich das jetzt richtig verstanden habe liegt es an dem zu kleinen und damit nicht genauen Erkennung der Differenz - ist das so richtig??? Nachdem ich nun das ganze mit dem Labornetzteil ausgiebig getestet habe, habe ich mich nun wieder meiner Brücke zugewandt. Funktionsgenerator ein, 1,9kHz und Brückenabgleich mit AC-Multimeter. Ran an den MC und siehe da von 1,94 bis 2,697V ist alles möglich, natürlich je nach dem wann ich die Messung voll führen lasse. Ach so, ich mach das jetzt auch schon wieder mit der 100-fach-Mitterwertbildung. 3.) - Da es schon beim Nullabgleich >1V anzeigt, stellt sich mir die Frage, warum ich die 2,5V DC-OFFSET rausgerechnet werden? Und der Wechselspannungsanteil müsste doch auch an dieser Stelle sich gegeneinander aufheben. 4.) - Und wie kann ich sicher stellen, dass ich immer an der Selben Periodenstelle anfange zu messen, um die heftigen Schwankungen entgegen zu wirken. Das mit der Mehrfachmessung und dem Auslesen des Max-Wertes ist auch klar. Da ich, wie man vllt. schon gemerkt hat nicht Sattelfest mit dem MC-Umgang bin, weiß ich nur nicht wo ich die gemessenen Werte hinschreiben und anschließend auswerten kann bzw. den Maximalen benutzen kann??? Wirklich herzlichen Dank für die Gedult mit mir und der Hilfestellung bei meinem Problem. Das hilft mir echt (auch wenn es nicht gleich danach aussieht) und ich versteh an den gewissen Stellen dann auch das DS besser. Dieses ist nicht gerade mein bester Freund. :D
:
Bearbeitet durch User
Hallo liebe Gemeinde, das mit den Array beschreiben und nach 100 Messungen den Max-Wert entnehmen ist an und für sich ja schon gut, jedoch ist mir jetzt aufgefallen, dass so fern ich in den Nullabgleich komme folgendes Problem habe: - ich habe bis ADCW = 511 eine positive Zahl ... dort könnte ich das mit dem Max-wert umsetzen - komme ich gegen Null kann es bei den 100 Messungen vorkommen, das er mal darunter rutscht und damit mindestens ADCW = 1023 und somit den größten Max-Wert erreicht - dabei kann es aber doch auch vorkommen, dass ich eine neg. Diff. habe, wodurch ich doch nach dem Min-Wert gucken müsste??? Oh man ist das n schwieriger Logik-Fall - Verdamm*** Wechselspannungs-Geschichte
1.) Die ADC Werte mit Vorzeichen merken, also ist 1023 eine -1 2.) den absolut größten Wert nehmen.
Georg G. schrieb: > 1.) Die ADC Werte mit Vorzeichen merken, also ist 1023 eine -1 > 2.) den absolut größten Wert nehmen. Andere Frage: ich kann doch auch 100-Messungen vornehmen und dabei gleich Fallunterscheidung auf pos. OT-Spannung machen. Damit habe ich doch schon erst einmal die Vorunterscheidung zwischen Positiver und negativer Spannungsdifferenz. Während den 100-Messungen kann ich doch in dieser Fallunterscheidung gleich noch nach den Max- und Min- Werten gucken und abschließend immer von einander abziehen. Dann müsste ich meine Wellennulllienie herausbekommen. Diese liegt doch dann relativ zur Bezugsebene und stellt somit meine Spannung dar oder habe ich jetzt wieder ein gravierenden Denkfehler drin??? Ich habe mir das jetzt so vorgestellt:
1 | uint16_t max; //OT-Wechselspannung |
2 | uint16_t min; //UT-AC |
3 | uint8_t i; //Anzahl von Messungen |
4 | uint8_t k; //Häufigkeit Pos-Messung |
5 | uint8_t l; //Häufigkeit Neg-Messung |
6 | int16_t p_Diff; |
7 | int16_t n_Diff; |
8 | char Puffer [10]; |
9 | |
10 | while (1) { |
11 | |
12 | max = 0; //Max-Startwert für jede neue Runde |
13 | min = 1023; //Min-Startwert für jede neue Runde |
14 | k = 0; |
15 | l = 0; |
16 | |
17 | for (i=0; i<100;i++) { //100 Messungungsdurchläufe generieren |
18 | adcval = ADC_Read[16]; //Auselesen des ADCW (ADC0-ADC1) |
19 | if (adcval < 512) { //Prüfung auf pos. Spannung |
20 | k++; //Häufigkeit bei 100-Messungen |
21 | if (max < adcval) { |
22 | max = adcval; //Überschreiben des Max-Wertes |
23 | }
|
24 | if (min > adcval) { |
25 | min = adcval; |
26 | }
|
27 | p_Diff = max - min; //Berechnung der Nullebene für echten ADCW |
28 | }
|
29 | else { //bei neg. Spannung |
30 | l++; //Häufigkeit des Falleintritts/100 Mess |
31 | if (max < adcval) { |
32 | max = adcval; //Überschreiben des Max-Wertes |
33 | max -= 1024; //Umrechnung auf neg.-Dezimalzahl |
34 | }
|
35 | if (min > adcval) { |
36 | min = adcval; //Überschreiben der Min-Spannung |
37 | min -= 1024; //Umrechnung auf neg.-Dezimalzahl |
38 | }
|
39 | n_Diff = max + min; //Berechnung der Nullebene für echten ADCW |
40 | }
|
41 | }
|
42 | if (k > l) { |
43 | Puffer = " "; |
44 | sprintf (Puffer, "%5d", p_Diff); |
45 | }
|
46 | else { |
47 | Puffer = " "; |
48 | sprintf (Puffer, "%5d", n_Diff); |
49 | }
|
50 | lcd_string (Puffer); |
51 | }
|
Kann jmd meine Gedanken nachvollziehen? Und wenn ja, ist dies mit dem was ich eigentlich machen möchte funktional umsetzbar? Das mit den Absolutwerten und dem merken des Vorzeichens habe ich für mich so noch nicht als funktional im Kopf abgeleget! Ich habe doch 3 Zustände: - OT und UT sind pos - OT ist pos und UT ist neg - OT und UT sind neg oder nicht???
:
Bearbeitet durch User
Tach auch, neuer Zwischenstandsbericht ;-) ich habe das jetzt einfach mit den Max-Werten probiert und so lange mein Brückenabgleich mit einem Max-KondensatorKapazität hergestellt ist, ist das soweit auch echt funktional. Ich darf auf keinen Fall einen Abgleich in Kondensator-Zwischenstellung machen, da ich dann einen neg- und pos- Spannungsausschlag bekommen kann. Also ich habe jetzt erstmal für die Vereinfachung ein Abgleich Auf Kapazitäts-Max getätigt. Was jetzt dabei raus kommt ist folgendes: 1.) - mein ADCW ist minimal 2 und niemals 1 oder gar 0 auch wenn an gleicher Messabnahmestelle mein Multimeter mir AC = 0,000V ausgibt 2.) bei der maximalen Verstellung der Kapazitäten zu einandern: - mein ADCW ist maximal 486 und keine 511 !!! für die entgegengesetzte Stellung der Kapazitätsweret: - mein ADCW ist minimal 522 und keine 512 !!! -> Damit habe ich doch einen Auflösungsverlust von 25 Werten! Kann mir wenigstens dieser Zusammenhang erläutert werden? DEnn dieses Phänomen habe ich beim Labornetzteil mit DC, als auch jetzt bei meiner Messbrücke mit AC. THX
batty man schrieb: > 1.) > - mein ADCW ist minimal 2 und niemals 1 oder gar 0 auch wenn an gleicher > Messabnahmestelle mein Multimeter mir AC = 0,000V ausgibt Da hast du gleich einen guten Hinweis darauf, was sich dein ADC an Rauschen und Störungen einfängt. > 2.) > bei der maximalen Verstellung der Kapazitäten zu einandern: > - mein ADCW ist maximal 486 und keine 511 !!! Vermutlich ist die Referenzspannung zu nahe an VCC. Bei Differenzmessungen muss mindestens ein Abstand von iirc 500mV eingehalten werden. Das Datenblatt hilft dir da weiter. > für die entgegengesetzte Stellung der Kapazitätsweret: > - mein ADCW ist minimal 522 und keine 512 !!! Das kann nicht sein, weil in der anderen Richtung negative Werte geliefert werden. Offenbar hast du das immer noch nicht realisiert. Ansonsten: Schau ins Datenblatt, ob es auch für den unteren Wert einen Sicherheitsabstand zu GND geben soll.
Georg G. schrieb: > batty man schrieb: >> 1.) >> - mein ADCW ist minimal 2 und niemals 1 oder gar 0 auch wenn an gleicher >> Messabnahmestelle mein Multimeter mir AC = 0,000V ausgibt > Da hast du gleich einen guten Hinweis darauf, was sich dein ADC an > Rauschen und Störungen einfängt. Ah ok. Gut zu wissen. Ich habe jetzt einfach nur den Faktor 2 abgezogen und fertig. Damit kann ich erstmal leben. Das wird dann auch die Erklärung dafür sein, warum hintenraus ich immer ca. +/-0,1V als Unterschied zw. Messwert Multimeter und MC bekomme. >> 2.) >> bei der maximalen Verstellung der Kapazitäten zu einandern: >> - mein ADCW ist maximal 486 und keine 511 !!! > Vermutlich ist die Referenzspannung zu nahe an VCC. Bei > Differenzmessungen muss mindestens ein Abstand von iirc 500mV > eingehalten werden. Das Datenblatt hilft dir da weiter. Ich benutze die interne Ref.-Sp. von 5V und es liegen gemessen zw. AREF-Pin und GND 4,988V an. Also wird dem schon so stimmen und ist halt so. Mein AC-Spannungsmaximum ist 3,3V laut Multimeter (Eff.-Wert!). Rechne ich noch Sqrt(2) dazu, so bin ich knapp bei 4,7V Paek. Aus diesem Grund geht auch nur 5V als Ref.-Sp.. >> für die entgegengesetzte Stellung der Kapazitätsweret: >> - mein ADCW ist minimal 522 und keine 512 !!! > Das kann nicht sein, weil in der anderen Richtung negative Werte > geliefert werden. Offenbar hast du das immer noch nicht realisiert. > Ansonsten: Schau ins Datenblatt, ob es auch für den unteren Wert einen > Sicherheitsabstand zu GND geben soll. Also anders ausgedrückt, egal was ich bisher gemacht und probiert habe, bekomme ich vom Wandler keine Negativwerte sondern: ADCW = 511 => 511 ADCW = 0 => Null ADCW = 1023 => -1 dann entspricht ADCW = 512 doch => -512 egal wie ich es am Labornetzteil geprüft habe, ich habe den digitalen Wandlungswert ohne jegliches umrechnen, interpretieren, etc. als ganz normale reelle Zahl von eben 0 bis 1023 erhalten, wobei ab einem ADCW = 512 das eine negative Spannungsdifferenz entsprechen würde. Die Ausgabe liefert einfach immer ein positives Ergebnis. Demnach ist dann ADCW = 513 => -511 ; ADCW = 514 => -510 usw. bis eben ADCW = 1022 => -2 und ADCW = 1023 => -1. Möchte ich für mich mein ADCW als negative Zahl dargestellt bekommen so muss ich ab ADCW >511 immer ADCW -= 1024 rechnen. Dann gibt mir mein MC auch die entsprechenden Negativwerte aus. Was habe ich denn hier nicht verstanden??? Ich kann doch nichts anderes mitteilen, als das was ich vor mir habe. Das ihr mehr Ahnung und Erfahrung damit habt ist mir klar und wenn ihr wehement meint ich mache an irgend einer Stelle was vollkommen falsch, dann glaub ich das ja, nur ich seh eben nicht was??!!
Hi >Ich benutze die interne Ref.-Sp. von 5V und es liegen gemessen zw. >AREF-Pin und GND 4,988V an. Also wird dem schon so stimmen und ist halt >so. Bei differentieller Messung darf die Referenzspannung max. VCC-0,5V betragen. Siehe: Table 31-10. ADC Characteristics, Differential Channels (Continued) S.367 Stimmt also nicht. MfG Spess
spess53 schrieb: > Bei differentieller Messung darf die Referenzspannung max. VCC-0,5V > betragen. ... > Stimmt also nicht. Ähm sorry, ich meinte dass das von eurer Aussage schon stimmen wird, nicht das an dieser Stelle meine benutzten Einstellungen schon stimmen. Also das ich aufgrund der Tatsache VCC-0,5V keine vollen 511 sondern eben nur 486 bekomme. Da ich aber doch die interne Ref benutze gehts eben nicht anders, bzw. ich muss mir eine externe über den AREF-Pin einspeisen und die auf 4,5V einstellen und anschließend mein Spannungs-Differnz-Maximum (Peak) der Brücke reduzieren, um die 4,5V nicht zu übersteigen. ahh, oder aber ich hebe Vcc einfach auf 5,5V an... Das müsste doch auch gehen. Gleich mal Probieren. --- Bearbeitet: - Gut das mit den 5,5V Vtarget funzt nicht, denn auch die VRef hat sich damit auf 5,5V erhöht. Verdammt, dann doch was basteln und extern von wo auch immer hernehmen. Es könnt alles so einfach sein, isses aber nich!!
:
Bearbeitet durch User
batty man schrieb: > Es könnt alles so einfach sein, isses aber nich!! Im Prinzip schon, du hast die Lösung selbst schon geschrieben: Halte Abstand von den Grenzen GND und VCC, reduziere deinen Pegel ein wenig. Das ist dann nicht 100% nach Datenblatt, funktioniert aber.
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.