Hallo, auch auf die Gefahr hin, dass dieser Thread als "meckern" bezeichnet wird, möchte ich diesen Beitrag: Beitrag "Temperaturmessdifferenzen zwischen Atmegas" nochmal aufgreifen. Ich habe nun auf alle 5 kürzlich gleichzeitig bestellte Atmega16 "in Serie" dieselbe Software aufgespielt und diese Prozssoren der Reihe nach in die Fassung meiner Heizungssteuerung gesteckt. Beispielhaft kenne ich die reellen Temperaturen: Außentemperatur (AT) 6 Grad, Temperatur des Viessmann-Brenners (BT): 57 Grad also: Real_____: AT: 6 Grad BT: 57 Grad Atmega_#1: AT 2 Grad BT: 55 Grad Atmega_#2: AT 8 Grad BT: 59 Grad Atmega_#3: AT 0 Grad BT: 48 Grad Atmega_#4: AT 6 Grad BT: 55 Grad Atmega_#5: AT 12 Grad BT: 63 Grad Dies sind also erhebliche Unterschiede! Nicht nur von Prozessor zu Prozessor, sondern auch innerhalb eines Prozessors von Port zu Port. Die gesamte Diskussion (s.o.) bzgl. der umgebenden Peripherie zielt ins Leere, denn die Bedingungen sind für jeden Prozessor gleich, absolut gleich! Und nochmal: Dies ist kein "Rumheulen" oder eine "Beschwerde"! Es soll nur ein Hinweis auf die erhebliche Streuung von Prozessor zu Prozessor sein, die dem einen oder anderen bei einer "Fehlersuche" vielleicht helfen kann. Also bitte nicht persönlich angegriffen fühlen! Auch den "Atmega" möchte ich damit nicht beleidigen! In diesem Zusammenhang ist es auch gar nicht wichtig, ob diese massiven Differenzen im Datenblatt als Toleranzen angegeben werden oder nicht und ob es ECHTE Ausreisser sind. A. Geigenberger (Zum Messvorgang: Die ersten drei Messungen werden verworfen, dann 30mal gemessen und das Ergebnis entsprechend mathematisch ausgewertet. Temperaturfühler: KTY 81 )
:
Bearbeitet durch User
Was sind das für ATMegas wo ein Temperatursensor verbaut ist. Das ist ja praktisch.
???? -> (Zum Messvorgang: Die ersten drei Messungen werden verworfen, dann 30mal gemessen und das Ergebnis entsprechend mathematisch ausgewertet. Temperaturfühler: KTY 81 ) natürlich mit Spannungsteiler! [Bitte länger als 10 Sekunden lesen!]
Alfons G. schrieb: > Die gesamte Diskussion (s.o.) bzgl. der umgebenden Peripherie zielt ins > Leere, denn die Bedingungen sind für jeden Prozessor gleich, absolut > gleich! wenn die Interne Referenz verwendet wird - dann ist es nicht egal. Sie ist in jedem µC anders. Ohne jetzt den anderen Thread gelesen zu haben, wie groß ist denn die Abweichung in den werten die der ADC liefert? Also vor der Umrechnung. Wenn 1 Bit schon 2 Grad ausmacht, und die Temperatur genau in der Mitte liegt, dann kann es schon mal um 2 Grad schwanken.
Alfons G. schrieb: > ???? -> > (Zum Messvorgang: Die ersten drei Messungen werden verworfen, dann 30mal > gemessen und das Ergebnis entsprechend mathematisch ausgewertet. > Temperaturfühler: KTY 81 ) > natürlich mit Spannungsteiler! [Bitte länger als 10 Sekunden lesen!] Den Wink mit dem Zaunpfahl nicht verstanden, was. Ein ATMega hat auch keine 2 Pins die für PTCs gedacht sind! Der hat ADC, Analog Comp und GPIO. Was hast du genommen, wie hast du das beschaltet, wie rechnest du von ADC-Wert auf Temperatur um. Also wie immer: Code, Schaltplan. Und DANN kann man Rückschlüsse auf die Streuung zwischen ADCs ziehen. Bisher hast du nur ne völlig schwachsinnige Messreihe gemacht und den AVRs den schwarzen Peter untergeschoben. Ein Beweis dass die auch Schuld sind, sehe ich nirgendwo. Noch nichtmal eine plausible Vermutung, gar nichts.
" wenn die Interne Referenz verwendet wird - dann ist es nicht egal. Sie ist in jedem µC anders. " ... und nennt man das nicht "Streuung"? Und nur auf diese wollte ich aufmerksam machen.
THOR schrieb: > Was sind das für ATMegas wo ein Temperatursensor verbaut ist. Das ist ja > praktisch. 48..328
Alfons G. schrieb: > " wenn die Interne Referenz verwendet wird - dann ist es nicht egal. Sie > ist in jedem µC anders. " > ... und nennt man das nicht "Streuung"? Und nur auf diese wollte ich > aufmerksam machen. wer ohne Kalibrierung messen will, verwendet nicht die interne Referenz. Also hast du damit nur gezeigt das das Datenblatt recht hat?
Peter II schrieb: > wer ohne Kalibrierung messen will, verwendet nicht die interne Referenz. > Also hast du damit nur gezeigt das das Datenblatt recht hat? genau, dafür gibt es externe Referenzen. Ich verstehe den Thread nicht, ein ATmega ist kein kalibriertes Messgerät aber mit oder ohne Abgleich in den benannten Grenzen nutzbar.
Alfons G. schrieb: > ... und nennt man das nicht "Streuung"? Und nur auf diese wollte ich > aufmerksam machen. Das ist keine Streuung bei dir, das sind Fehler. Sehr grosse Fehler. Da stimmt etwas nicht. Und zwar bei dir - entweder deine Schaltung oder dein Program. P.S. Messe mal die Spannung am AREF Pin.
:
Bearbeitet durch User
Alfons G. schrieb: >> " wenn die Interne Referenz verwendet wird - dann ist es nicht >> egal. Sie ist in jedem µC anders. " > ... und nennt man das nicht "Streuung"? Und nur auf diese wollte ich > aufmerksam machen. Ach! 1. steht das im Datenblatt 2. weiß das jeder, der ernsthaft mit dem ADC und der internen Referenz arbeitet 3. braucht man für eine ratiometrisch arbeitende Sensoranordnung die interne Referenz gar nicht Zusammenfassung: du hast mit einer Schaltung, die unnötig sensibel auf die Serienstreuung der Spannungsreferenz ist, herausgefunden daß das Datenblatt korrekt ist. Toll!
Axel S. schrieb: > Zusammenfassung: du hast mit einer Schaltung, die unnötig > sensibel auf die Serienstreuung der Spannungsreferenz ist, > herausgefunden daß das Datenblatt korrekt ist. Toll! Auch so dürfte der Fehler nicht mehr als +/- 10 Prozent betragen. Seine Messungen sind Lichtjahre davon entfernt.
Aber immerhin! Es gibt nämlich tatsächlich Leute, die nicht täglich und ernsthaft mit ADC und internen Referenzen arbeiten und trotzdem einen Atmega Prozessor verwenden. Und für diese Menschen ist es schon erstaunlich, welche Toleranzen als "ganz normal" angesehen werden.
Marc V. schrieb: > Auch so dürfte der Fehler nicht mehr als +/- 10 Prozent betragen. > Seine Messungen sind Lichtjahre davon entfernt. das könne wir nicht wissen, wenn er die Temperatur auf einen Bereich von 0.01V - 0.05V umsetzt und dann mit der internen Referenz misst sind das weniger als 10%.
Alfons G. schrieb: > Und für diese Menschen ist es schon erstaunlich, welche Toleranzen als > "ganz normal" angesehen werden. Was als "ganz normal" angesehen wird und was als "ganz unnormal", ist in diesem Zusammenhang uninteressant. Du machst ganz einfach etwas falsch. Und willst mit Gewalt das auf die MEGAs abschieben...
Alfons G. schrieb: > Und für diese Menschen ist es schon erstaunlich, welche Toleranzen als > "ganz normal" angesehen werden. Auf die Frage, ob die interne Referenz verwendet wird, hast Du nie eindeutig geantwortet. In Deinem anderen Beitrag hatte ich dies vermutet und Dir empfohlen, Vcc als Referenz zu verwenden. Aber irgendwie bist Du diesbezüglich wohl resistent. Die Daten der int. Referenz stehen im Datenblatt und sind damit genormt oder einfach "normal".
Ich poste mal einfach die Routine, die den Messwert ausgibt. ( ... und ich möchte wirklich den Atmega nicht "beleidigen", sondern (als "Neuling" nur ein wenig mehr verstehen, Sorry!)
1 | /* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
|
2 | long ReadChannel(short muxy) |
3 | {
|
4 | char buf[9]; |
5 | long result; |
6 | unsigned char u; |
7 | result = 0; |
8 | u = 0; |
9 | ////////////////////////////////////////////
|
10 | ADMUX = muxy; // Kanal waehlen |
11 | // REFS1 = 1 und REFS0 = 1 // Interne 2,56 Volt
|
12 | // REFS1 = 0 und REFS0 = 1 // AVCC als Referenz
|
13 | ADMUX |= (0<<REFS1) | (1<<REFS0); // AVCC als referenz , also ca 5 Volt |
14 | // ADMUX |= (1<<REFS1) | (1<<REFS0); // so sieht 2,5 Volt aus
|
15 | |
16 | _delay_ms(4); |
17 | ////////////////////////////////////////////
|
18 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung mit 5 Volt |
19 | while ( ADCSRA & (1<<ADSC) ) |
20 | { ; } // auf Abschluss der Konvertierung warten |
21 | result = ADCW; // ADCW muss einmal gelesen werden, |
22 | _delay_ms(4); |
23 | ////////////////////////////////////////////
|
24 | ADMUX |= (1<<REFS1) | (1<<REFS0); // jetzt 2,5 Volt |
25 | _delay_ms(2); |
26 | ////////////////////////////////////////////
|
27 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung; jetzt mit 2,5 Volt |
28 | while ( ADCSRA & (1<<ADSC) ) |
29 | { ; } // auf Abschluss der Konvertierung warten |
30 | result = ADCW; // ADCW muss einmal gelesen werden, |
31 | _delay_ms(3); |
32 | ////////////////////////////////////////////
|
33 | |
34 | if ( (result > 2000 ) || (result < 200 ) ) // damit werden "Hardware-Fehler" gemeldet |
35 | {
|
36 | y.Flag_alarm_kanal = 1; |
37 | lcd_clrscr(); |
38 | lcd_puts("Fehler! Kan: "); |
39 | itoa( muxy , buf, 10); lcd_puts(buf); |
40 | warten(20); |
41 | lcd_clrscr(); |
42 | } // Wenn Fehler in "ReadChannel" auftritt |
43 | |
44 | u = 0; |
45 | while (u < 5) |
46 | { ADCSRA |= (1<<ADSC); // fünf ADC-Wandlungen "verwerfen) |
47 | while ( ADCSRA & (1<<ADSC) ) |
48 | { ; } // auf Abschluss der Konvertierung warten |
49 | u = u + 1; |
50 | }
|
51 | |
52 | result = 0; |
53 | u = 0; |
54 | while (u < 30) |
55 | { ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
56 | while ( ADCSRA & (1<<ADSC) ) |
57 | { ; } // auf Abschluss der Konvertierung warten |
58 | _delay_ms(3); |
59 | result = result + ADCW; // result ist 10-fach RohT |
60 | u = u + 1; |
61 | _delay_ms(1); |
62 | }
|
63 | |
64 | result = result / 30 ; |
65 | if (y.Flag_Rohwerte == 0) |
66 | {
|
67 | result = ( result - 610 ) ; //630; |
68 | result = ( result * 100 ) ; |
69 | result = (result / 308 ) ; |
70 | // Subtrahieren verschiebt Kurve parallel nach unten
|
71 | // Dividieren verändert die Steigung der kurve : je groesser desto flacher
|
72 | |
73 | // ab jetzt Korrektur von Processor zu Prozessor
|
74 | result = ( result * 100 ) ; |
75 | result = ( result / TempKorrekturfaktor ) ; // je nach Processor (neu eingeführt, damit vom Anwender Korrekturen durchgeführt werden können) |
76 | result = ( result + TempVerschieben ); // je nach Processor (neu eingeführt, damit vom Anwender Korrekturen durchgeführt werden können) |
77 | }
|
78 | |
79 | _delay_ms(4); |
80 | return result ; |
81 | }
|
82 | /* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
|
:
Bearbeitet durch Moderator
Alfons G. schrieb: > Und für diese Menschen ist es schon erstaunlich, welche Toleranzen als > "ganz normal" angesehen werden. Ohne jeglichen Abgleich liegt der Fehler normalerweise unter 1,5%. Nun, 1,5% sind bestimmt nicht normal aber weeeeeiiiit von deinen "Messergebnissen" entfernt.
Alfons G. schrieb: > Ich poste mal einfach die Routine, die den Messwert ausgibt. besser ist erst einmal zu messen. ` Welche Spannung hat die Referenz? Welche Spannung liegt am ADC an? dann schaut man was in ADW drin steht. -> passt das zu den Spannung? dann kann man im code weitermachen.
Axel S. schrieb: > 3. braucht man für eine ratiometrisch arbeitende > Sensoranordnung die interne Referenz gar nicht sehr sehr guter Einwand was ich total übersah, mit bekannten ADC Fehler, 1,5% Sensor und 1%er Vorwiderstand können unmöglich Fehler im 10-100% Bereich kommen, OK mehr als 2-stellige % Meßfehler nur am Anfangsmesswert, nie am Skalenendmesswert! Da klemmt was anderes beim TO, evtl. das ganze Verständnis.
:
Bearbeitet durch User
Joachim B. schrieb: > mit bekannten ADC Fehler, 1,5% Sensor und 1%er Vorwiderstand können > unmöglich Fehler im 10-100% Bereich kommen. klar doch. Weil wir(ich) nicht wissen wie der Messbreich im ADC Bereich liegt. Wenn die Schaltung für -200Grad bis +1600Grad ausgelegt ist, dann kann man kaum mit 10Bit sinnvoll 10-30Grad messen.
Alfons G. schrieb: > //////////////////////////////////////////// > ADCSRA |= (1<<ADSC); // eine ADC-Wandlung mit 5 Volt > while ( ADCSRA & (1<<ADSC) ) > { ; } // auf Abschluss der Konvertierung warten > result = ADCW; // ADCW muss einmal gelesen werden, > _delay_ms(4); > //////////////////////////////////////////// > ADMUX |= (1<<REFS1) | (1<<REFS0); // jetzt 2,5 Volt > _delay_ms(2); > //////////////////////////////////////////// > ADCSRA |= (1<<ADSC); // eine ADC-Wandlung; jetzt mit 2,5 > Volt > while ( ADCSRA & (1<<ADSC) ) > { ; } // auf Abschluss der Konvertierung warten > result = ADCW; // ADCW muss einmal gelesen werden, > _delay_ms(3); Was soll das denn? Erst mit 5 V Referenz messen, Ergebnis verwerfen und dann noch einmal mit der ungenauen 2,5 V Referenz? Da kann nur Müll herauskommen!
Nein, da kommt kein Müll heraus, denn die Anlage läuft bei mir schon über 5 Jahre!! (Damit gebe ich dem Messsystem die nötige "Pause") Den Messbereich sieht man nun am "Quellcode": Eine Temperaturdifferenz von 1 Grad ergibt ein Differenz des ADCW-Wertes von ca. 3. Beispiel: ADCW: (Beispiel) 700 - 610 = 90 * 100 = 9000 / 308 = 29,2208 Grad 703 - 610 = 93 * 100 = 9300 / 308 = 30,1948 Grad Aber egal: Nochmal zu meiner (Mess)-Anordnung: Ich tausche der Reihe nach einen Prozessor mit dem anderen aus; ALLES andere bleibt VÖLLIG gleich. Und ich finde die oben beschriebenen Messdifferenzen. Bitte entschuldigt, aber das ist mir unverständlich: "Die gesamte Diskussion (s.o.) bzgl. der umgebenden Peripherie zielt ins Leere, denn die Bedingungen sind für jeden Prozessor gleich, absolut gleich!" (sh. Eingangsthread)
Wenn man alles nach deinem Wunsch herausnimmt bleibt nur mehr die Referenzspannung als Quelle des Übels über. lt Datenblatt des Atmega 2560 (den ich verwende): VINT Internal Voltage Reference Min Typ Max 2.3 2.56 2.8 Das ist ja nicht gerade wenig. Du kanst die mit einem gutenn Multimeter ja auf dem passenden Pin messen, wenn es hochohmig genug ist. Mario
Alfons G. schrieb: > Ich tausche der Reihe nach einen Prozessor mit dem anderen aus; ALLES > andere bleibt VÖLLIG gleich. Und damit änderst Du jedesmal auch die Referenzspannung. Ich geb's auf!
:-) Man soll nie aufgeben! Und - - jetzt habe ich es verstanden. ABER: Die Referenzspannung streut zwichen 2.3 und 2.8 Volt. Das ist enorm viel! Und damit streuen die Prozessoren ebenfalls untereinander in dieser Größenordnung. Ok, steht so im Datenblatt und ist ja völlig in Ordnung!. Wenn man aber kein so intimer Kennerder Materie ist, dann ist man schon erst einmal verwundert, was sich bei einem schlichten Prozessorwechsel so alles verändert. Ich hätte diese Größenordnung jedenfalls nicht für möglich gehalten und vielleicht hilft dieser Thread ja mal einem anderen Leser. Jedenfalls Danke! A. Geigenberger
Alfons G. schrieb: > en Messbereich sieht man nun am "Quellcode": Eine Temperaturdifferenz > von 1 Grad ergibt ein Differenz des ADCW-Wertes von ca. 3. > Beispiel: > > ADCW: (Beispiel) > 700 - 610 = 90 * 100 = 9000 / 308 = 29,2208 Grad > 703 - 610 = 93 * 100 = 9300 / 308 = 30,1948 Grad Naja, und die bis 11,5% Abweichung (+-0.3 V bei 2,6V nominal) nach Datenblatt sind bei 700 counts eben 80 counts oder 26°C. AFAIK kommt INL und DNL noch dazu, das ist aber nur 1 oder 2°C. Da bleiben Deine Chips oben alle deutlich drunter. Hier führt das Einsparen von 1,50€ für eine REF5025 dazu dass man jeden Atmega einzeln kalibrieren muss.
Ich fasse das "Programm" mal in Prosa zusammen: 1. eine Wandlung mit VREF=AVCC, wofür auch immer 2. eine Wandlung mit VREF=Bandgap, überschreibt das Ergebnis von 1. 3. ein Vergleich mit zumindest einem unmöglichen ADC-Wert als "Fehlerdetektion" 4. 5 Messungen verwerfen 5. 30 weitere Messungen mitteln 6. irgendwelche undurchsichtigen Rechnereien mit dem Mittelwert, aber keine Korrektur der Sensor-Nichtlinearität wenn man jetzt die ganze Umrechnerei mal weglassen würde und nur Rohdaten zwischen den einzelnen µC vergleicht, dann sollten die Abweichungen etwa in der selben Größenordnung liegen wie die erlaubten Abweichungen der Referenzspannung. D.h. der größte gemessene Wert sollte nicht größer sein als das 1.22-fache des kleinsten gemessenen Werts (2.8V/2.3V ~= 1.22) Eine Kalibrierung auf die Referenzspannung würde jetzt bei den Rohdaten ansetzen. Und erst danach würde man jegliche Rechnungen zur Kennlinien- begradigung und zum Skalieren des Meßwerts auf eine Temperaturskala machen. Der weitaus cleverere Weg wäre allerdings, den Spannungsteiler aus KTY81 und Festwiderstand so auszulegen, daß beide in der Mitte des gewünschten Temperaturmeßbereichs etwa den gleichen Widerstand haben. Und dann mit VREF=AVCC messen (vulgo: ratiometrisch). Dabei kürzen sich dann alle Abhängigkeiten von Betriebsspannung und Referenzspannung heraus. Die Auflösung ist abhängig von der Steilheit des Sensors (das rechne ich jetzt nicht nach). Ob man eine Linearisierung braucht, hängt vom Meßbereich ab. Wenn es nur um die Raumtemperatur geht, sicher nicht.
Alfons G. schrieb: > " wenn die Interne Referenz verwendet wird - dann ist es nicht egal. Sie > ist in jedem µC anders. " > ... und nennt man das nicht "Streuung"? Und nur auf diese wollte ich > aufmerksam machen. So ist das, scheint hier aber nicht verstanden worden zu sein :-( Joachim B. schrieb: > mit bekannten ADC Fehler, 1,5% Sensor und 1%er Vorwiderstand können > unmöglich Fehler im 10-100% Bereich kommen, OK mehr als 2-stellige % > Meßfehler nur am Anfangsmesswert, nie am Skalenendmesswert! Das Datenblatt vom ATmega16(L) ist in sich widersprüchlich. Seite 42: "The 2.56V reference to the ADC is generated from the internal bandgap reference." und etwas weiter unten: Symbol Parameter Min Typ Max Units VBG Bandgap reference voltage 1.15 1.23 1.4 V http://www.atmel.com/images/doc2466.pdf Das reicht allemal, solch heftige Abweichungen zwischen den Exemplaren zu erklären!
Manfred schrieb: > Das reicht allemal, solch heftige Abweichungen zwischen den Exemplaren > zu erklären! Nein. Punkt.
Marc V. schrieb: > Manfred schrieb: >> Das reicht allemal, solch heftige Abweichungen zwischen den Exemplaren >> zu erklären! > > Nein. > Punkt. Er stimmt dir zu, und du sagst "Nein."?
Axel S. schrieb: > Der weitaus cleverere Weg wäre allerdings, den Spannungsteiler aus KTY81 > und Festwiderstand so auszulegen, daß beide in der Mitte des gewünschten > Temperaturmeßbereichs etwa den gleichen Widerstand haben. Und dann mit > VREF=AVCC messen (vulgo: ratiometrisch). Hier ein Beispiel, was allerdings noch eine LC-Anzeige ansteuert. Die ratiometrische Messung und die Linearisierung sollten aber nachvollziehbar sein: http://mino-elektronik.de/7-Segment-Variationen/LCD.htm#lcd7
Noch eine kurze Frage: Wenn ich nun eine externe Referenzspannung benutzen wollte, wie wäre dies zu programmieren? ADMUX |= (0<<REFS1) | (1<<REFS0); // AVCC als referenz , also ca 5 Volt ADMUX |= (1<<REFS1) | (1<<REFS0); // so sieht 2,5 Volt aus ADMUX |= (0<<REFS1) | (0<<REFS0); // So ?
Marc V. schrieb: > Alfons G. schrieb: >> Und für diese Menschen ist es schon erstaunlich, welche Toleranzen als >> "ganz normal" angesehen werden. > > Ohne jeglichen Abgleich liegt der Fehler normalerweise unter 1,5%. > > Nun, 1,5% sind bestimmt nicht normal aber weeeeeiiiit von deinen > "Messergebnissen" entfernt. Ach nee. Da fehlts gewaltig an den Grundlagen :-( Der Fehler im ADC hat einen absoluten Anteil und einen relativen. Der relative ist z.B. +-x% vom Messwert , der absolute ist +-xLSB absolut. Beim ATMEGA16 steht zum Beispiel im Datenblatt, dass der ADC Typischerweise +-3LSB genau ist. Das steht auf S297 unter "Absolute Accuracy"). Das ist der ABSOLUTE Anteil am FEhler. Und wenn der Temperaturmesswert nur 10LSB groß ist, ja dann ist man TYPISCHERWEISE schon 30% daneben. Und da ist von den realtiven Anteilen, dem Rauschen auf der Versorgung und der Ungenauigkeit der Referenz noch gar nichts gesagt. Und genau deshalb muss uns der TO seine Schaltung zeigen.
Alfons G. schrieb: > ADMUX |= (0<<REFS1) | (0<<REFS0); // So ? ADMUX |= (0<<REFS1) | (1<<REFS0); // So!
m.n. schrieb: > Alfons G. schrieb: >> ADMUX |= (0<<REFS1) | (0<<REFS0); // So ? > > ADMUX |= (0<<REFS1) | (1<<REFS0); // So! <<<<<<<<<< Hier: Beitrag "ADC - interne Referenzspannung" finde ich das so: Wenn ich aber das Datenblatt lese, dann sollte dies doch gar nicht funktionieren, da sich folgendes gilt: REFS1 REFS0 0 0 extern 0 1 intern AVCC 1 0 reserviert 1 1 2.56V --> also jeweils "0" (??)
Versuchs mal damit; dieses verodern mit geschobenen Nullen bringt rein gar nix //extern ADMUX &= ~((1<<REFS1) | (1<<REFS0)); //intern AVCC ADMUX &= ~(1<<REFS0); ADMUX |= (1<<REFS0); //2.56V ADMUX |= (1<<REFS0)|(1<<REFS0); Grüße Henning
EDIT: //intern AVCC ADMUX &= ~(1<<REFS1); ADMUX |= (1<<REFS0); //2.56V ADMUX |= (1<<REFS0)|(1<<REFS1);
> Aber egal: Nochmal zu meiner (Mess)-Anordnung: > Ich tausche der Reihe nach einen Prozessor mit dem anderen aus; ALLES > andere bleibt VÖLLIG gleich. Und ich finde die oben beschriebenen > Messdifferenzen. > Bitte entschuldigt, aber das ist mir unverständlich: > > "Die gesamte Diskussion (s.o.) bzgl. der umgebenden Peripherie zielt ins > Leere, denn die Bedingungen sind für jeden Prozessor gleich, absolut > gleich!" (sh. Eingangsthread) Wer schon nicht den Unterschied zwischen Controller und Prozessor nicht kennt, der sollte hier mal gaaaaanz langsam den Mund halten!
Für diese Messung ist doch gar keine genaue Referenz notwendig. Wichtig ist nur, dass die verwendete Referenz mit der Versorgung des Spannungsteilers (KTY81 und Rfix) identisch ist und keine Ripple etc aufweist. Denn das Einzige, was interessiert, ist das Verhältnis Spannung am KTY81 --------------------------------- Gesamtspannung am Spannungsteiler Das Schlimmste, was Du machen kannst, ist die interne Referenzspannung für den ADC in der Firmare auszuwählen, während Dein Spannungsteiler an AVCC oder gar an VCC angeklemmt ist. Deshalb wäre es wichtig, wenn Du mal postest, wie GENAU Dein ADC und Dein Spannungsteiler des KTY81 verschaltet sind. Viele Grüße, Stefan
Marc V. schrieb: > Nein. > Punkt. Mensch Marc: du rechnest die ganze Zeit nur in prozentualen Fehlern, und ignorierst dabei, dass "10% Temperaturfehler" nicht bedeuten, dass der ADC um 10% daneben liegt. Die 5° Abweichung sind 10% vom aktuellen Temperaturwert (nicht 10% vom vollen Messbereich). So lange der TO nicht klar stellt, wie die Temperatur auf die ADC-Spannung abgebildet wird, könnte die 5° Temperaturabweichung irgendeinem beliebigen ADC-Fehler entsprechen. Es wäre ja theoretisch auch denkbar, dass er den KTY81 so doof einsetzt, dass 5° grade mal einem LSB des ADC entsprechen. Dummerweise ziert sich der TO harnäckig, seine konkrete Schaltung zu zeigen, so dass man schlicht keine seriöse Aussage zu dem tatsächlichen ADC-Fehler machen kann. Er hat leider immer noch nicht kapiert, dass die Größe des Temperaturfehlers vollständig davon abhängt, wie er die Temperatur in eine Spannung umsetzt (welchen Temperaturmessbereich er auf den Spannungsbereich des ADC abbildet). Im Ursprungsthread kam nach wiederholtem Nachbohren wenigstens mal heraus, dass er einen KTY81 in einem Spannungsteiler betreibt. Beitrag "Re: Temperaturmessdifferenzen zwischen Atmegas" Jetzt muss man zwar immer noch raten in welchem Teilerverhältnis und mit welcher Versorgung, aber damit kann man wenigstens mal eine vernünftige Annahme treffen. Falls er den KTY81 mit einem 1kOhm Widerstand an 2,5V betreiben sollte, dann entsprächen die 5° ungefähr einem Spannungsfehler von 25mV. Und 25mV lassen sich natürlich mit der Schwankungsbreite der internen Referenz erklären. Manfred schrieb: > Symbol Parameter Min Typ Max Units > VBG Bandgap reference voltage 1.15 1.23 1.4 V
Stefan K. schrieb: > Deshalb wäre es wichtig, wenn Du mal postest, wie GENAU Dein ADC und > Dein Spannungsteiler des KTY81 verschaltet sind. Die Schaltung ist geheim, und der Aufbau ohne jeden Fehl und Tadel!
Achim S. schrieb: > 10% Temperaturfehler So viel ist es ja auch nicht. Es sind unter 3 %. Schließlich ist der Nullpunkt der Temperaturskala nicht bei 0 °C. :-) @Alfons: Ist die ratiometrische Messung wirklich so schwer zu begreifen? Du baust einen Spannungsteiler mit deinem KTYxx zwischen Vcc und dem Eingang des ADC, auf die andere Seite einen Festwiderstand vom Eingang nach Masse. Gemessen wird dann mit Vcc als Referenz (also das Bit REFS1 gesetzt). Damit ist die absolute Höhe der Spannungsreferenz völlig schnurz, deshalb eben auch „ratiometrisch“: du misst das Verhältnis des KTYxx zu einem Festwiderstand, nicht mehr und nicht weniger. Exemplarschwankungen hast du natürlich trotzdem noch, denn der ADC ist nicht beliebig gut linear.
Danke, Stefan K. !! Das ist jetzt DIE aussagekräftige Antwort und genau so werde ich's machen. A. Geigenberger (Warum müssen eigentlich die Umgangsformen von so Vielen so herablassend und arrogant sein? Zumal, wenn sie nicht mal richtig Deutsch können!)
@ Jörg Wunsch: Auch an Dich, Danke! Ich denke, so meinte es Stefan K. auch.
Achim S. schrieb: > Temperaturabweichung irgendeinem beliebigen ADC-Fehler entsprechen. Es > wäre ja theoretisch auch denkbar, dass er den KTY81 so doof einsetzt, > dass 5° grade mal einem LSB des ADC entsprechen. Ja, natürlich kann das sein. Nur, wer macht so etwas ? Und falls doch, ist nicht nur der KTY81 doof.
Marc V. schrieb: > Ja, natürlich kann das sein. > Nur, wer macht so etwas? eventuell solche Leute die sich auf die interne Referenz verlassen?
Postings nach dem Motto "Dein Schaltplan ist ja doof, zeig ihn mir mal" halte ich für nicht sehr zielführend. Stefan
Stefan K. schrieb: > Postings nach dem Motto > "Dein Schaltplan ist ja doof, zeig ihn mir mal" > halte ich für nicht sehr zielführend. > > Stefan Mein Interesse, mir Schaltpläne einzubilden und dann falsch zu liegen, ist nahe Null! Nichts gegen Fanatsie... Denn wenn es der TE so gemacht hätte, wie ich es machen würde, hätte er diese Probleme vermutlich gar nicht. ;-) dafür, evtl größere/andere ;-)
Alfons G. schrieb: > Danke, Stefan K. !! > Das ist jetzt DIE aussagekräftige Antwort und genau so werde ich's > machen. > A. Geigenberger > > (Warum müssen eigentlich die Umgangsformen von so Vielen so herablassend > und arrogant sein? Zumal, wenn sie nicht mal richtig Deutsch können!) Vielleicht weil Leute die einen Thread eröffnen und behaupten, die MEGAs sind Schrott, ganz einfach keine Ahnung haben ? KTY81/110 z.B. hat bei 25 Grad 1000 Ohm, zwischen -20 und +60 Grad eine Differenz von 616 Ohm bei 1mA Strom. Nun stellt sich die überaus komplizierte Frage: Welchen Wert nehme ich als Festwiderstand ? 100K ? 100M ? Oder noch grösser ? Und dann noch irgendwelchen Blödsinn posten und dies als "Messwerte" und "Messvorgang" bezeichnen ? LOL.
Marc V. schrieb: > Und dann noch irgendwelchen Blödsinn posten und dies als "Messwerte" > und "Messvorgang" bezeichnen ? Sorry Marc, ich bin überzeugt, dass Alfons in der Lage ist, einen Spannungsteiler zu berechnen. Grüsse, René
René H. schrieb: > Sorry Marc, > > ich bin überzeugt, dass Alfons in der Lage ist, einen Spannungsteiler zu > berechnen. Ich will natürlich nicht versuchen, dich vom Gegenteil zu überzeugen aber: Spannungsteiler war angeblich für alle MEGAs gleich, Fehler also auch gleich bei allen "Messvorgängen". "Messergebnise" variieren zwischen -100% und +100%. Das sind keine Exemplarstreuungen mehr, das ist ein Fehler beim Aufbau der Schaltung. Und da der Rest seiner Schaltung nur aus Spannungsteiler besteht... P.S. Was ich sagen will, ist folgendes: Er hat (selbstverständlich vorhandene) Exemplarstreuungen mit seinem Spannungsteiler um ein mehrfaches verstärkt.
:
Bearbeitet durch User
Ja, und wie geht es jetzt weiter? Alle Controller sind defekt, oder soll ich das Gejammer jetzt verstehen???
Es gibt nur ein Problem: Der TO ist ein Ignorant. Das zeigt schon das Zitat aus dem Eingangsbeitrag: "Die gesamte Diskussion (s.o.) bzgl. der umgebenden Peripherie zielt ins Leere, denn die Bedingungen sind für jeden Prozessor gleich, absolut gleich!"
Sorry, trotz der Länge des Threads konnte ich immmer noch kein Schaltbild finden. Machst du eine ratiometrische Messung, i.e. wie wird dein Messsignal erzeugt und womit vergleichst du es? Alfons G. schrieb: > (Zum Messvorgang: Die ersten drei Messungen werden verworfen, dann 30mal > gemessen und das Ergebnis entsprechend mathematisch ausgewertet. > Temperaturfühler: KTY 81 ) > natürlich mit Spannungsteiler! [Bitte länger als 10 Sekunden lesen!] Die Frage ist nicht, ob der als Spannungsteiler betrieben wird, sondern geht schon etwas weiter. Wie groß ist der zweite Widerstand im Spannungsteiler und welche Spannung teilst du?
Ich habs mal erlebt das ein Drehwinkel kleiner 45 Grad mit einem 5Volt gespeisten Poti auf 0,1 Grad genau gemessen werden sollte. Schwachsinn!
Bitte ein Bit schrieb: > Ich habs mal erlebt das ein Drehwinkel kleiner 45 Grad mit einem 5Volt > gespeisten Poti auf 0,1 Grad genau gemessen werden sollte. Schwachsinn! Kommt aufs Poti an. Bei nem 25 Gang Poti ist das sicher eine Herausforderung, bei einem 270 Grad-Poti ist das problemlos umsetzbar.
"Eine Temperaturdifferenz von 1 Grad ergibt ein Differenz des ADCW-Wertes von ca. 3." (s.o.) Den Widerstand eines KTY kennt ihr? Dann sollte so mancher Schlaumeier doch wirklich den Wert des zweiten Widerstandes am Spannungteiler ausrechnen können... (Hinweis: Den Dreisatz muss man zweimal anwenden! Schwierig!) " Es soll nur ein Hinweis auf die erhebliche Streuung von Prozessor zu Prozessor sein,..." (s.o.) -> "Symbol Parameter Min Typ Max Units VBG Bandgap reference voltage 1.15 1.23 1.4 V" ...und sowas nenne ich Streuung! Und mehr wollte ich in meinem Eingangsthread nicht zum Ausdruck bringen! ...wo soll ich geschrieben haben, dass ein Atmega "Schrott" ist?
Alfons G. schrieb: > "Symbol Parameter Min Typ Max Units > VBG Bandgap reference voltage 1.15 1.23 1.4 V" > > ...und sowas nenne ich Streuung! Und mehr wollte ich in meinem > Eingangsthread nicht zum Ausdruck bringen! Das ist ein Unterschied von +/- 12% Mir scheint es als ob bei dir Schwankungen von +/- 100% vorkammen. Wenn man schon damit arbeitet, dann kalibriert man so etwas auch, deswegen schrieb ich dir schon gestern: Marc V. schrieb: > P.S. > Messe mal die Spannung am AREF Pin. Aber du scheinst ja Beratungsresistent zu sein und willst alles besser wissen... > Den Widerstand eines KTY kennt ihr? Dann sollte so mancher Schlaumeier > doch wirklich den Wert des zweiten Widerstandes am Spannungteiler > ausrechnen können... (Hinweis: Den Dreisatz muss man zweimal anwenden! > Schwierig!) Deswegen hat die Rechnerei bei dir nicht geklappt ?
:
Bearbeitet durch User
Moin Marc, Marc V. schrieb: > Deswegen hat die Rechnerei bei dir nicht geklappt ? Der ADCW-Wert von 0 Grad ist nicht die Grundlage für die Berechnung der prozentualen Abweichung von Prozessor zu Prozessor. Bei 0 Grad dürfte der ADCW-Wert bei etwa 610 liegen: 610 - 610 = 0 * 100 = 0 / 308 = 0,00 Grad (Berechung sh. oben und sh. "Quellcode") Und damit dürfte die Abweichung schon sehr, sehr gut mit dem Datenblatt (und der dort tolerierten Streuung) übereinstimmen. Ich werde in den nächsten Tagen, wenn ich wieder mehr Zeit habe, mal eine externe Referenzspannung anlegen und die Werte meiner 5 neuen Atmegas nochmals bestimmen. In diesem Zusammenhang dürfte der Begriff "ratiometrische Messung" die Lösung zu den ganzen Missverständnissen hier beinhalten. A. Geigenberger
Alfons G. schrieb: > ???? -> > (Zum Messvorgang: Die ersten drei Messungen werden verworfen, dann 30mal > gemessen und das Ergebnis entsprechend mathematisch ausgewertet. > Temperaturfühler: KTY 81 ) > natürlich mit Spannungsteiler! [Bitte länger als 10 Sekunden lesen!] Messungen verwerfen ist Unsinn, die erste Messung nach dem Umschalten des MUX ist gültig. Eine Ausnahme ist die Umschaltung auf die interne Referenz, die braucht etwas Zeit zum Anlaufen. Man kann aber auch die Brownout-Reset Fuse setzen, dann ist die interne Referenz immer aktiv. Alfons G. schrieb: > Temperaturfühler: KTY 81 ) Und das setzt Du einfach mal voraus, daß jeder nur mit KTY81 mißt. Ich messe z.B. mit LM335, DS18B20 und für hohe Auflösung mit SMT160-30, PT1000, Typ-K, Typ-R (1400°C). Für Typ-K, PT1000 benutze ich fertige 24Bit-ADCs die als Außenbeschaltung nur einen hochpräzisen Widerstand benötigen (AD7793). Es gibt unzählig viele Varianten, die Temperatur zu messen und in einen Digitalwert zu wandeln, ein Schaltplan ist daher Pflicht! Alfons G. schrieb: > natürlich mit Spannungsteiler! [Bitte länger als 10 Sekunden lesen!] Und da brichst Du Dir echt nen Zacken aus der Krone, den Spannungsteiler einfach mal aufzumalen und abzufotografieren ??? Um einen Spannungsteiler zu berechnen, braucht man erstmal den geforderten Meßbereich und die Auflösung.
Alfons G. schrieb: > Ich werde in den nächsten Tagen, wenn ich wieder mehr Zeit habe, mal > eine externe Referenzspannung anlegen und die Werte meiner 5 neuen > Atmegas nochmals bestimmen. In diesem Zusammenhang dürfte der Begriff > "ratiometrische Messung" die Lösung zu den ganzen Missverständnissen > hier beinhalten. Was wirfst du die 2 wieder in einen Topf? Alfons G. schrieb: > Die gesamte Diskussion (s.o.) bzgl. der umgebenden Peripherie zielt ins > Leere, denn die Bedingungen sind für jeden Prozessor gleich, absolut > gleich! Beachte: Peter D. schrieb: > Und da brichst Du Dir echt nen Zacken aus der Krone, den Spannungsteiler > einfach mal aufzumalen und abzufotografieren ??? > Um einen Spannungsteiler zu berechnen, braucht man erstmal den > geforderten Meßbereich und die Auflösung. Und da du das nicht raus rücken willst, darfst du hier ohne mich weiter rum eiern.
Alfons G. schrieb: > Ich werde in den nächsten Tagen, wenn ich wieder mehr Zeit habe, mal > eine externe Referenzspannung anlegen und die Werte meiner 5 neuen > Atmegas nochmals bestimmen. Waren wir nicht schon soweit, daß die Referenzspannung in die Ermittlung Deines Widerstandsverhältnisses nicht mit eingeht? Dein Widerstandsverhältnis kannst Du bei 5V genausogut wie bei 3V ermitteln, vorausgesetzt, Spannungsteiler und ADC werden von derselben Quelle gespeist. Gruß, Stefan
Alfons G. schrieb: > " Es soll nur ein Hinweis auf die erhebliche Streuung von Prozessor zu > Prozessor sein,..." (s.o.) -> > > "Symbol Parameter Min Typ Max Units > VBG Bandgap reference voltage 1.15 1.23 1.4 V" > > ...und sowas nenne ich Streuung! Und mehr wollte ich in meinem > Eingangsthread nicht zum Ausdruck bringen! und das ist Unfug! Axel S. schrieb: > 3. braucht man für eine ratiometrisch arbeitende > Sensoranordnung die interne Referenz gar nicht man braucht weder die interne Ref noch den Wert der VCC. Das ist einfach nur die Teilung von KTY81 zu Rv mit deren Toleranzen + die Digitfehler im Messbereich! Der TO macht hier grundsätzliche Messfehler und will es dem AVR grundlos in die Schuhe schieben.
Marc V. schrieb: > Alfons G. schrieb: >> "Symbol Parameter Min Typ Max Units >> VBG Bandgap reference voltage 1.15 1.23 1.4 V" >> >> ...und sowas nenne ich Streuung! Und mehr wollte ich in meinem >> Eingangsthread nicht zum Ausdruck bringen! > > Das ist ein Unterschied von +/- 12% > Mir scheint es als ob bei dir Schwankungen von +/- 100% vorkammen. Wie oft willst du diesen Unsinn noch vorbringen? Denn es ist Unsinn. Der TE subtrahiert 610 vom gemittelten Meßwert, bevor er ihn linear weiter skaliert. Damit verschieben sich der Nullpunkt und Endwert der Skala. Die ursprüngliche Fehlerangabe von +/-11% gilt aber für Nullpunkt und Skala des ADC. Einfaches Beispiel: der korrekte Meßwert sei 650. Der reale Meßwert kann um +/- 10% abweichen. Wir bekommen also irgendwas zwischen 585 und 715. Nach Abzug von 610 haben wir irgendwas zwischen -25 und +105. Der wahre Wert wäre 40.
Axel S. schrieb: > Wie oft willst du diesen Unsinn noch vorbringen? Denn es ist Unsinn. Sagt, mal? Macht es Euch Spaß, das ständig zu wiederholen? Gestern bereits um 15:21 Uhr hat Stefan K. das prima erklärt und um 15:36 Uhr habe ich dies auch hier geschrieben! Und ja! Meine Überlegungen waren fehlerhaft/Unsinn. Aber warum darf man bei Unklarheiten nicht kompetentere Leute in einem Forum fragen? Axel S. schrieb: > "Symbol Parameter Min Typ Max Units > VBG Bandgap reference voltage 1.15 1.23 1.4 V" Und ich konnte ja nicht ahnen, dass meine Bemerkung, dieser "Streubereich" sei "bemerkenswert", gleich als Blasphemie ausgelegt wird und zu einer Steinigung führt. Mich erstaunt es weiterhin, dass ein REFERENZ-Wert solche Unterschiede von Prozessor zu Prozessor aufweist. Und darüber bin ich ja auch initial gestolpert. Ich konnte mir GESTERN (mittlerweile schon!) einfach nicht erklären, wie es zu den so stark abweichenden Temperaturwerten von Prozessor zu Prozessor kommen kann. Und da fragte ich halt hier mal nach: Sorry!!
Alfons G. schrieb: > Mich erstaunt es weiterhin, dass ein REFERENZ-Wert solche Unterschiede > von Prozessor zu Prozessor aufweist. Moment mal: du hast die Referenzspannung ja gar nicht gemessen, sondern nur deren potenzielle Auswirkung über eine uns ansonsten komplett vorenthaltene Restschaltung und etwas, was ich jetzt mal als „Software-Magie“ bezeichne. Das ist nicht abwertend gemeint, aber mit irgendwelchen Mittelwertbildungen, Messwert-Verwerfen etc. ist das, was da passiert, natürlich alles andere als eine klar und deutliche Ermittlung der Referenzspannung. Man kann die Referenzspannung bei entsprechender Einstellung des ADMUX durchaus auch ganz einfach mit einem Multimeter an AREF nachmessen. Das wäre deutlich aufschlussreicher gewesen als das Herumorakeln über deren Schwankungen basierend auf irgendwelcher Software-Magie anhand von indirekten Messungen an einer externen Beschaltung. Da die Datenblatt-Garantiewerte über den gesamten Betriebsspannungs- und -temperaturbereich gelten, würde ich schon deutlich geringere Exemplarstreuungen als die dort genannten Wert erwarten, zumal die Bandgap während der Fertigung ja auch kalibriert wird.
Das stimmt! Wie gesagt: Ich habe es ja verstanden! Ich bezog mich aber soeben NUR auf die Angaben der Firma selbst. Und dabei erstaunt mich, dass (nochmal) "ein REFERENZ-Wert solche Unterschiede von Prozessor zu Prozessor aufweist".
Alfons G. schrieb: > ein REFERENZ-Wert solche Unterschiede von Prozessor zu Prozessor > aufweist Das wiederum hast du aber gar nicht nachgewiesen. Es kann doch gut sein, dass deine restliche Schaltung irgendwie bislang so unglücklich ist, dass eben selbst Unterschiede im Bereich einiger 10 mV (die ich für völlig realistisch halte) zu solch starken Streuungen deines Ergebnisses führen. Wie geschrieben: diese Datenblattwerte sind Garantiewerte, die dir Atm^H^H^HMicrochip über den kompletten Bereich von Betriebsspannung und Umgebungstemperatur zusichert. Daher müssen zwangsläufig bei konstanter Spannung und Temperatur die Exemplarstreuungen viel geringer ausfallen als diese im Datenblatt zugesicherten Werte.
Jörg W. schrieb: > Alfons G. schrieb: >> ein REFERENZ-Wert solche Unterschiede von Prozessor zu Prozessor >> aufweist > > Das wiederum hast du aber gar nicht nachgewiesen. Das stimmt auch. Ich habe nur das Datenblatt zitiert. > Es kann doch gut sein, dass deine restliche Schaltung irgendwie > bislang so unglücklich ist, dass eben selbst Unterschiede im Bereich > einiger 10 mV (die ich für völlig realistisch halte) zu solch > starken Streuungen deines Ergebnisses führen. Ebenfalls richtig! Deshalb sagte ich ja, ich werde mir die angezeigten Temperaturen nochmals unter Anwendung einer externen Referenzspannung ansehen.
Alfons G. schrieb: > Deshalb sagte ich ja, ich werde mir die angezeigten Temperaturen > nochmals unter Anwendung einer externen Referenzspannung ansehen. Da du offenbar eine Reihe von ATmega16 da hast, wäre es (im Interesse dessen, wofür du diesen Thread gestartet hast) viel sinnvoller, stattdessen einfach mal bei jedem von ihnen AREF extern mit dem Multimeter nachzumessen und die Messreihe hier zu posten, am besten mit beiden Einstellungen (1,23 und 2,56 V). Bezüglich deiner Temperaturmessung sollte dir ja inzwischen klar sein, dass bei korrekt aufgebauter Messung der genaue Wert der Referenzspannung völlig unerheblich ist, da er sich während der Messung herauskürzt. So gesehen ist dein Ansinnen, die Messung mit irgendeiner externen Referenz zu wiederholen, eigentlich an jeglicher Aufgabenstellung vorbei gearbeitet: du kannst damit weder irgendwas Praxistaugliches für die Temperaturmessung mit einem KTYxx an Erkenntnis hinzu gewinnen, noch irgendeine Aussage bezüglich der tatsächlichen Höhe der Exemplarstreuungen zwischen mehreren ATmega16.
ok, ich geh jetzt in den Keller, stecke die Prozessoren der Reihe nach rein und messe dies durch. Kleinen Moment bitte :-)
Das hier ist ein Musterbeispiel, warum die typischen Werte aus den Datenblätttern für die Auslegung (!) eher kein Kriterium sein sollten! Der unerfahrene Entwickler liest: "Die Referenz des ATMEGA16 hat 1,23V" Das ist FALSCH. Richtig ist: "Die Referenz des ATMEGA16 hat bei 25°C irgenwas zwischen 1,15 und 1,4V" "Die Referenz hat einen nicht näher spezifizierten negativen Temperaturkoeffizienten" "Dui Referenzspannung ist außerdem von der Versorgungsspannung abhängig" Man beachte zum TK Fig. 190. Aber Vorsicht hier: Fig. 190 gibt den typischen Verlauf wieder. was der typische Wert aussagt: "Die Werte der ATMEGA16-Referez ist normalverteilt um 1,23V" Ein typischer Wert darf niemals das einzige Kriterium für eine Auslegung sein. Min und Max sind immer mitzuziehen, in einigen Fällen sinnigerweise mit Fehlerfortpflanzung.
... so, also: MP1: Warmwasserspeicher MP2: Außentemperatur MP3: Temperatur im Viessmann-Boiler Volt: Spannungsmessung #1: 28 7 43 2,61 #2: 35 13 47 2,53 #3: 25 5 36 2,64 #4: 32 11 42 2,56 #1: 39 17 50 2,48
... und "sortiert: > #1: 39 17 50 2,48 > #2: 35 13 47 2,53 > #4: 32 11 42 2,56 > #1: 28 7 43 2,61 > #3: 25 5 36 2,64
kleine Abweichungen der Referenzspannung "potenzieren" sich also, aber eine Abhängigkeit scheint deutlich zu sein.
Alfons G. schrieb: > Aber immerhin! > Es gibt nämlich tatsächlich Leute, die nicht täglich und ernsthaft mit > ADC und internen Referenzen arbeiten und trotzdem einen Atmega Prozessor > verwenden. > Und für diese Menschen ist es schon erstaunlich, welche Toleranzen als > "ganz normal" angesehen werden. Was ist denn bloß so besonders speziell an Deinem Schaltplan, Deinem Programm und Deinem Aufbau, daß Du sie nicht zeigen willst? Selbst wenn die Peripherie dieselbe ist, kann es da trotzdem wesentliche Unterschiede geben, etwa wenn Schmutz oder Korrosion den Übergangswiderstand zwischen den Pins Deines uC und seinem Sockel beeinflußen.
Alfons G. schrieb: > ... so, also: ... d. h. (2,56 +/- 0,08)V, entsprechend +/- 3,1%, Standardabweichung 0,057V. Denke, für die AVR-Gurken ganz okay - für den STM32F103 liegt z. B. die garantierte Maximalabweichung bei +/- 3,3% über den Bereich von -40°C...+85°C.
Sheeva P. schrieb: > Was ist denn bloß so besonders speziell an Deinem Schaltplan, Deinem > Programm und Deinem Aufbau, daß Du sie nicht zeigen willst? Stimmt, jetzt wäre wirklich mal so langsam der konkrete Aufbau interessant, der es schafft, aus an sich immer noch relativ geringen Toleranzen derart massive Abweichungen zu generieren - das ist fast schon etwas Besonderes ;-)
Alfons G. schrieb: > #1: 28 7 43 2,61 > #2: 35 13 47 2,53 > #3: 25 5 36 2,64 > #4: 32 11 42 2,56 > #1: 39 17 50 2,48 Das halte ich für eine "erstaunlich kleine" Abweichung vom Nennwert. Wollte man diese Abweichungen verkleinern, würde sich der Preis des Prozessors wohl vervielfachen, da ein Grossteil der Prozessoren weggeworfen werden müsste. Und das, obwohl ein Grossteil der Nutzer eine genauere Referenzspannung überhaupt nicht benötigen.
... es ist nicht so, dass ich den Schaltplan geheim halten möchte... Aber: Es gibt keinen :-( Und so besonders ist der "Schaltplan" nicht: 5Volt -- Widerstand -- KTY -- Masse zwischen Widerstand und KTY geht's zum Port des Prozessors. Ist mir jetzt aber egal und ich möchte nicht länger nerven: Ich kalibriere den verwendeten Mikroprozessor individuell ein - und wenn er dann die nächsten 5 Jahre problemlos arbeitet: Gut ist's! Danke für die Hilfsbereitschaft! A. Geigenberger
Alfons G. schrieb: > Ist mir jetzt aber egal und ich möchte nicht länger nerven: > Ich kalibriere den verwendeten Mikroprozessor individuell ein - und wenn > er dann die nächsten 5 Jahre problemlos arbeitet: Gut ist's! Und wie gehst du damit um, dass die Referenz eine recht starke Temperaturabhängigkeit hat? Und damit, dass sie von der Versorgungsspannung abhängt? Das kannst du nicht wegkalibrieren... Machs so: 5V ---> Widerstand ---> Widerstand --> Sensor --> Masse | | Port1 Port2 Und dann berechnest du den Wert aus den Rohwerten von Port1 und Port2 direkt. Wenn du die 5V als Referenz nimmst, kann Widerstand 1 z.B. 100E sein, Widerstand 2 1k. Die interne Referenz schaltest du aus, die brauchst du nicht. Weder Referenz noch Versorgung spielen dann irgendeine Rolle. Keine Kalibrierung nötig.
Alfons G. schrieb: > Ist mir jetzt aber egal und ich möchte nicht länger nerven: > Ich kalibriere den verwendeten Mikroprozessor individuell ein - und wenn > er dann die nächsten 5 Jahre problemlos arbeitet: Gut ist's! Du hast es immer noch nicht verstanden... Klartext: Du brauchst die interne Referenz nicht. Und nochmal: Du brauchst die interne Referenz nicht. Und nochmal, diesmal zum Mitmeißeln: Du brauchst die interne Referenz nicht. Jetzt klarer?!?!
Sheeva P. schrieb: > Was ist denn bloß so besonders speziell an Deinem Schaltplan, Deinem > Programm und Deinem Aufbau, daß Du sie nicht zeigen willst? Alfons G. schrieb: > ... es ist nicht so, dass ich den Schaltplan geheim halten möchte... > Aber: Es gibt keinen :-( Und das Programm gibt es das? (bitte in vollständig! - als Anhang) Und den Aufbau? (Foto?)
Auf Wunsch von Jörg Wunsch: 5.0 V 13 °C ATmega16-16PU (1625K) 2.610 2.637 2.589 2.496 2.510 2.593 2.572 2.559 2.596 2.562 2.534 2.566 2.578 2.597 2.598 2.559 2.506 2.459 2.529 2.472 und, mangels Stückzahl aber wenig aussagekräftig, ATmega16A-PU (1340) 2.592 2.482 2.534
Und was haben diese Zahlenfolgen jetzt zu bedeuten? Was für eine Message steht dahinter?
Bitte ein Bit schrieb: > Und was haben diese Zahlenfolgen jetzt zu bedeuten? Vielleicht die Spannung an AREF von 20 Stück Atmega 16 -aber frag ruhig... Worum es hier geht, ist Dir wohl entgangen? Paul
Axel S. schrieb: > Wie oft willst du diesen Unsinn noch vorbringen? Denn es ist Unsinn. Nein, es ist kein Unsinn. Unsinn ist das, was der TO gemacht hat. Ob er etwas vom gemittelten Meßwert subtrahiert hat, bevor er ihn linear weiter skaliert hat und damit den Nullpunkt verschoben hat, oder ob er ganz einfach den falschen Spannungteiler benutzt hat... Ich habe ihm schon gestern (als Erster) vorgeschlagen, auch die Spannung am AREF zu messen (gerade wegen der Streuung) - er hat es aber nicht getan. Also, es interessiert mich kein bisschen wo die Ursachen für seine Fehler zu suchen sind - es ist Falsch. Punkt.
:
Bearbeitet durch User
> Vielleicht die Spannung an AREF...
So ist es.
Um wenigstens einen kleinen Nutzen für mich selbst aus dieser
unsäglichen Diskussion zu ziehen, habe ich die kleine Messreihe
durchgezogen, und dann dachte ich, ich stelle sie hier vor, warum auch
nicht.
Ich danke dir dafür.... Die Ergebnisse finde ich allerdings nicht überraschend. Aber, das hat ja auch was gutes.
Alfons G. schrieb: > 5Volt -- Widerstand -- KTY -- Masse > zwischen Widerstand und KTY geht's zum Port des Prozessors. Genau hier liegt dein Fehler, wenn du das zum Prozessor geführte Signal gegen die Referenzspannung vergleichst. Spannungsteiler und ADC müssen die gleiche Bezugsspannung verwenden, sonst bist du hoffnungslos den Toleranzen bei der Prozessorherstellung ausgeliefert, aber das weisst du ja bereits.
S. Landolt schrieb: > durchgezogen, und dann dachte ich, ich stelle sie hier vor, warum auch > nicht. Ja. Durchschnittswert = 2.556V Max. Wert = 2.637V Min. Wert = 2.459V Abweichung (vom Durchschnittswert) = +3.16% / - 3.80% Abweichung (vom Typ. Wert) = +1.42% / - 5.42% Weitaus besser als im DaBla angegeben.
:
Bearbeitet durch User
Hallo, wenn ich die Schriftgröße verändern könnte, würde ich das hier jetzt seehr klein schreiben: Ich hatte eine nachgeschaltete mathematische Prozedur übersehen, die kleine Abweichungen arithmetisch massiv gespreizt hat :-( . Vielleicht poste ich dies im Fasching 2018 Bitte entschuldigt mein Beharren auf meinen Gedankengang. A. Geigenberger ... und was jetzt auf mich zukommt, werde ich geduldig ertragen...
Alfons G. schrieb: > Ich hatte eine nachgeschaltete mathematische Prozedur übersehen, die > kleine Abweichungen arithmetisch massiv gespreizt hat :-( . > Vielleicht poste ich dies im Fasching 2018 > Bitte entschuldigt mein Beharren auf meinen Gedankengang. > A. Geigenberger 1. ich finde ess gut wenn jemand Fehler einsieht und sie benennt! 2. Ich verstehe immer noch nicht wieso auf die Spannungsabweichung von allem rumgeritten wird! 3. Wenn es nur um das Verhältnis Sensor RV geht ist die Spannung unnötig. 4. Wenn ich messe dann immer am "Skalenendwert" und nie in den untersten digit bei +- Digitfehler. Notfalls trenne ich Aussentemperatur und Brenner in 2 Messkreise, die Aussentemperatur wird hier hoffentlich nicht die Brennertemperatur erreichen, die Brennertemperatur wird hier hoffentlich nie unter 0°C fallen. Für die Aussentemperaturen sind 1w DS18B20 eine gute Wahl, bis 85°C könnten die auch vielleicht deine Brennertemperatur zeigen aber ich kenne das Maximum bei deiner Brennertemperatur nicht. Hohe Messfehler im unteren Digit Bereich um 0°C wären für die Brennertemperatur irrelevant.
:
Bearbeitet durch User
Nun, wenn du selbst was draus lernst (vor allem, wie man mit einem KTYxx optimal messen sollte), dann war es nicht umsonst. Ganz nebenbei haben wir ein bisschen über die Streuungen der Bandgap von ATmega16 und anderen AVRs erfahren, was ja auch nicht umsonst ist. Ich habe die Statistik für S. Landolts Messungen mal noch ergänzt: zum Mittelwert 2.5561 V gehört eine Standardabweichung von 0.0468 V. Allerdings ist natürlich bei 20 Werten die Statistik noch nicht sehr sinnvoll im mathematischen Sinne.
Jörg W. schrieb: > Allerdings ist natürlich bei 20 Werten die Statistik noch nicht > sehr sinnvoll im mathematischen Sinne. Aber doch aussagekräftiger als bei nur 2 oder 5 Exemplaren. Vielleicht wäre die LotNr. auch nicht schlecht gewesen.
ich habe gerade noch die Erfahrung gemacht das die Messung auch stark von der Qualität der Versorgungsspannung abhängt: Ich baue gerade meinen alten 3D Drucker fertig, der hat ein 3Drag Board mit ähnlicher Temperaturmessung, NTC im Spannungsteiler und 10µ Elko zum glätten der Messspannung. Ich habe das aber modifiziert und den 7805 ausgebaut und die 5V von einem alten Servernetzteil genommen. Beim ersten Test sprang die Temperatur wie wild hin und her, in Spitzen fast +/- 10°. Zur Fehlersuche habe ich mir die 5V Versorgung angesehen und da waren satte 1,5 V (!) Vpp Ripple mit 20 kHz drauf. Ich habe meine Lastwiderstände für die 3A min. Last von den 5V weggenommen und der Ripple ging auf einige zig mV zurück und damit war die Temperaturmessung sofort stabil. Also AVCC als Vref und Versorgung für den Spannungsteiler funktioniert nur bei sauberer Versorgungsspannung. Und gute alte Längsregler haben hier Vorteile gegenüber Schaltreglern (wenn die nicht super geglättet werden) würde ich sagen. Auf dem 3Drag Board hat man sich noch den C an ARef gespart, der gehört laut DB aber auch bei Vref=AVCC dahin.
Alfons G. schrieb: > Und so besonders ist der "Schaltplan" nicht: > 5Volt -- Widerstand -- KTY -- Masse > zwischen Widerstand und KTY geht's zum Port des Prozessors. Das schreit doch nach ratiometrischer Auswertung. Die Genauigkeit ist - neben dem Sensor selbst - allein von der Güte des Widerstandes abhängig. Ein Typ mit 0,1% und TK <= 50 ist für Messungen mit Auflösung 1 K ausreichend. Beispiel für ATmega328 mit 6 Kanälen: Beitrag "Temperatursensor KTY81 am ATmega328 (Arduino UNO), 1-6 Kanäle"
m.n. schrieb: > Das schreit doch nach ratiometrischer Auswertung. Ja. Das kauen wir ja seit ein paar Tagen hier durch …
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.