Hallo an Alle, ich benutze einen ATMEAG8535. Ich möchte einen Luftdrucksensor an einem AD-Wandler Eingang anschließen. WIe muss ich den AD-Wandler per Software initialisieren bzw. aktivieren? Kann mir jemand einen Beispielcode dazu geben? Gruß Michael
So wie ich das sehe sind da 8x 10 Ad-Wandler integriert. Wie bekomme ich dann die Werte vernünftig angezeigt? Ich kann auf mein Display keine 10Bit werte in eine Variable packen oder?
Du musst diese 10-Bit in ein BCD-Format wandeln. 10 Bit entsprechen einem Zahlenraum von 0 bis 1023, das wiederum entspricht 16 Bit im BCD-Format, da jeweils 4 Bit einer Ziffer im Zehnersystem entsprechen. siehe: http://de.wikipedia.org/wiki/BCD
Hi, > WIe muss ich den AD-Wandler per Software initialisieren bzw. > aktivieren? Welche Programmiersprache? Für C siehe: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Für ASM siehe AVR-Datenblatt (step by step so machen, wie's da steht) > Wie bekomme ich dann die Werte vernünftig angezeigt? Ich verstehe die Frage nicht. Werte so skalieren, wie es nötig ist und mit dem "Printf" deiner Programmiersprache ausgeben? > Ich kann auf mein Display keine 10Bit werte in eine Variable packen > oder? Warum nicht? Du willst auch eine 8 Bit Variable ohne Konversion nicht aufs Display packen ;) Für ASM mal im Forum nach BCD suchen, damit die AD Werte konvertieren und stellenweise ausgeben.
Hallo, danke für Eure Unterstützung. Ich programmiere mit CodeVisionAVR in C. Kann mir jemand zeigen wie ich meinen AD-Wandler Kanal 1 initialisieren muss? Der Code für die Initialisierung sieht bei mir so aus: #define ADC_VREF_TYPE 0x00 // Read the ADC conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; ADCSR.6=1; while (ADCSR.4==0); ADCSR.4=1; return ADCW; } Hauptprogramm: while (1) { delay_ms (100); lcd_printfz(1,2,"Luftdruck %2i",read_adc(0)); }
WIe kann ich beim ATMEGA8535 per Software mitteilen, dass ich die interne Referenzspannung nutzen will? Beim ATMEGA16 gibts es die BITS REFS0 und REFS1.Aber beim ATMEGA8535 finde ich diese nicht?
Was mir außerdem noch bei mir auffällt ist, dass mein AD Wert schwankt. AREF habe ich auch auf 5V gelegt.Wie kann ich verhindern dass mein AD Wert so schwankt????
Hi, >Was mir außerdem noch bei mir auffällt ist, dass mein AD Wert >schwankt. >AREF habe ich auch auf 5V gelegt.Wie kann ich verhindern dass mein AD >Wert so schwankt???? 1. Vernueftiges layout (AGND und DGND). 2. Als AREF eine Referenzspannungsquelle nehmen. 3. Eine Mittelwertbildung machen. 4. AVR GCC Tutorial 5. RTFM!! Gruß, Dirk
Hallo Dirk, so ich habe jetzt mal das AVR GCC tutorial einwenig durchgelesen. Ich kann ja die interne Refernezsspannung(BITS:REFS0 und REFS1 müssen auf 1 liegen) nehmen.Das heisst an AREF mussen dann 2,56V zu messen sein oder? Dann sollte man zudem einen Kondensator zwischen AGND und AREF legen.Welchen wert sollte der dann haben?
Hallo nochmal, so ich habe jetzt die interne Referenzspannung benutzt. Anschließend habe ich einen 100nF Kondensator zwischen PIN AREF und GND eingelötet. Der AD Wert schwankt bei mir noch als. Und zwar zwischen 600 und 700. Wie kann ich dies noch unterdrücken, ohne viel Schaltungsaufwand? Im Anhang hab ich mal mein C Programm angehängt.
Was sagt er denn, wenn Du die 1,22V Referenz misst? Wenn's dann immer noch schwankt, ist was faul. Wenn nicht, schwankt das externe Signal.
So ein misst mein Multimeter ist kaputt gegangen. Hmmm... Auf jedenfall habe ich die BITS Refs0 und Refs1 auf 1 gesetzt(AVR:ATMEGA8535).
Hast du mein Programm mal angeschaut. Ist die C Routine für den AD-Wandler ok?
Ne ich verwende ja einen ATMEGA8535. Im Datenblatt steht da was von 2,56Volt. Kann leider den Wert nicht nachmessen,da mein Voltmeter defekt ist. Ich habe jetzt mal an AREF die +5V angeklemmt und zwischen AREF und AGND einen 47uF Kondensator reingehängt.Jetzt schwankt der Wert zwischen 270 und 310. Kann man eigentlich das noch besser hinbekommen? Bringt es was wenn ich noch einen weiteren Kondensator verwende?
Yep, also doch Mega. Dann stell doch mal den ADMUX auf die interne 1,22V Referenz ein, bei Verwendung der internen Referenz. Müsste ungefähr (Toleranzen!) 50% rauskommen, aber das ziemlich stabil.
Das habe ich doch auch schon gemacht. Leider schwankt da der AD Wert stärker.Hmmm...jetzt habe ich wie gesagt die AREF auf +5Volt gelegt und einen 47uF Kondensator reingeklemmt.Wert schwankt nicht mehr so stark. Was meinst du mit: "bei Verwendung der internen Referenz. Müsste ungefähr (Toleranzen!) 50% rauskommen, aber das ziemlich stabil." Verstehe ich nicht????
Wie hast Du die zu messende Analogspannung angeschlossen? Zeig mal einen Schaltplan, wenn nötig, mit Paint erstellt. Wobei eine Differenz von 40 in einem Bereich von 0 bis 1023 gar nicht so schlecht ist. Um es für den Benutzer leserlicher zu machen muß man das per Software glätten bzw. einen Mittelwert bilden. MfG Andi
Den Input vom Mux auf die 1,22V Bandgap Referenz einstellen (0x1E). Die ADC-Referenz auf die interne 2,56V-Referenz einstellen. Wann das Ergebnis instabil ist, dann stimmt m.E. entweder das Messverfahren nicht (sieht aber ok aus), die Beschaltung ist falsch oder das IC defekt. Ok 50% ist daneben, sind nominell 46%. Was rauskommen müsste: 1,22V/2,56V * 1024 = 480. Plusminus erhebliche Toleranzen der Referenzspannungen (siehe Datasheet). Das dann aber ziemlich zeit- und temperaturstabil. Ebenso mal den 0V-Mux ausprobieren (0x1F). Müsste ziemlich genau 0 rauskommen. Beides funktioniert bei mir (Mega32). Mein WinAVR Code anbei (auszugsweise). Bietet der Compiler keine Möglichkeit, einen ATMega8535 einzustellen? Das #include <90s8535.h> klingt ja mehr nach dem alten AT90S8535. Den Pin AREF solltest Du nur dann extern auf 5V legen, wenn die Ref-Bits aus 0 sind. Ergibt auch keinen Sinn, denn die Referenz kann man ja auch intern auf AVCC umstellen (Ref=01). Und 47µF an AREF sind zuviel, 100nF reicht aus.
Hallo, leider habe ich keinen Schaltplan in elektronischer Form. WIe gesagt den PIN AREF habe ich mit einem 47uF Kondensator an AGND angschlossen. Die Versorgungsspannung ist ja die 5Volt. Da habe ich auch zwischen +5V und GND einen 100nF Kondensator und einen 47uF Kondensator reingelötet. unsigned int read_adc(unsigned char adc_input) { ADMUX=0x00|adc_input; ADCSR.6=1; delay_ms(200); while (ADCSR.4==0); ADCSR.4=1; return ADCW; } void main(void) { // ADC initialization // ADC Clock frequency: 62,500 kHz ADCSR=0x86; while (1) { delay_ms (50); long_luftdruck = 0.92215533 * read_adc(0) + 143.3427762; } } Wie müsste ich denn das bei mir mit dem Mittelwert realisieren? Und noch was mein AD Wert schwankt zwischen 440 und 465.
Hier mal ein Schaltungsbeispiel eines LDR an ADC: VCC + | | .-. | | | |10K '-' | ADC-Pin ------o | .-. | | | |LDR '-' | | === GND Ist es auf diese Art verschaltet? Kenne natürlich Deinen Drucksensor nicht. MfG Andi
Der Drucksensor hat drei Anschlüsse. Pin 1 = GND PIN 2 = AD-Wandler Eingang PIN 3 = Vcc(+5V) Sorry vorhin habe ich geschrieben, dass der PIN Aref bei mir nur mit einem Kondensator auf AGND liegt. Dies stimmt nicht!. Den PIN AREF habe ich bei mir auf +5V gelegt. Und per Software habe ich die BITS REFS0 und REFS1 auf "0" geschaltet. Kann ich doch so machen oder? Wie sieht dann die algemeine Gleichung für den AD Wert eigentlich aus? Z.b:. so -> 5V/1024 * AD-WERT Und wie mache ich den Mittelwert? Und wie kommst du auf diese Gleichung: 1,22V/2,56V * 1024 = 480 Ich habe doch bei meinem ATMEGA8535 keine 1,2V oder doch?
Was ist dass den für ein Eintrag??? Hallo A.K.? Kannst du mir auf den letzten Eintrag noch eine Antrwort geben?
Der Drucksensor hat drei Anschlüsse. Pin 1 = GND PIN 2 = AD-Wandler Eingang PIN 3 = Vcc(+5V) Sorry vorhin habe ich geschrieben, dass der PIN Aref bei mir nur mit einem Kondensator auf AGND liegt. Dies stimmt nicht!. Den PIN AREF habe ich bei mir auf +5V gelegt. Und per Software habe ich die BITS REFS0 und REFS1 auf "0" geschaltet. Kann ich doch so machen oder? Wie sieht dann die algemeine Gleichung für den AD Wert eigentlich aus? Z.b:. so -> 5V/1024 * AD-WERT Und wie mache ich den Mittelwert? Und wie kommst du auf diese Gleichung: 1,22V/2,56V * 1024 = 480 Ich habe doch bei meinem ATMEGA8535 keine 1,2V oder doch?
Hej, ich bin nicht 24h live dabei. Also Geduld. Zur 1,22V Bandgap: Drum war's ja wichtig, den exakten Typ rauszukriegem und evtl. auch es dem Compiler zu sagen. Der AT90S8535 hat 3 Mux-Bits in ADCSR und keine 1,22V, der ATMega8535 hat 5 Mux-Bits in ADCSRA und hat die 1,22V. Siehe Datasheet S.218. "Kann ich doch so machen oder?" Du kannst auch einen Kopfstand machen und dabei Lenin rezitieren. Ob's aber Sinn ergibt? Eine 5V-Referenz kriegst Du leichter mit REFS10,REFS0=1, muss also nicht extern verdrahtet werden. Aber VCC ist üblicherweise eher ungenau, nicht zu empfehlen. Anderes Netzteil dran, anderer Wert. Wenn externe Referenz dann eine echte, also mach lieber 100nF an GND und keine 5V dran. Ein Elko ist da auf Dauer etwa ungünstig, kann je nach Laune die Messung verfälschen, also Kerko. ADC/Spannung umrechnen: siehe Datasheet S.216.
Hi A.K, sorry das ich so nerve, aber ich bin jetzt irgendwie verwirrt. Also du meinst ich soll den PIN AREF nur mit einem 100nF Kondensator an GND anschließen(keine Verbindung zu VCC oder irgend welche). Dann REFS1=0 und REFS0=1 setzen oder?Ja wie groß ist dann meine AREF? Wie muss ich das Register ADMUX initialisieren qwenn ich nur den AD Kanal 0 verwende?
"Also du meinst ich soll den PIN AREF nur mit einem 100nF Kondensator an GND anschließen(keine Verbindung zu VCC oder irgend welche)." Ja. "Dann REFS1=0 und REFS0=1 setzen oder?" Nur wenn Du eine 5V-Referenz willst. Was aber wie gesagt nicht empfehlenswert ist. "Ja wie groß ist dann meine AREF?" Versorgungsspannung. Also 5V, wenn das 5V sind. "Wie muss ich das Register ADMUX initialisieren qwenn ich nur den AD Kanal 0 verwende?" Die REFS Bits wie gehabt. Die Mux-Bits auf 0. Aber lass den Teil einstellbar, damit Du eben auch die 1,22V ausprobieren kannst. Du erinnerst mich irgendwie an Freak5. Der liest auch grundsätzlich nie die Datesheets, jedenfalls nicht die vom verwendeten IC. Da steht alles ziemlich haarklein drin.
Ok ich tue mir halt sehr schwer mit Datenblätter.Deshalb hole ich mir hier in diesem Forum auch Rat. Also ich setzte die Bits so: REFS1=0 und REFS0=1. Dann lasse ich den PIN AREF offen.Nur ein Kondensator von 100nf ist mit GND verbunden.Die Mux Bits habe ich auch auf Null gesetzt. Und was meinst du mit "aber lass den Teil einstellbar, damit Du eben auch die 1,22V ausprobieren kannst." Welchen Spannungswert hat jetzt mein PIN AREF, damit ich diese Forum verwenden kann: Vin * 1024 ADC=------------ Vref Wie groß ist mit diesen Einstellungen Vref? Vin ist die Spannung gemeint die z.B. beim Spannungsteiler oder auch beim Sensor abfällt oder?
"Welchen Spannungswert hat jetzt mein PIN AREF" VCC. Was das ist musst Du selber wissen. Mir REFS1=REFS0=1 sind es nominell 2,56V. Der Wert ist zwar ziemlich zeit- und temperaturstabil stabil aber im betrag nicht genau, worst case 2,3V..2,7V. "Vin ist..." Vin ist die Spannung am ADC Eingang, bezogen auf AGND. Deine Schaltung kenne ich nicht. "Und was meinst du mit "aber lass den Teil einstellbar, damit Du eben auch die 1,22V ausprobieren kannst." Probier verschiedene Einstellungen des Multiplexers durch. Insbesodere eben die Werte 0x1E und 0x1F statt ADC0=0. Da muss ca. 1,22V bzw. 0V rauskommen. Wenn nicht, liegt das Problem nicht in den Einstellungen.
So es scheint so als ob mein AD-Wandler jetzt so richtig funktioniert wie ich will. Ich hab nur noch ein kleines Problem. Und zwar mit einem temperatursensor KTY16-6. Ich habe ja einen 10Bit AD-Wandler. -->5V/1024*ADWERT VCC + | | .-. | | | |1962 Ohm '-' | ADC-Pin ------o | .-. | |Temperatursensor: | |Rt1 = 1640 Ohm (0 °C ) '-'Rt2 = 2131 Ohm (35 °C ) | | === GND Den Sensor habe ich schon einmal an einem Siemans Controller 80C535 angeschlossen.Dieser hat allerdings nur einen 8 Bit Ad-Wandler. Hat so auch super funktioniert. (Siehe Word Datei im Anhang) Nur beim ATMEGA8535 tue ich mich noch einwenig schwer.
Sieht nach einem PTC aus. Je wärmer die Temp. je größer der Widerstand je größer die zurückbleibende Spannung am ADC-Pin. Also je kleiner der ADC-Wert, desto kälter, je höher der ADC-Wert, desto wärmer. Die Spannungs- und ADC-Werte kann ich Dir jetzt auf die schnelle nicht ausrechnen. MfG Andi
Hi Andi, die Gleichung habe ich: temperatur = 0.522625 * read_adc(1) - 243.874; Leider zeigt mein Display um 2 bis 3 Grad höhren Wert an. Wenn z.B 25 Grad(Termometer) dann zeigt mein Dsiplay 27 bis 28 Grad an.
Hi, nur zur Info ein ADC (Analog Digital Converter) =Analog Digital Umsetzer kann NIE Vref erreichen wie in deiner Tabelle beschrieben. Dein KTY16-6 hat keinen linearen Verlauf der Temperatur-Widerstandskennlinie. (siehe Datenblatt) Wenn du in dem Doc-File (sensorgleichung) ebenfalls diesen Sensor verwendet hast, ist deine Berechnung schlichtweg falsch und ich würde mir keine Sorgen machen ob ich einen 8bit oder 10bit ADC verwende. Und mit super meinst du nur dass du irgendwelche Werte rausbekommen hast, oder? Die Berechung kannst du jebenfalls dem Datenblatt (Seite 4) entnehmen. Grüße, Michael
Hast du eigentlich schon mal ausprobiert, den Controller während der Messung in den ADC-Sleep-Modus zu schalten?
nein den Controller habe ich bisher noch nicht in den Sleep Modus versetzt. Ich wüsste auch nicht wie es geht! Hallo Michael2! Danke für die Hilfe! Hmmm...leider weiss ich nicht wie ich die Gleichung verwenden muss. Bzw welche Gleichung?
> nein den Controller habe ich bisher noch nicht in den Sleep Modus > versetzt. Es gibt extra für die AD-Wandlung einen speziellen Sleepmodus, bei dem alle Takte außer dem des Wandlers ausgeschaltet werden, weil diese die Wandlung stören und das Ergebnis verfälschen.
Die interne Verlustleistung des PTC trägt wahrscheinlich auch etwas zur erhöhten Temperatur bei. Dieter
Hi, ad Berechnung: Datenblatt Seite4 du verwendest die Formel mit T=... statt kt setzt du ein kt=Rtemp/R25 (R25=1980-2020Ohm). Rtemp ist der berechnete Widerstandswert vom ADC {Rtemp = k * (Rref / (1024 - k)} So, nun sollte die Berechnung aber klappen. Weiters solltest du nur einen sehr kleinen Strom durch den Sensor treiben (~1mA) damit die Eigenerwärmung klein bleibt. Grüße, der2te Michael
Hallo, hei danke für die Info. Wie meinst du das hier R25=1980-2020Ohm? Muss ich da die Differenz nehmen oder der Mittelwert von beiden Werten? Hallo Rolf, weiss genau meinst du mit: "Es gibt extra für die AD-Wandlung einen speziellen Sleepmodus, bei dem alle Takte außer dem des Wandlers ausgeschaltet werden, weil diese die Wandlung stören und das Ergebnis verfälschen." Wie muss ich dies Softwaretechnisch lösen?
Hallo Michael2, hei danke für die Info. Wie meinst du das hier R25=1980-2020Ohm? Muss ich da die Differenz nehmen oder der Mittelwert von beiden Werten? Und mit diesem Ausdruck komme ich nicht so klar. ADC {Rtemp = k * (Rref / (1024 - k)} Was setzt du für k und für Rref ein? Hallo Rolf, weiss genau meinst du mit: "Es gibt extra für die AD-Wandlung einen speziellen Sleepmodus, bei dem alle Takte außer dem des Wandlers ausgeschaltet werden, weil diese die Wandlung stören und das Ergebnis verfälschen." Wie muss ich dies Softwaretechnisch lösen?
Hallo, ADC {Rtemp = k * (Rref / (1024 - k)} Was bedeutet hier k und Rref? Welchen Wert muss ich da einsetzen. Ich verstehe das nicht.
Erst im MCUCR den passenden Sleepmodus setzen (SM2-0 = 001b - ADC noise reduction) und SE (sleep enable) auf 1. Dann den sleep-Modus aktivieren. Wie der Befehl dafür heißt, hängt wohl vom Compiler ab. Die AD-Wandlung wird beim Aktivieren des Sleep-Modus automatisch gestartert. Das mußt du also nicht mehr manuell machen. Beendet wird der Sleep-Modus dann durch den ADC-Interrupt. Das heißt natürlich, daß du den vorher aktivieren mußt. Hier ein Beispiel, wie es bei mir in Assembler aussieht:
1 | ; enable ADC, interrupt and prescale 128 |
2 | ldi r16, (1 << ADEN) | (1 << ADIE) | (1 << ADPS0) | (1 << ADPS1) | |
3 | (1 << ADPS2) |
4 | out ADCSRA, r16 |
5 | |
6 | ; set ADC MUX channel to PB3 |
7 | ldi r16, (1 << MUX1) | (1 << MUX0) |
8 | out ADMUX, r16 |
9 | |
10 | in r16, MCUCR |
11 | ori r16, (1 << SM0) |
12 | out MCUCR, r16 ; set sleep mode to ADC noise reduction |
13 | |
14 | sleep ; auto-avtivates ADC. The ADC interrupt will |
15 | wake us up |
16 | |
17 | in SERVO0_LO, ADCL |
18 | in SERVO0_HI, ADCH |
Übrigens: Ist es so schwer, das in der Doku nachzulesen?
Hi Rolf, ja muss ich dies bei mir jetzt auch tun? Ich habe da noch ein Problem mit dem hier -->ADC {Rtemp = k * (Rref / (1024 - k)} Was bedeutet hier k und Rref????
Hallo, so ich hab es jetzt hinbekommen. Ich habe nochmals den Vorwiderstand gemessen. Statt 1962Ohm sind es 1966Ohm. Jetzt müsste der Temp Wert auch stimmen.Mein Quecksilber Termometer zeigt 28.5C an.
jetzt habe ich noch einen Luftdrucksensor von Motorola drangehängt. Meine Gleichung sieht dazu so aus: long_luftdruck = (188.1049927 * (5.00/1024))*read_adc(0) + 143.3427762; Auf dem Display erscheint ein zu niedrieger Luftdruck. Aktueller Wert bei mir: 992hPa. Es müsste doch so bei 1020 bis 1025 hPa liegen.Das verstehe ich nicht.
Nur mal so am Rande wegen den ADC-Werten wo es bereits eine Diskussion gab. 0 ist und bleibt doch 0 Volt. Dann bleiben doch eigentlich nur noch 1023 andere Werte übrig so das die Rechnung eigentlich long_luftdruck = (188.1049927 * (5.00/1023))*read_adc(0) + 143.3427762 sein müßte da es ja den Wert 1024 gar nicht geben kann. Macht man nun 5 / 1024 * 1023 kommt 4,995 raus und niemals 5. MfG Andi
> ja muss ich dies bei mir jetzt auch tun?
Ich weiß nicht, wie groß die Störungen durch die anderen Takte sind,
aber da es extra deswegen einen Sleep-Modus für die AD-Wandlung gibt,
ist anzunehmen, daß der dadurch entstehende Fehler signifikant ist.
Also wenn du hohe Genauigkeit willst, ist die Antwort vermutlich:
"ja".
Moin moin, danke für den ASM Code.Leider verstehe ich da nicht was sleep und wake up us bedeutet.WIe sind diese definiert?
'sleep' ist ein Assemblerbefehl, der den Prozessor in den sleep-Modus schaltet. In C wird es eine entsprechende Funktion geben, aber deren Namen kann ich dir nicht sagen. 'wake us up' ist der Rest des unglücklich ungebrochenen Kommentars der Vorzeile und kein Befehl.
Super ich verwende CodeVision AVR. Wie mach ich es da mit dem sleep Befehl? Heute Nacht habe ich in meinem C Programm festgestellt, dass ich eine flasche Gleichung für den Temperaturmessung genommen habe. Also bei mir ist es noch immer so dass ich einen um 3 bis 4 Grad höhren Wert angezeigt bekomme. Der Luftdruck stimmt wie gesagt auch nicht ganz. Ist um ca. 20hPa niedriger. Ich habe das Datenblatt x mal gewälzt, aber es bringt nix. Ich habe auch verschiedene Einstellungen des AD Wandler ausprobiert. Bei Aref messe ich 4,99V und die VCC hat bei mir genau 5,02V. Wenn ich beide Werte in den Rechnungen berücksichtige dann ändert sich auch nicht viel. Was kann ich denn noch machen?
Ich komme da nicht weiter. Ich weiss jetzt nicht wie ich da weiter machen kann.
Hallo..... Super ich verwende CodeVision AVR. Wie mach ich es da mit dem sleep Befehl? Heute Nacht habe ich in meinem C Programm festgestellt, dass ich eine flasche Gleichung für den Temperaturmessung genommen habe. Also bei mir ist es noch immer so dass ich einen um 3 bis 4 Grad höhren Wert angezeigt bekomme. Der Luftdruck stimmt wie gesagt auch nicht ganz. Ist um ca. 20hPa niedriger. Ich habe das Datenblatt x mal gewälzt, aber es bringt nix. Ich habe auch verschiedene Einstellungen des AD Wandler ausprobiert. Bei Aref messe ich 4,99V und die VCC hat bei mir genau 5,02V. Wenn ich beide Werte in den Rechnungen berücksichtige dann ändert sich auch nicht viel. Was kann ich denn noch machen?
Hallo, kann mir jemand die Formel für die Temperaturberechnung genauer erklären? ad Berechnung: Datenblatt Seite4 du verwendest die Formel mit T=... statt kt setzt du ein kt=Rtemp/R25 (R25=1980-2020Ohm). Rtemp ist der berechnete Widerstandswert vom ADC {Rtemp = k * (Rref / (1024 - k)} Was bedeutet k? Welchen Wert muss ich für Rref geben?
Rref dürfte der Widerstand bei Referenztemperatur (20 oder 25°C) sein, also der Nennwiderstand. Oder die meinen damit den anderen Widerstand (Vorwiderstand). Nochwas zur Vdd als Uref.: da der Sensor auch von Vdd versorgt wird, heben sich Abweichungen auf, Du willst ja keine absoluten Spannungen messen, sondern ein Verhältnis. Da ist eine Bandgap-Referenz eher schlechter. Einfache Multimeter messen den Widerstand, indem sie den unbekannten Widerstand an AD-in und den Referenz- = Vor-Widerstand an Vref-in legen. Das geht aber nur, wenn zumindest der V-Ref Eingang floatend und differenziell ist. Schau dir mal das Datenblatt und die ANs des legendären ICL7106 / Max160?? an. Oder wars der MAX130? Damit wird die Ohm-Anzeige linear und nicht 1/x. Du solltest auch mal hier im Forum suchen, das wurde schon 100mal durchgekaut.
Hi Michael 2, kannst du mir noch genauere erklären, wie ich diese Formel verwenden muss? ad Berechnung: Datenblatt Seite4 du verwendest die Formel mit T=... statt kt setzt du ein kt=Rtemp/R25 (R25=1980-2020Ohm). Rtemp ist der berechnete Widerstandswert vom ADC {Rtemp = k * (Rref / (1024 - k)} Was setzte ich für k und für Rref ein? Du hast hast hier das geschrieben (R25=1980-2020Ohm).Muss ich da jetzt die Differenz bilden oder den Mittelwert?
Hi, also k ist der Wert vom ADc 0-1024 und R25 ist der Wert deines PTC's bei 25°C. Rtemp ist dann der Widerstandswert bei einer bestimmten Temperatur. grüße, der2te_Michael
Hallo, ich habe noch Probleme mit der Temperaturmessung mit dem PTC Typ KTY16 den ich an meinem 10Bit Ad-Wandler des ATMEGA8535 angeschlossen habe. Im Datenblatt Seite 4 sind insgesamt drei Formeln aufgelistet. Folgendes Verstehe ich da nicht: deltaTa --> ? R25 --> welchen Wert muss ich da nehmen? R25=1980-2020Ohm Muss ich überhaupt diese drei Formeln verwenden? Ich hab da voll die Verständnissprobleme.Wie setzte ich dies Formeln in mein C Programm um? Was soll da genau? Wie kommt man auf diese Formel: ADC {Rtemp = k * (Rref / (1024 - k)}
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.