mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 13 Bit Genauigkeit mit Atmega messen ?


Autor: n+peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen !

Ich beschäftige mich seit kurzem mit AVRs (Atmega8 + Bascom) um für 
PV-Solar bzw. Windkraft Leistungmesser zu bauen (in Klartext mit LCD).
Ist soweit auch kein Problem, da hierfür die 10 Bit des internen ADC 
allemal ausreichen.

Aber, -- ich hab einen "Watts UP" zum ausmessen von E-Modelmotoren, und 
der schafft die Spannung und den Strom auf 2 Kommastellen bis 60 Volt 
bzw. 100 Ampere, und im Vergleich mit einem 6,5 Digitalvoltmeter sind 
die Werte sehr genau und die letzten Stellen des Watts UP sehr stabil,
mit Abweichungen von max. 2 Digits sind meine anderen Multimeter dagegen 
schlechter im Abschneiden. Der Watts UP hat einen Attiny 26 mit 10 Bit 
ADC verbaut.

Nun die Frage, wie geht das ???, es gibt zwar in anderen Beiträgen 
Vorschläge und Musterformeln, aber aus denen wede ich nicht schlau,
das man mit Mitteln von zwei Werten auf 11 Bit kommen kann ist mir klar, 
aber wie gehts dann weiter auf 13 Bit, hat jemand einen Vorschlag, 
vielleicht sogar in Bascom ?

mfg Peter

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird mit künstlichem Rauschen und Unterabtastung gemacht. Gibt es 
auch eine AppNote von ATMEL dazu.

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
n+peter schrieb:
> Hallo zusammen !
>
> Ich beschäftige mich seit kurzem mit AVRs (Atmega8 + Bascom) um für
> PV-Solar bzw. Windkraft Leistungmesser zu bauen (in Klartext mit LCD).
> Ist soweit auch kein Problem, da hierfür die 10 Bit des internen ADC
> allemal ausreichen.
>
> Aber, -- ich hab einen "Watts UP" zum ausmessen von E-Modelmotoren, und
> der schafft die Spannung und den Strom auf 2 Kommastellen bis 60 Volt
> bzw. 100 Ampere, und im Vergleich mit einem 6,5 Digitalvoltmeter sind
> die Werte sehr genau und die letzten Stellen des Watts UP sehr stabil,
> mit Abweichungen von max. 2 Digits sind meine anderen Multimeter dagegen
> schlechter im Abschneiden. Der Watts UP hat einen Attiny 26 mit 10 Bit
> ADC verbaut.

Atmel hat ein sehr schoenes application note (AVR121) wo das sehr gut 
drin erklaert ist.

> das man mit Mitteln von zwei Werten auf 11 Bit kommen kann ist mir klar,

Nein eben nicht. Wenn man zwei 10bit Werte mittelt kommt ein gemittelter 
10bit Wert raus. Mehr dazu im appnote.

Autor: T. C. (tripplex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder die so oft zitierte AVR AN-123

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie (und wann) das geht sagt dir Atmel:

http://www.atmel.com/dyn/resources/prod_documents/...

avr

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 13 Bit Genauigkeit

Der Unterschied zwischen Genauigkeit und Auflösung ist dir bekannt?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: n+peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die einstweiligen Antworten,

aber richtig, ich hätte den Eintrag mit "13 Bit Auflösung" benennen 
sollen. Mir gehts nur darum, wie ich auf 13 Bit Auflösung kommen kann, 
sprich 8192 Schritte, die natürlich auch reproduzierbar sein sollen.

Aber das mit den gemittelten 10 Bit ist mir etwas unklar, denn wenn ich 
einen 10 Bit Wert der zwischen zwei Werten umherhüpft (z.B. 743 + 744) 
dann erhalte ich nach dem Mitteln 743,5, dann komme ich auf 1024 x 2 = 
2048 Werte, und das sind für mich eben 11 Bit.
Welche Auflösung hat dann 10 Bit gemittelt ?

mfg  Peter,
bitte um noch mehr Anregungen

Autor: Ungast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dir die Theorie und Mathe dahinter nicht behagt:

Schneller als einen Wert pro Sekunde wird kaum jemand lesen können, du 
hast also alle Zeit der Welt um VIELE Messwerte zu sammeln und zu 
mitteln.
8192 Messwerte sollten kein Problem sein, und wenn du genug Platz für 
die Divisions-Routinen über hast auch noch mehr.

Ob du damit jetzt 11, 12, oder auch 16 Bit erreichst (ist eh durch die 
"qualität" deiner Rauschquelle limitiert), ist erstmal Wurscht, das wird 
eh niemand nachmessen.

Autor: n+peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt hab ich die Sache am laufen, falls es jemand probieren will, hab 
die Bascom Datei angehängt.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe nicht was du da machst !?

For I = 1 To 200
Z = Getadc(k)
V = Z + V
Next I

Du addierst 200x den ADC Wert auf und dann ?

Autor: n+peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann teile ich durch 10000 (W=V/10000), so habe ich die Kommastelle 
gleich an der richtigen Stelle,
mfg.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann sich natürlich selber die Taschen voll lügen oder man nimmt 
einfach nen besseren ADC.

Ohne Zusatzbeschaltung kriegst Du keine 13 Bit Auflösung (13Bit 
Genauigkeit kannste in jedem Fall knicken).
Du mußt ne Rampe auf das Eingangssignal oder auf die Referenz 
modulieren, wie in der App-Note beschrieben.

Ich vermute mal, die Schaltung mit dem ATtiny26 schaltet einfach die 
Verstärkung um oder nen Spannungsteiler.
Die 0,01V wirst Du bei kleinen Spannungen sehen können, ab einer 
Schwelle werden dann aber die Stufen größer.


Peter

Autor: Bernd (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage war eher ketzerisch gemeint :-) es erschließt sich mir nicht 
wie man auf 13 BIT kommt in dem man 200x aufaddiert und dann durch 10000 
dividiert.

Peter Danegger hat hier einmal ein Meßgerät vorgestellt:

Beitrag "ADC mit Multiplexanzeige"

Ich habe seinen Code mal auf 12 BIT modifiziert und dabei auch Offset 
und Gain Fehler des Wandlers herausgerechnet. Das kann man dann als 
Beispiel für die genannten Appnotes verwenden.

Ich kenne mich mit Bascom nicht aus daher hier das Prinzip in C.

uint16_t getAdcValue (void)
{
    uint16_t AvgCount = 0;
    uint32_t AvgSum = 0;

    for (AvgCount = 0; AvgCount < 256; AvgCount ++) {
        ADCSR |= (1 << ADSC);                            // AD Wandler starten
        while (ADCSR & (1 << ADSC));                     // AD Wandlung fertig ?
        AvgSum += ADC;                                   // Mittelwert über 256 Messungen
    }
    return (AvgSum >> 6);                                // Oversampling 12 BIT
}


Zu beachten ist, meine 7 Segmentanzeige ist anders angesteuert als 
Peters... hier also die entsprechenden Defines anpassen.

Peters Code führte auf der letzten Stelle zu "Sprüngen". Das hat mich 
gestört und daher die Anpassung. Mit 12 BIT funktioniert es ohne 
Probleme.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd schrieb:
> Die Frage war eher ketzerisch gemeint :-) es erschließt sich mir nicht
> wie man auf 13 BIT kommt in dem man 200x aufaddiert und dann durch 10000
> dividiert.

Naja, dein Code macht doch ähnliches:

1. 256 ADC-Wandlungen aufaddieren
2. Durch 16 teilen.
3. Durch 4 teilen.

1+2 = laut Appnote 256faches Oversampling und 4x shift right für 14bit.
3   = zusätzliche Division um auf 12bit zu kommen.

n+peter macht folgendes:

1. 200 ADC-Wandlungen aufaddieren
2. Durch 200 teilen (arithmetisches Mittel)
3. Durch 50 teilen.

1+2 = arithmetisches Mittel von 200 Samples.
3.  = zusätzliche Division

Für 13bit "Auflösung" soll laut Appnote 64faches Oversampling durch 8 
(3x shift right) geteilt werden. Das wurde hier nicht beachtet.

Künstliches Rauschen vorausgesetzt. Ich habe mir die Appnote jetzt nicht 
so genau angesehen und weiß nicht, ob die Rauschpegel bekannt sein 
müssen oder zufällig sein dürfen.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Für 13bit "Auflösung" soll laut Appnote 64faches Oversampling durch 8
(3x shift right) geteilt werden. Das wurde hier nicht beachtet.

Genau das meine ich ! er kommt NIE auf 13 BIT.

Autor: Thomas W. (wagneth)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleine Frage...

Was für eine Spannung möchte denn der TE messen ?

Das Prinzip funktioniert doch nur wenn das Signal zappelt, oder ?
Bzw man rechnet sich über die Nomalverteilung der (statistischen) 
Messfehler "Zwischenbits" dazu ?!?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der TE macht mit seinen mehrfachen Samplings nur eine Glättung der Daten 
(=> arithmetischer Mittelwert) und schneidet anschließend noch die 
springenden Bits ab (/50 = 5,? Bits).

Insgesamt bleibt die Auflösung des ADC erhalten (10bit). Durch 
Mittelwertbildung könnten auch vorgetäuschte 11bit zustande kommen 
(Beispiel 2+3/2 = 2,5).

Durch das Abschneiden der letzten 5,? Bits bleiben auch nur noch knapp 
5Bit für den anzuzeigenden Messwert übrig. Das ist ein Wertebereich von 
0-31. Bei Vref von 5V ergibt das Schritte von 0,16V.

Diese Betrachtung gilt natürlich komplett ohne Rauschen.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> und schneidet anschließend noch die springenden Bits

und wenn da noch was springt dann hat er ein grundlegendes Problem. Da 
"springt" auch nichts mehr bei einer Skalierung auf 12 BIT.

Autor: n+peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen !

Ich bin erstmals zufrieden mit dem Ergebnis meiner Testschaltung und 
Programm, ne, 13 Bit funktioniert nicht zufriedenstellend, da flattern 
die hinteren Stellen zu viel, aber mit den 11 Bit passt es.

Im Prinzip funktioniert die Sache (das wollte ich mit diesem Beitrag ja 
erfahren), klar das Signal muss um den Wert rauschen, sonst gehts gar 
nicht, beim Test mit einem Sharp-Pocket mit 8 Bit-Interface stehen die 
ADC Werte wie festgebunden, da funktioniert es nicht, oder kaum, 
außerdem kann man nicht viele Werte aufsummieren, da die Sharps zu 
langsam sind.

Und von wegen Genauigkeit, die letzte Stelle muss nicht genau sein für 
die meisten Anwendungen, sie soll Tendenzen anzeigen.

mfg.  Peter

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

schön das du dich zurück meldest. Ich wollte dich eigentlich dazu 
motivieren es mit den 13 BIT aufzunehmen :-) aber bei dir stimmt die 
Rechnung so nicht oder ich bin wirklich zu blöd "Bascom" zu lesen.

Du bildest doch nur einen Mittelwert (10 BIT) und sähst dann noch 
weitere Stellen ab. Keinen Schimmer wie du überhaupt an einen Wert 
kommst der brauchbar ist.

>> Im Prinzip funktioniert die Sache

Nicht nur im Prinzip sondern auch in der Praxis, siehe Beispielcode und 
Schaltung.

>> 13 Bit funktioniert nicht zufriedenstellend, da flattern die hinteren
>> Stellen zu viel

Da flattert nichts mehr, der Meßwert steht absolut stabil.

Aus meiner Sicht stimmt dein Code nicht und wenns noch "flattert" dann 
stimmt noch mehr nicht.

Seis drum, du bist zufrieden :-)

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tja, wie hoch ist denn nun Genauigkeit und Auflösung des kleinen 
Eigenbau-Voltmeterchens im Anhang?

Mir ist es eigentlich egal, ein paar Freunde und ich sind damit 
zufrieden und nutzen es sehr häufig.

...

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Tja, wie hoch ist denn nun Genauigkeit und Auflösung des kleinen
>> Eigenbau-Voltmeterchens im Anhang?


12 BIT bei einem Eingangsspannungsbereich von 0 - 27 Volt (AREF) bei dem 
gewählten Bereich (Spannungsteiler 10:1) also 10 mV. Sind ja nur 4
7-Segment Ziffern darauf (siehe Schaltplan). Zuvor waren es 10 BIT und 
dann springt die letzte Stelle.

Genauigkeit ist +- 2 Digit. Die werden aber auch nur erreicht weil 
Offset und Gainfehler auch behandelt sind.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oooh, sehe jetzt erst deinen Anhang, schau ich mir mal an :-)

Autor: Joe Redfish (joer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht haben die Ingenieure im "Watts UP" einfach einen 
Sigma-Delta-Wandler - mit Kondensator und Komparator gebastelt? Damit 
kann man extrem hohe Auflösungen erreichen bei längerer Messzeit.
Als PIC habe ich das schon mal gesehen:
http://www.microchip.com/stellent/idcplg?IdcServic...

Kennt jemand eine AVR Lösung dafür?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Idee dahinter ist recht einfach. Man nehme einen DA Wandler mit 
hoher Auflösung, das kann auch ein R2R Netzwerk sein und erzeugt eine 
Rampe.

Wann immer der Komparator "kippt", entspricht die Eingangsspannung dem 
ausgegebenen DA Wert.

Autor: Joe Redfish (joer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dem muss ich widersprechen.

http://de.wikipedia.org/wiki/Sigma-Delta-Wandler

Im PIC Projekt wird mit 2 Widerständen und einem Kondensator als externe 
Bauelemente und intern mit Komparator und Timer, sowie natürlich einem 
schönen Stück Software, ein sehr genauer ADC realisiert. Ursprünglich 
für MCU's ohne ADC. Siehe mein Link weiter oben. Dort ist alles 
beschrieben und mit Assembler-Quellcode für den PIC.

Ich fage nochmal, hat das schon mal jemand für AVR gemacht?
Speziell der Digitalfilter könnte sicher effizienter geschrieben werden.

Da die externen Bauelemente extrem in die Genauigkeit eingehen, sollte 
man auch eine Selbstkalibration einbauen - sowohl für Nullpunkt und 
Endwert. Die Linearität könnte man berechnen. Ich denke 16 Bit 
Genauigkeit sind machbar.
Es ist allerdings langsam.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, der DAC ist halt als 1 BIT ausgeführt. Man kann das mit ner PWM 
und einem Tiefpaß realisieren.

Bei 16 BIT würde ich da nicht das Basteln anfangen sondern einen 
fertigen Wandler kaufen. Ist schon schwer genug die 16 BIT einzuhalten 
(Layout etc.).

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe Redfish schrieb:
> Kennt jemand eine AVR Lösung dafür?

Atmel:
http://www.atmel.com/dyn/products/app_notes_mcu.as...

AVR400:
http://www.atmel.com/dyn/resources/prod_documents/...

und 401:
http://www.atmel.com/dyn/resources/prod_documents/...

Allerdings traut Atmel dem Ganzen nur 8 bit zu.

Gruß
Jadeclaw.

Autor: Joe Redfish (joer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das trifft es leider auch nicht. Das sind Rampenkonverter. 
Ziemlich ungenau. Der von Microchip beschriebene Sigma-Delta-Wandler 
funktioniert über eine Rückkopplung und erzeugt - einfach gesagt - ein 
PWM Singnal hoher Frequenz dessen High-Low Verhältnis dem Analogwert 
annähernd entspricht. Die Timerauflösung und die Integrationsdauer sind 
ausschlaggebend für die Genauigkeit.

Hier im Forum gibt es in der DSP Abteilung schon Lösungen für FPGA und 
DSP. Aber halt nicht für AVR. Der digitale Filter ist nicht ganz 
trivial.

Der Vorteil dieser Schaltung ist die große mögliche Genauigkeit bei 
minimalem Bauteilaufwand.

Die Software schreiben wir nur einmal - den 16Bit ADC müsste jeder 
kaufen um das zu erreichen.

Wer hat noch nie einen genauen ADC benötigt, wo die Wandlungszeit 
sekundär war?

Ein Analogmultipexer am Eingang könnte für die Autokalibrierung Referenz 
und AGND aufschalten.

ODER, traut sich jemand zu den digitalen Filter in C zu schreiben?
Mit Assembler geht das zwar alles auch, ist aber mühsam.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht mal einen anderen Ansatz, der hier hat einen solchen Wandler 
an Board und kostet nicht mal 2 Euro.

http://focus.ti.com/docs/prod/folders/print/msp430f2013.html

Ich habe die Wandler der AVR, Silabs (8x51) und MSP's getestet, der 
Preis rechtfertig in keiner Weise den Aufwand den du treiben willst.

Übertrage das Wandlerergebnis einfach per SPI zu deinem AVR.

Autor: Joe Redfish (joer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Berd
Ja Danke, ist ja sicher gut gemeint von Dir. Aber der Aufwand ist nur 
einmalig. Danach kommt der Wandler mit 1x4051, 2 Widerständen und einem 
Kondensator aus, ist hochgenau, hat 6 Eingänge und kostet fast nix. Wenn 
sich das nicht rentiert für uns alle? Muss man halt mal machen.

Ich brauche das oft mal und wie immer soll es nichts kosten.

Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal so gefragt: wie genau ist denn die Referenzspannungsquelle? Wenn 
diese 12Bit auf ein LSB genau ermöglichen soll, muss die auch schon ganz 
anständig sein.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Joe Redfish

Eingänge hat der MSP genug :-)

>> Ich brauche das oft mal und wie immer soll es nichts kosten.

Wird es aber :-) denn die Zeit die du investierst um herauszufinden das 
so etwas nicht trivial ist kostet auch Geld.

Ansonsten mein letzter Tipp :-) nimm nen U/F Wandler.

Autor: Joe Redfish (joer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die interne Band Gap Referenzspannungsquelle hat zwischen -40 und 85°C 
bei 3,3Volt Betriebsspannung 0,004V Abweichung. Bezogen auf Ihren 
Sollwert 1,25V genügt das für eine Genauigkeit von 8,5 Bit. Also 
arbeitet der interne ADC im Temperaturbereich -40 bis 85°C auch nur auf 
8Bit genau.
Bei Temperaturen von 15 bis 35°C sind es immerhin schon 10,5 Bit 
Genauigkeit.
Auch nicht zu viel, aber für die Wiederholgenauigkeit bei 16Bit ist mir 
das ausreichend. Bei mir geht es primär um eine Temperaturreglung. Ich 
möchte schnell erkennen wenn sich im Raum die Temperatur um Milligrade 
ändert. Das geht mit 12Bit nicht. Der Absolutwert muss nicht so genau 
sein. Meine PT1000 sind auch nur in der Genauigkeitsklasse 0,5%.
Das gleiche Problem gibt es z.B. beim Auswerten von 
Erschütterungssensoren, Gyrosensoren oder Audiosingnalen. Da genügen 
12Bit Dynamik vom SAR-ADC nicht.

Wer es genauer möchte, kann die interne Referenz eichen und den 
Temperaturkoeffizienten herausrechnen. Alterungsbeständige Widerstände 
und Kondensatoren vorausgesetzt. Da kommt aber Bernds Vorschlag besser.

Ich habe etwa 36 Sensoren und einen SPI, hm.
Das Bestechende am Delta Sigma Wandler ist die einfache Anschaltung. Die 
Empfindichkeit wird mit dem Widerstandsverhältnis geregelt. Keine 
komplizierte OPV Schaltung, Störsingnale werden wegintegriert wenn ich 
symmetrische Kabel verwende etc. Was geht besser und ist preiswerter?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> möchte schnell erkennen wenn sich im Raum die Temperatur um Milligrade
>> ändert.

Jetzt bin ich neugierig :-) wofür brauchst du das denn ?

Autor: Joe Redfish (joer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luftzug, Sonneneinstrahlung, Personenabstahlung, Fenster auf/zu sind 
alles verschiedene Wärmequellen/senken die ich anhand der genauen 
Kennlinie identifizieren kann. Eine normale Reglung gleicht die 
Temperatur einfach aus, nix mit Energie sparen. Eine Event gesteuerte 
Reglung wird nach der Lernphase erkennen das jetzt gelüftet werden soll 
oder was auch immer.
In Abhängigkeit der Up/Down Geschwindigkeit der Temperatur kann der 
Regler frühzeitig entscheiden ob er jetzt aufdreht oder abschaltet. 
Desweiteren ist mir die Anschaltung an einen normalen SAR-ADC mit OPV's 
zu aufwändig. Mit meinem Vorschlag brauche ich nur einen Muxer, einen 
Widerstand und einen Kondensator. Der Eingangswiderstand ist der/sind 
die PT1000 und da die Spannung am Kondensator immer 1,24Volt ist, fließt 
da auch ein Konstantstrom von 1,24mA durch, perfekt. Die 16 Ohm vom 
Multiplexer ziehe ich ab. Als Referenz dient nicht die Spannung, sondern 
ein 1KOhm Widerstand für den Nullwert und ein 3,9kOhm für den Endwert. 
Die muss ich genau ausmessen. Damit ist die Referenzspannung so gut wie 
unwichtig.

Falls es jemanden gibt der sich mit digitalen Filtern auf AVR auskennt 
oder schon mal was gehört hat, wenn möglich in C, dann kann er sich ja 
mal melden.

Ich habe derzeit ein Problem das im AVR GCC "double" mit 32Bit Länge 
definiert ist (warscheinlich 24.7). Gibt es da eine Lösung? Könnte man 
nicht einfach die "defines" ändern und den GCC neu kompilieren?
z.B. im GCC 4.4.2 in Datei \\gcc-4.4.2\gcc\config\avr\avr.h

Zeile 161:
#define DOUBLE_TYPE_SIZE 32
#define LONG_DOUBLE_TYPE_SIZE 32

auf 64 ändern und den GCC neu kompilieren...

Kann das jemand?

In anderen CPU Headern ist der Wert auf 64.
Es muss also gehen.

cris:
/* Note that DOUBLE_TYPE_SIZE is not defined anymore, since the default
   value gives a 64-bit double, which is what we now use.  */

Motorola 68HC11 and 68HC12:
/* A C expression for the size in bits of the type double on the target
   machine. If you don't define this, the default is two words.
   Be IEEE compliant.  */
#define DOUBLE_TYPE_SIZE        64
#define LONG_DOUBLE_TYPE_SIZE   64

Ich meine die AVR-Flashgröße ist mittlerweile recht üppig.
Da würde ich jetzt nicht mehr sparen.
Vielleicht umschaltbar machen.
Auf jeden Fall gab es hier im Forum schon Probleme damit, GPS Daten 
genau genug zu berechnen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.