Ich wollte mir eine Heizungssteuerung bauen, bin aber schon bei noch nicht einmal der Hälfte der von mir angedachten Dinge an die Grenzen eines Arduino mit ATMEG328P gestoßen. Nicht wegen den I/Os oder so, sondern ganz banal wegen dem Flashspeicher. Was ich brauche:
OLED Ansteuerung per U8glib
SD-Karten Zugriff für Konfiguration (Temperaturen usw.) und Logging
RTC per DS3231
PWM Steuerung der Heizung
Diverse digitale Ein-/Ausgänge (LEDs, Taster)
Serielle Kommunikation mit ESP8266 (UDP-Client und Server)
Aber schon bei der Kombination OLED, SD-Karte und RTC bin ich bei 30,2kB RAM (97%) und 1,35kB (65%) SRAM. Und da habe ich noch keinerlei Logik für die Temperatur-Steuerung oder die Kommunikation mit dem ESP8266 implementiert.
Scheinbar ist der 328P nicht die richtige Wahl für mich
Eventuell sollte ich auf einen ATmega2560 umsteigen... oder auf einen STM32F10xxxxx?!
Vom ATmega2560 gibt es leider keine Version für Breadboards und von dem ARM-Gedöns habe ich leider null Ahnung.
Es geht mir hier erst einmal um einen funktionierenden Prototyp.
Wenn alles funktioniert würde ich mir eh per OSH-Park (oder Alternativen) eine Platine für alle Komponenten bestellen.
Der ist günstig:
256 Kb Flash, 64 Kb Ram, 96 Mhz, RTC lässt sich einfach mit draufsetzen. Ein externer RTC wird nicht benötigt. 33 IOs (mit analogen Eingängen). ADC mit 12 Bits (0-4095). (Lässt sich auch mit der Arduinoumgebung Programmieren [mit einem Update])
Verstehe den Hype um den ESP nicht so ganz. Zwei Geräte zu verwalten ist eher ungünstig. Der Vorschlag von Jomelo ist gut. Ich würde aber eher zum Atmega644 oder Atmega1284 wechseln. Beide sind auch im großen DI-Package erhältlich und es ist immer noch immer ein AVR mit typischer Architektur.
Hype...?
Wenn ein 328 (oder irgend ein anderer AVR) an einen ESP geklebt werden soll, ist aus meiner Sicht, klipp und klar, wer das meiste an Arbeit erledigen sollte. Und ganz insbesondere dann, wenn es auf dem AVR knapp wird.
Der AVR als Master ist irgendwie absurd.
Als wenn man einen Porsche Motor an einen Kettcar baut, und ihn dann als Generator für die Beleuchtung nutzt.
:o nicht alles was hinkt, ist ein Vergleich :o
Nicht falsch verstehen, ich mag die kleine AVRs.
Und sie können viel!
Hätte für die ESP keinen besonderen Anwendungszweck, wo ich die irgendwo effizient für verschiedene Sachen nutzen kann. Ich seh das Teil mehr so wie als Peripherie für den Atmega. Eine Möglichkeit, die Serielle Schnittstelle in ein Netzwerk weiterzuleiten.
Gerade für solch ein Projekt. Hier sollte die Rechenleistung des AVRs locker ausreichen. Gut möglich, dass er sich sogar noch langweilt. Den Atmega328 setze ich selber so gut wie nie ein. Diverse Libs sind aufgrund ihres umfanges nicht gerade dafür bekannt, ressourcensparend zu sein. Ob das ganze nun wirklich auf den Atmega328 passt, ist eine andere Sache. Erst einmal ja, jedoch ist vermutlch ist der Aufwand deutlich höher, als direkt eine Klasse nach oben zu gehen bei den Controllern.
Des weiteren bin ich jetzt nicht so der Freund von diesen ganzen C++ Erweiterungegen gegenüber C auf den kleinen Teilen. Hatte immer noch vor, mich mal selber in die ARMs einzuarbeiten. Habe aber derzeit auch nur 3 davon hier, mit denen ich noch nichts wirklich gemacht habe. Due und Zero nur über die Arduino IDE genutzt. Möchte auf Dauer aber eher auf den Zero setzen, bzw. dessen M0+ Controller. Programmiergeräte etc hab ich schon alles hier. Gibt die M0+ noch in einer kleineren Variante, der dann in etwa dem 328P gleichkommt, nur halt mir deutlich mehr Schnittstellen. Aufgesetzt werden solls aber wenn überhaupt mit ASF.
Ist auch so das nächste, was ich dann auf Dauer tauschen will. Hab ein paar nette Applikationen mit den Tiny841 gelöst. Sind aber dann auch wirklich an der Schmerzgrenze, was Speicher, Ram usw. betrifft. Nur stört mich dahingehend noch etwas die Dokumentation. So erklärend wie beim AVR haben die es nicht geschaft. UART, wie gehts?- > DB, alles klar.
Hätte für die ESP keinen besonderen Anwendungszweck
Ja.
Aber (ich hasse "aber"), Falls du mal Lust auf WiFi bekommst, kannst du bei vielen Anwendungen auf den AVR verzichten, ohne jede Einbuße. Ok, die Anzahl Pins...
Ist im Grunde eine einfacher 32 Bit Prozessor.
Vergleichbar mit kleinen ARMs.
Des weiteren bin ich jetzt nicht so der Freund von diesen ganzen C++ Erweiterungegen gegenüber C auf den kleinen Teilen.
Es gibt einiges an ++ Eigenschaften, welche man ganz entspannt nutzen darf, ohne jede Einbußen.
Wie sehe ich das denn?
Wenn mir irgendeine Aufgabe/Projekt zufliegt, dann schaue ich auf meine Ressourcen, ob sie zur Lösung beitragen, suche Alternativen.
Hardware und Sprachen sind mir egal. Der jeweilige Einarbeitungsaufwand muss Abgewogen werden.
Wenn ich mich mit AVRs beschäftige, dann ist C++ das Mittel der Wahl, und Arduino eine der möglichen Plattformen/Entwicklungsumgebungen. (PIC liegt mir nicht so)
Ich sehe die Programmierwelt etwas OOP lastig. Die Denke liegt mir.
Jahre lang PHP. Da denkt man über ein paar hundert kB nicht nach...
Ja, das wird auch genau der Knackpunkt sein. Die meisten Anwendung bei mir erfordern überhaupt keine Kommunikation zur Aussenwelt. Da kann man auf sowas gut verzichten. Wifi ist für mich nur eine Notlösung, und lediglich Privat eine Lösung. (Alles meine eigene Meinung). Brauche ich etwas, was mit der Aussenwelt kommuniziert, würde ich nicht auf den AVR einen EthernetController setzen, der auch noch komplett von AVR verwaltet werden muss (Speicher). Sind keine Timing intensiven Prozesse nötig, so greife ich dann lieber zu ARM/x86 Lösungen, mit denen ich auf Konsolenebene arbeiten kann. Das ganze entspricht ja eher auch deiner Auffassung. Sind die Aufgaben nicht machbar, greife ich zu einer nächst höheren Ebene. Mit PICs habe ich hingegen nie gearbeitet, auch wenn ich diverse Microchips (nicht µC) doch sehr schätze. Arduino IDE ist für meine Attinys meist zu viel des guten. Der Grund, wieso ich ab und zu mal die Arduino IDE wieder installiere, ist wenn ich mit FastLed mal was schnell testen möchte.
sschultewolter:
Den Atmega328 setze ich selber so gut wie nie ein. Diverse Libs sind aufgrund ihres umfanges nicht gerade dafür bekannt, ressourcensparend zu sein. Ob das ganze nun wirklich auf den Atmega328 passt, ist eine andere Sache. Erst einmal ja, jedoch ist vermutlch ist der Aufwand deutlich höher, als direkt eine Klasse nach oben zu gehen bei den Controllern.
Man könnte den unbequemen Weg gehen und die Libs ausmisten. Dazu müsste man durch auskommentieren von Libs den Speicherbedarf ermitteln und dann ggf. nach Ersatz suchen bzw. z.B. Sensoren oder RTC ohne Lib auslesen. Einfacher ist wohl einen größeren Controller zu nehmen.
Da für das Projekt eh eine eigene Platine gefertigt werden soll, könnte man die Funktionen auch aufteilen und in 2 Atmega328 (Anzeige/Bedienung und Regelung/Steuerung) unterbringen und diese wiederum per i2c verbinden.
Die U8Glib ist ja dafür bekannt, sehr Speicherhungrig zu sein. Da gibt es auch hier im Forum einige Vorschläge dies zu ändern.
Hallo Torsten,
ich habe eine komplette Heizungssteuerung seit mehreren Jahren in Betrieb. Fast genau so wie deine
gewünschten Vorgaben.
Frage: warum Taster als Eingänge? So hab ich auch angefangen, heute arbeite ich mit Touchscreen, ist wesentlich einfacher, auch von der Hardware-Verdrahtung.
Uhrmodul und SD-Karte zur Konfiguration hab ich auch.
Ich hab alles mit einem Mega und 7" TFT realisiert.
gruß
ikarisan:
... an die Grenzen eines Arduino mit ATMEG328P gestoßen. Nicht wegen den I/Os oder so, sondern ganz banal wegen dem Flashspeicher. Was ich brauche:
OLED Ansteuerung per U8glib ...
Als ich mit meinem Display zu spielen anfing, habe ich mir eine eigene Bibliothek geschrieben. Die ist vergleichsweise winzig, kann aber alles, was man so braucht (geometr. Figuren, Text). Mit Speicher bekomme ich erst Probleme, wenn ich zu viele Bilder im Flash unterbringen möchte. Was für einen Controller benutzt Dein Display?
combie:
Verwende den ESP als Hauptprozessor, und mache den ATMega328P zum I2C Sklaven.
Daran hatte ich auch schon gedacht. Zumindest was die Ansteuerung des OLED angeht. Bin mir nur nicht so ganz im Klaren, wie ich über I2C Befehle an den ATMega schicken kann. Also quasi eine Art RPC oder so. Eventuell sollte ich dann auch statt eines ESP01 einen ESP12 verwenden. Zur Not kann man beim ESP ja noch den 4Mbit Flashchip gegen eine 32MBit Variante tauschen.
Jomelo:
Oder verwende einen Teensy 3.2
Sieht auch sehr interessant aus. Sind aber immerhin 25€. Verglichen mit meinen 2,56€ Arduino Nano aus China schon eine Hausnummer.
HotSystems:
Da für das Projekt eh eine eigene Platine gefertigt werden soll, ...
Die U8Glib ist ja dafür bekannt, sehr Speicherhungrig zu sein. Da gibt es auch hier im Forum einige Vorschläge dies zu ändern.
Voerher hatte ich die Adafruit OLED Library verwendet. Die alleine hatte schon >90% des Speichers aufgebraucht. Dahingegen ist die U8Glib eine sehr schlanke Lib! Ich brauche aber auch nur verschiedene Schriftgrößen und Funktionen für Rechtecke (ausgefüllt und leer) und Linien.
Das mit der Platine ist noch ferne Zukunft. Erst einmal muss das auf meinen drei Breadboards laufen.
maverick1509:
ich habe eine komplette Heizungssteuerung seit mehreren Jahren in Betrieb. Fast genau so wie deine
gewünschten Vorgaben. ...heute arbeite ich mit Touchscreen
Wird deine Steuerung auch von der Heizung mit Strom versorgt?
Meine gibt 24V heraus, über die dann das Steuergerät und der Rückkanal (Brenner an/aus) versorgt werden. Ich denke nicht, dass der Ausgang der Heizung ein 7" TFT betreiben kann. Wollte das alles auch so klein wie möglich halten. Die Tasten brauche ich eigentlich nur für "Urlaubsmodus (minimale Temperatur)" und "Dauerheizen (Zeiten ignorieren)".
gregorss:
Was für einen Controller benutzt Dein Display?
Ich habe so ein usseliges OLED aus China. Ich meine einen SSD1306.