Arduino Standalone

Hallo Leute,

ich würde gerne einen Atmega328 auf einer Platine aufbauen. Da ich gerne den Analog Digital Wandler nutzen möchte und im Datenblatt steht dass ein Tiefpass vorgeschaltet werden muss, würde ich gerne wissen wie man den Tiefpass dimensioniert. Hat jemand nen Tip?
Danke und viele Grüße

Hallo Jimmy83 !

Wie tief darf der Tiefpass denn sein ? Ein Tiefpass MUSS NICHT vorgeschaltet sein, ist an den Analog-Eingängen aber manchmal sinnvoll ( z.B. wenn man Frequenz-Streuungen [ Hoch-Frequenz / Nieder-Frequenz ] durch z.B. digitale ICs hat [ besonders auf Breadboards kommt das vor ] ).
Tiefpass – Wikipedia ist die einfachste Lösung im passiven Bereich.

Aktive Tiefpässe baut man am besten mit Operations-Verstärkern auf: koemoba.de - This website is for sale! - koemoba Resources and Information. ( Seite 12 )

Bei dem passiven Tief-Pass musst du immer einen Kompromiss eingehen:
Der Widerstand darf nicht zu hoch sein, sonst verfälscht er das Mess-Ergebnis ( an dem Widerstand fällt Spannung ab ).
Dann muss man den Kondensator größer machen: Die Lade-Cyclen des Kondensators erhöhen sich, und man kann das Meß-Ergebnis nur alle 2 - 5 Sekunden korrekt abrufen.

Beim Arduino würde ich den passiven Tiefpass empfehlen ( siehe Wiki -Bild ) mit R = 470 Ohm ( oder 330 - 820 Ohm ) und einen Kondensator von 2,2 µF ( allerdings KEINEN Elektrolyt-Kondensator ! Es muss mindestens ein Folie- oder, MKT-Kondensator sein - aber es geht auch teuerer :frowning: )
Dieser reduziert das Rauschen schon beträchtlich. Und für einen 10 Bit A/D-Wandler ( wie beim Atmega328 ) ist KEIN Aktiver Filter erforderlich.

MfG

Hallo,

vielen Dank für deine Antwort. Ich hab gesehen, dass man einen Kondensator (100nF) an den AREF Pin gegen Masse legt. Welche der beiden Referenzspannungen (5V oder 2.56V) ist denn intern standardmäßig angelegt? Im Datenblatt vom Atmega habe ich dazu keine Info gefunden bzw. nur welche Bits im ADMUX-Register gesetzt werden müssen. Muss man diese vorher beim Initialisieren entsprechend setzen? Und wie sieht das Programmtechnisch aus?

Danke und viele Grüße

Die Frage ist für was genau willst Du den A/D Wandler nutzen? Je nachdem kann es sein, daß Du auch einfach direkt einen Arduino nehmen kannst und die Tiefpassgeschichte unter "nice to have" fällt. D.h. bis jetzt ist noch gar nicht klar ob Du das überhaupt brauchst.

also ich würde gerne mit dem arduino board den atmega328 programmieren, den Controller dann auf ne andere Platine setzen und ein LCD damit ansteuern. Auf dem LCD sollen dann Temperaturen von einem Temperatursensor ausgegeben werden, die über einen Analogpin eingelesen werden (5V soll dann 1023 entsprechen). Deshalb brauch ich als interne Referenzspannung 5V und weiß nicht was da standardmäßig liegt.

Gruß

Warum nicht gleich einen Sensor nehmen der per i2c oder twi gelesen werden kann? Das spart am Schluß enorm Aufwand bei der Glättung. UNd bei einem Einzelstück sind die minimal höheren Hardwarekosten im Vergleich zur gesparten Entwicklungszeit ganz sicher vernachlässigbar.

Okay das seh ich ein :slight_smile: Aber ich möchte ja noch ein Potentiometer zur Sollwertvorgabe anschließen...so oder so ich komm um den AD Wandler nicht drum herum :slight_smile:

Naja, Potentiometer lassen sich recht einfach vermeiden, wenn man Sollwerte vorgeben möchte: Zwei Tasten für +/- tun es oftmals auch, professioneller geht es natürlich mit einem Drehgeber. Vorteil des Potis: Wenn die Spannung neu angelegt wird, ist der Poti-Wert bereits da, per Taster oder Drehgeber eingegebene Vorgabewerte muss man im Eeprom ablegen und beim Programmstart neu laden. Ist zwar nicht schwierig, aber eben zusätzlicher Aufwand. Vielleicht als Idee zur Weiterentwicklung deiner Projektidee...

Mhhh daran hab ich noch nicht gedacht...hört sich aber interessant an...Ich muss aber trotzdem irgendwie rausfinden wie der µC jetzt stanardmäßig eingestellt ist um auch vernünftige Werte zu bekommen! Hast du vielleicht nen Link wie man Werte in EEPROMS ablegt und diese beim Programmstart wieder aufruft?

Gruß

Also standardmäßig entspricht 0V (Massepotential) einem Analogwert von 0, 5V am Analogeingang ergeben einen Rückgabewert von 1023.

Zum Eeprom: Beispiele liefert die Arduino-IDE schon mit (Examples-EEPROM). In der Endanwendung wäre ich aber vorsichtig, da sich das Eeprom nicht unendlich oft beschreiben lässt. Programmtechnisch würde ich das so lösen, dass der Wert erst in den Speicher geschrieben wird, nachdem er sich eine Sekunde nicht mehr geändert hat. So hat man die Sicherheit, dass bei einem dauerhaften Tastendruck nicht 1000 mal das Eeprom vollgekleckert wird. :wink:

Also wie die AD Wandlung an sich funktioniert weiß ich ja schon...d.h. 5V=1023 ist mir klar. Aber der AREF Eingang muss ja mit nem C gegen Masse beschaltet werden. Und da weiß ich nicht welche der beiden internen Referenzspannungen dann standardmäßig anliegt (5V oder die 2.56V). Ich will ja meinen µC vom Arduino auf ne andere Platine setzen...
Okay das mit dem EEPROM muss ich mir schon nochmal anschauen, hört sich aber sehr gut an. Danke

Ich kann dir nicht ganz folgen, was du damit eigentlich bezwecken willst. Lies dir mal diesen Artikel durch: analogReference() - Arduino Reference
Hier hilft dann auch der Blick in den Arduino Schaltplan (Schematic) auf der Hauptseite. Dort sieht man den Kondensator, der gegen Masse geschaltet ist, der ist aber mehr oder weniger ein Abblockkondensator, der gewisse Schwankungen einer externen Referenzspannung abblocken soll. Im Normalfall mit der internen Referenz (Default 5V) ist diese Beschaltung nicht zwingend erforderlich.

@Jimmy: ich würde wie folgt vorgehen:

  1. Die Gehäusefrage zuerst klären. Es ist im Hobbybereich viel leichter/billiger eine Schaltung dem Gehäuse anzupassen als umgekehrt
  2. Sensor mit I2C Schnittstelle.
  3. Kein Poti sondern ein Drehgeber für die Einstellung. Drehgeber – Mikrocontroller.net. Die Dinger gibts in ähnlichen Bauformen wie Potentiometer bei den üblichen Verdächtigen.
  4. Werte im EEProm ablegen. Das EEProm verkraftet pro Zelle 100 000 Schreibvorgänge. D.h. nicht bei jedem "Tick" schreiben sondern immer erst 1-2s nachdem sich nichts mehr tut. 100 000 Stellvorgänge musst Du erst einmal hinkriegen. Ansonsten kannst Du Dir auch bei Atmel die Application Notes durchlesen wie man einfaches Wear Leveling implementiert.
  5. LCD auch mit I2C Schnittstelle, dann hast Du hinterher noch genügend Pins frei für die Features die Dir alle noch einfallen werden

Pins sparen kann man auf vielfältige Weise, da gebe ich Udo recht. Wir wollen aber nicht unbedingt die Kosten für Hobby-Projekte explodieren lassen. I2C-taugliche Displays kosten meines Wissens nach unverhältnismäßig viel. Es gibt aber nette Arduino-Bibliotheken für die LCD-Ansteuerung mit Schieberegistern. Das wären dann nur 3 Pins, die (im Unterschied zu I2C exklusiv) für das LCD genutzt werden. Ob es dann auch ein I2C-Sensor sein muss, oder nicht auch ein OneWire-Sensor wie der DS1820 reicht, muss der Threadstarter selbst entscheiden.

1 Wire ist auch gut. Nur analog nervt. Ich habe hier locker >10 Displays rumliegen. Die billigen nicht i2c Displays sind nur billig. Ich wollte da auch sparen. Dann habe ich eben zweimal gekauft. So teuer sind die i2c Displays auch nicht. Aber die Dinger sind deutlich besser.

@sth77: Genau das war eigentlich meine Frage..ob nun 5V standardmäßig genommen werden und ob man den Kondensator unbedingt braucht :slight_smile:

Mit den Drehegebern muss ich mal schauen wie das genau funktioniert...hab so einen noch nie benutzt...hört sich aber auf jeden Fall interessanter an als ein Poti :slight_smile: Das EEProm kann ich ja einfach an den I2C Bus hängen und dann beschreiben (Bibliotheken gibts ja schon). Jedenfalls mal vielen Dank an alle!!!

Du brauchst kein externes EEProm. Der Arduino hat ein eingebautes EEProm.