Suche Library ADS1220 an ATmega328 ohne Arduino

#7940154
Lesenswert?

Hallo,

im Betreff ist eigentlich schon alles gesagt.

Ich möchte einen PT1000 mit möglichst hoher Auflösung ratiometrisch messen, Geschwindigkeit spielt praktisch keine Rolle.

Für Arduino gibt es eine umfangreiche Library, die auf der Arduino-SPI-Lib aufbaut - eine Tortur, sie beide nach gcc zu portieren.

Hat jemand was für mich?

Danke!

(Firma: 1984now) #7940164
Lesenswert?

Michael schrieb:

Für Arduino gibt es eine umfangreiche Library, die auf der Arduino-SPI-Lib aufbaut - eine Tortur, sie beide nach gcc zu portieren.

Hat jemand was für mich?

Ja, ein Tip: Lern' Programmieren.

Es ist überhaupt nicht nötig, die Arduino-SPI-Lib zu portieren. Du brauchst nur in der Lib, um die es eigentlich geht, alle SPI-relevanten Sachen auf dein eigenes Zeug anpassen. Oder was immer du als Low-Level-SPI-API benutzt, wenn die geistige Grütze nicht genügt hat, was komplett eigenes zu produzieren.

Ja, sowas nennt man Programmieren. Im Gegensatz zu Code zusammenklauben. Das können selbst Affen und KIs. Denen ist es halt nicht gegeben, zu verstehen, was da passiert. Du willst doch aber hoffentlich besser sein als ein Affe oder eine KI?

#7940173
Lesenswert?

Michael schrieb:

Für Arduino gibt es eine umfangreiche Library, die auf der Arduino-SPI-Lib aufbaut - eine Tortur, sie beide nach gcc zu portieren.

Arduino nutzt den GCC. Was genau passt dir daran nicht?

Ich möchte einen PT1000 mit möglichst hoher Auflösung ratiometrisch messen

Was hast du von so einer Auflösung? Wie willst du dein Pt1000-Exemplar so genau kalibrieren? Mit der Wahl des ADS1220 hast du dich doch bereits festgelegt, wenn du noch den Temperaturbereich nennst, in dem du messen können möchtest.

Die Realisierung einer "möglichst hohen Auflösung" hat nichts mit der Programmiersprache und schon gar nicht mit der Existenz irgendwelcher Bibliotheken zu tun.

: Bearbeitet durch User
Gast #7940233
Lesenswert?

wie üblich in diesem Forum, einfach helfen ist nicht..alles Einsteins und Oberlehrer hier... Hast du mal im Forum von avr freaks gefragt? https://www.avrfreaks.net/s/ oder Roboternetz de= Eigentlich wirst du in jedem anderen Forum die gewünschte Hilfe ohne Beleidigungen erhalten

hast du es mal mit ChatGPT versucht? Vielleicht klappt das dafür ganz gut, kann natürlich passieren, dass du es dann doch korrigieren musst, dass kann als Anfänger natürlich schwieriger werden, aber diesen Codeschnipsel kannst du dann ja bei avr freaks einstellen, da wird dir dann sicher geholfen

#7940260
Lesenswert?

Moin,

Was mich betrifft, würde ich lieber auf die Einzelheiten diskret aufgebauter Messelektronik und auf eine Fertiglösung wie z.B. der MAXIM31865 hinweisen. Hier das Datenblatt:

https://www.analog.com/media/en/technical-documentation/data-sheets/MAX31865.pdf

Dafür sprechen unter anderen:

  • Fertig aufgebaute erschwingliche Module erhältlich
  • Für viele Anwendungen ausreichende Genauigkeit und Auflösung.
  • Fertige Bibliotheken für Testzwecke (Referenz Design) (auch als Ansatz für eigene Implementationen

Ich weiß von was ich spreche, weil ich jahrelang eigene Schaltungen mit diversen 24-bit Wandlern im Industrieumfeld entwickelt habe.

Wenn man selber etwas bauen will, empfiehlt sich ein ADC mit externen Differenzial Referenzeingang. Dann kann der Vergleichswiderstand in Serie mit dem PT-Fühler geschaltet werden und eine einfache Stromquelle genügt. (Konstantstromquelle ist nicht notwendig). Gewisse Massnahmen sind natürlich notwendig, um den Spannungsabfall an den stromführenden Erregungsleitungen erfassen zu können. Mit den richtigen (Multi-Channel) ADCs bleibt die Grundschaltung aber relativ einfach.

Auch muß man sich Gedanken zum ESD- und generellen Überlastungsschutz machen.

Für viele Anwendungen lohnen sich aber die einschlägigen Speziallösungen der üblichen Platzhirsch-Firmen, weil Vieles gut durchdacht mit-integriert ist. Auch haben industrielle Konverter Fehlererkennung und Flexibilität bezüglich der Anschlusstopologie (3/4W)

Duck und weg, Gerhard

: Bearbeitet durch User
#7940298
Lesenswert?

Mairian schrieb:

wie üblich in diesem Forum, einfach helfen ist nicht..alles Einsteins und Oberlehrer hier...

Willkommen, hier bist auch DU genau richtig.

Gerhard O. schrieb:

Ich weiß von was ich spreche, weil ich jahrelang eigene Schaltungen mit diversen 24-bit Wandlern im Industrieumfeld entwickelt habe.

Michael schrieb:

Ich möchte nichts entwickeln, sondern lediglich mehrere bereits vorhandenen ADS1220-Platinen anwenden.

... mit möglichst hoher Auflösung - was immer damit gemeint sein mag. Mit Deinen Anforderungen gehörst Du zur Zielgruppe von Arduino. Dafür gibt es bestimmt eine fertige LIB.

Beitrag #7940302 wurde vom Autor gelöscht.
#7940309
Lesenswert?

Gerhard O. schrieb:

Dafür sprechen unter anderen: ... Für viele Anwendungen ausreichende Genauigkeit und Auflösung.

Damit wird man die Anforderungen des TO wohl kaum abdecken können. Er fragt explizit nach

Michael schrieb:

... mit möglichst hoher Auflösung

Bleeding Edge of Technology hat mit Standardlösungen nichts zu tun. Eventuell muss der TO hier Abstriche machen, wenn er schon bei der SPI-Kommunikation mit einem ADS1220 nicht auf eigenen Füßen stehen kann.

#7940312
Lesenswert?

Es gibt unzählige Libraries für den ADS1220, einfach mal nach "ADS1220 github" suchen. Da kann sich der TO die passende raussuchen, er schreibt ja nicht welchen Mikrocontroller er verwendet.

Eine ist z.B. diese hier:

https://github.com/MahdaSystem/ADS1220

Die setzt keinen bestimmten Mikrocontroller voraus und das Readme erkärt in ein paar Zeilen wie man die Library verwendet.

#7940319
Lesenswert?

Michael schrieb:

Ich möchte nichts entwickeln, sondern lediglich mehrere bereits vorhandenen ADS1220-Platinen anwenden.

Rainer W. schrieb:

Michael schrieb:

... mit möglichst hoher Auflösung

Bleeding Edge of Technology hat mit Standardlösungen nichts zu tun. Eventuell muss der TO hier Abstriche machen,

Die Auflösung ist mit der Vorgabe "ADS1220" ja bereits festgelegt, nix "Bleeding Edge". Für die erbetene Hilfe war das kein Design-Kriterium sondern nur Hintergrundinfo.

Dass im nicht-professionellen Umfeld "mit möglichst hoher Auflösung" meistens als "ich möchte mal aus Spass herausfinden, wie weit ich mit meinen Mitteln so kommen kann" gelesen werden muss, verdeutlicht die Fragestellung vielleicht. Finde ich auch völlig ok.

Michael schrieb:

Geschwindigkeit spielt praktisch keine Rolle.

Wenn man keine fremden Bibliotheken anpassen mag, ist es wohl am einfachsten, das Ganze Q&D per Bit-Banging selbst hinzuklöppeln.

https://www.ti.com/lit/ds/symlink/ads1220.pdf ab Seite 34 "8.5 Programming" liefert genug Info, um klarzustellen, dass das kein nennenswerter Aufwand ist.

HTH (re)

#7940324
Lesenswert?

Re schrieb:

Die Auflösung ist mit der Vorgabe "ADS1220" ja bereits festgelegt, nix "Bleeding Edge".

Unfug

Die angegebene Auflösung für einen zu messenden Parameter bezieht sich gewöhnlich auf eben diesen Parameter und nicht auf das Ausgabeformat des verwendeten Wandlers.

Angenommen die Spannungsvariation am Pt1000 überstreicht nur 10% des Wandlerbereichs, dann ist die effektive Auflösung für die Spannung bereits um rund 3,3 Bit kleiner. Dazu kommt die Steigung der Kennlinie dU/dT und natürlich das Rauschen, dass die effektive Auflösung weiter reduziert und von der Filterung (ggf. in der Software) abhängig macht.

Michael schrieb:

Ich möchte nichts entwickeln, sondern lediglich mehrere bereits vorhandenen ADS1220-Platinen anwenden.

Wie wäre es mit einem Schaltplan deiner Platine und die Beantwortung der Frage nach dem Temperaturbereich?

: Bearbeitet durch User
#7940540
Lesenswert?

Moin,

Der ADS1220 ist eigentlich ein sehr guter Ansatz, weil alles Notwendige darin enthalten ist, um einen einfachen Aufbau und RTD Messung in allen Topologien zu ermöglichen. Auch die FW ist dazu recht einfach. Die Polynomische Korrektur der Kennlinie nach Callendar-Van Dusen oder ähnlich lässt sich auch auf einem 8-bitter durchführen, wenn man das Polynom durch Faktorisierung auf einfache Multiplikationen reduziert. Generell genügen bei Temperaturerfassung ein paar Messungen/s. Das schafft auch ein AVR. Eine interpolierende LUT ist natürlich sonst auch ratsam.

Ich habe mir selber ein paar ADS1220 Bords bestellt, um selber damit Versuche anstellen zu können. Der ADS1220 ist ein nützliches Teil.

Für gute RTD Genauigkeit muß der Referenz Widerstand so genau wie möglich bekannt sein und temperaturstabil. Hier eignen sich gewisse Film Typen mit wenigen oder Null TK und 0.01% Genauigkeit. Die kosten natürlich um die $25, aber einer genügt. Wenn man alles richtig macht, ist je nach Güte des RTDs eine konvertierte Messgenauigkeit um +/- 0.05% durchaus mit mässigen Mitteln erreichbar.

An sich ist das ein tolles Projekt.

Gerhard

: Bearbeitet durch User
#7940628
Lesenswert?

Rainer W. schrieb:

Re schrieb:

Die Auflösung ist mit der Vorgabe "ADS1220" ja bereits festgelegt, nix "Bleeding Edge".

Unfug

Die angegebene Auflösung für einen zu messenden Parameter bezieht sich gewöhnlich auf eben diesen Parameter und nicht auf das Ausgabeformat des verwendeten Wandlers.

Angenommen die Spannungsvariation am Pt1000 überstreicht nur 10% des Wandlerbereichs, dann ist die effektive Auflösung für die Spannung bereits um rund 3,3 Bit kleiner. Dazu kommt die Steigung der Kennlinie dU/dT und natürlich das Rauschen, dass die effektive Auflösung weiter reduziert und von der Filterung (ggf. in der Software) abhängig macht.

Michael schrieb:

Ich möchte nichts entwickeln, sondern lediglich mehrere bereits vorhandenen ADS1220-Platinen anwenden.

Wie wäre es mit einem Schaltplan deiner Platine und die Beantwortung der Frage nach dem Temperaturbereich?

Im Datenblatt, Abbildungen 77-79 werden 2.4W RTD Schaltvorschläge vorgebracht. Es ist überzeugend, wie einfach mit solchen Bausteinen eine hochwertige Umsetzung des Vorhabens realisierbar ist.

Die kleinen im Handel angebotenen Bords lassen sich ohne Mühe für RTD, wie in den Schaltbeispielen angegeben, verdrahten. Eine Widerstandsmessgenauigkeit von besser als +/- 10mOhm sollte in der Praxis ohne Weiteres erreichbar sein, bzw hatte ich früher mit anderen Bausteinen erreicht.

#7940795
Lesenswert?

Gerhard O. schrieb:

Die Polynomische Korrektur der Kennlinie nach Callendar-Van Dusen oder ähnlich lässt sich auch auf einem 8-bitter durchführen, wenn man das Polynom durch Faktorisierung auf einfache Multiplikationen reduziert.

Auch auf 8-Bittern kann man richtige Float-Berechnungen machen, sofern es nicht auf extrem hohe Geschwindigkeit oder maximal reduzierten Speicherbedarf ankommt. Temperaturen sind nichts, was man mit hohen Frequenzen messen müsste. Und das will der Threadstarter ja auch nicht: Michael schrieb im Beitrag #7940154:

Geschwindigkeit spielt praktisch keine Rolle.

Sofern man nicht gerade meint, den Kram mit einem Tiny abwickeln zu müssen, ist i.d.R. das Flash des µC so groß, daß die paar Kilobyte, die für Float nötig sind, auch einfach nicht stören.

FÜr 8-Bit-AVR gibt es allerdings standardmäßig nur 32-Bit-Float, mit 64 Bit hat sich hier mal jemand beschäftigt:

Beitrag "64 Bit float Emulator in C, IEEE754 compatibel"

Ja, es ist hier auf µC.net eine Quasi-Religion, krampfhaft float und auch Funktionen wie printf zu vermeiden, aber das ist oft deutlich hinderlicher als daß es wirklich sinnvoll wäre.

Premature Optimisation und so.

Persönliche Seite #7942803
Lesenswert?

Arduino F. schrieb:

Johann L. schrieb:

eine veraltete

Tun es denn mittlerweile auch printf und seine Brüder mit 64 Bit double?

Was implementiert ist, ist die Größe von [long] double korekt zu behandeln.

Eine [long] double Erweiterung würde printf / scanf IMO zu sehr aufblasen. Bisher hat auch noch niemand eine entsprechende Erweiterung vorgeschlagen.

Für eine Ausgabe kann man einfach nach float casten (was dann bedeuet, dass man long double zur Berechnung verwenden muss).

: Bearbeitet durch User
Persönliche Seite #7942812
Lesenswert?

Gerhard O. schrieb:

wenn man das Polynom durch Faktorisierung auf einfache Multiplikationen reduziert.

Gemeint ist wohl Auswertung gemäß Horner, und nicht etwa eine tatsächliche Polynomfaktorieierung (ist noch nicht mal klar, ob das Polynom in Linearfaktoren zerfällt).

https://de.wikipedia.org/wiki/Horner-Schema

Das Verfahren wird man auch auf z.B. 32-Bit Systemen einsetzen wollen, da besser konditioniert als eine naive Auswertung.

: Bearbeitet durch User
#7942838
Lesenswert?

Johann L. schrieb:

Gerhard O. schrieb:

wenn man das Polynom durch Faktorisierung auf einfache Multiplikationen reduziert.

Gemeint ist wohl Auswertung gemäß Horner, und nicht etwa eine tatsächliche Polynomfaktorieierung (ist noch nicht mal klar, ob das Polynom in Linearfaktoren zerfällt).

https://de.wikipedia.org/wiki/Horner-Schema

Das Verfahren wird man auch auf z.B. 32-Bit Systemen einsetzen wollen, da besser konditioniert als eine naive Auswertung.

Ja. Genau diese Methode benutzte ich damals. Ich vergass, dass es als Horner Methode benannt wird. Danke für den Hinweis.

: Bearbeitet durch User
#7942871
Lesenswert?

Arduino F. schrieb:

Man kann mit 64 Bit double rechnen, aber man bekommt sie nicht ohne Klimmzüge(libc Ünterstützung) rein oder raus. Schade eigentlich....

Das wäre doch keine Raketentechnik, wenn man es selber schreibt! Für meine Zähler mache ich das seit Jahrzehnten und auch ein AVR ist dabei recht flott.

Aber was soll hier die Versteifung auf 'double'-Berechnungen bringen? Der TO ist nicht einmal in der Lage, Messwerte aus dem ADC auszulesen und seine 'Anforderungen' sind die übliche Spinnerei hier. Das ist schade!

(Firma: 1984now) #7944561
Lesenswert?

Johann L. schrieb:

Mi N. schrieb:

Aber was soll hier die Versteifung auf 'double'-Berechnungen bringen?

Noemand versteift sich auf double. Es wurde lediglich angemerkt, dass avr-gcc IEEE double an Bord hat, /falls/ man es denn nutzen möchte.

Ich denke, Gleitkommzahlen sollte man generell nur dann benutzen, wenn ihr Einsatz sinnvoll ist. Das ist bei den kleinen µC und den darauf typischerweise laufenden Anwendungen so gut wie nie der Fall. Ausnahmen existieren sicherlich, bestätigen aber wie immer nur die Regel.

Und auch mit mehr Resourcen sollte man sich den Einsatz von Gleitkommazahlen im Allgemeinen und double oder noch mehr im Besonderen sehr gut überlegen und das eigentlich nur dann ernsthaft in Erwägungung ziehen, wenn es entsprechende Hardwareinheiten zur Unterstützung gibt. Das Softwaregebastel in den Runtimes irgendwelcher Programmiersprachen ist mehr so als Machbarkeitsstudie ohne ernsthaften Praxisbezug zu verstehen. Es nützt ja nix, wenn man eine hochgenaues Ergebnis liefern kann, wenn es erst nächstes Jahr im Frühjahr verfügbar wird. Und es nützt insbesondere dann nix, wenn es in Wirklichkeit garnicht so genau sein muss!

#7944616
Lesenswert?

Ob S. schrieb:

Und auch mit mehr Resourcen sollte man sich den Einsatz von Gleitkommazahlen im Allgemeinen und double oder noch mehr im Besonderen sehr gut überlegen und das eigentlich nur dann ernsthaft in Erwägungung ziehen, wenn es entsprechende Hardwareinheiten zur Unterstützung gibt.

Wie Du selber weißt, ist das völliger Quatsch. Man nimmt, was man braucht. Fehlt nur noch Deine Forderung, alles in Assembler zu programmieren. Leider bist Du im letzten Jahrtausend stehen geblieben.

Persönliche Seite #7944643
Lesenswert?

Ob S. schrieb:

Johann L. schrieb:

Niemand versteift sich auf double. Es wurde lediglich angemerkt, dass avr-gcc IEEE double an Bord hat, /falls/ man es denn nutzen möchte.

Ich denke, Gleitkommzahlen sollte man generell nur dann benutzen, wenn ihr Einsatz sinnvoll ist.

Genau. Es ist Sache des Anwenders, das zu entscheiden. Und Sache der Tools ist es, Funktionalität zu bieten.

Das Softwaregebastel in den Runtimes irgendwelcher Programmiersprachen ist mehr so als Machbarkeitsstudie ohne ernsthaften Praxisbezug zu verstehen.

Allein für AVR + IEEE double findet man mindestens 5 verschiedene Implementierungen unterschiedlicher Autoren in Netz. Und das sind nur diejenigen, die man öfentlich findet. Eine konkret genannte Anwendung war z.B. Auswertung von GPS-Daten, wo erklärt wurde, IEEE single sei zu ungenau.

Ein AVR @ 16MHz schafft 1000 Funktionsauswertungen oder mehr pro Sekunde, wie sinl, asinl, etc. Eine GPS Auswertung dauert also nicht bis zum nächsten Frühjahr.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren