Moin liebes Forum, in der Hoffnung auf eine konstruktive (und Heimwerker-gerechte) Debatte wollte ich mal mein Problem schildern. Ich baue mit meinem Sohn (13) eine Steuerung für RGB-LED-Streifen. Die hat er am Bett, am Schreibtisch und am selbstgebauten Kopfhörer-Halter. Als erster Low-Tech-Entwurf sind alle 3 LED-Steifen zusammengeschlossen, werden über Transistoren versorgt, welche wiederum von einem Arduino Nano mit PWM angesteuert werden. Dazu gibt es 3 Potis für R, G und B und schon lehrt das Kind auch etwas über Farblehre ;-) Soweit ist alles ganz toll! Nun wollen wir einen Schritt weiter gehen, und alle Steifen einzeln ansteuern. Das wäre mit 9 Potis auch möglich, aber langweilig. Daher die Idee eines "RGB-Controllers". USPs (Unique Selling Points): - Kindgerecht ~13 (!!!) - ein kleines Display zur Menü-Führung - ein Rotary-Encoder zur Steuerung/Navigation in den Menüs - eine "Vorschau"-LED (==RGB-PWM) - 3xRGB-PWM für die Treiber-Transistoren der LED-Streifen - WLAN für Webinterface / Android App Beim Display dachte ich erst an so ein 128*64 OLED-Ding, aber das ist bloß einfarbig und macht die Navigation schwierig. Ich habe kurzerhand ein kleines TFT 1,3"(240*240) bzw 0,96"(160*80) besorgt. Welches zum Einsatz kommt weiß ich noch nicht. Schnittstelle: SPI (I²C habe ich in der Größe nicht für wenige Euros gefunden) Der Rotary-Encoder (mit Klick-Funktion) braucht 3 Pins am µC. Die PWM habe ich über so einen Servo-Controller (PCA9685) gemacht. Über I²C kann ich da bis zu 16 PWM-Kanäle steuern. Bei 4*3=12 Kanälen passt das (3 Streifen + 1 Vorschau-LED á 3 Kanäle). Bei Wlan ist der ESP8266 natürlich dirkt im Kopf. Er ist günstig und ein paar ESP-12-E Module liegen noch in meiner Schublade. Einzeln funktioniert jede Komponente ganz hervorragend am ESP. Das Problem ist: der ESP hat zu wenig (nutzbare) GPIOs, um alles gleichzeitig anzuschließen. Soweit meine "Fakten", ab hier beginnt der zu diskutierende Bereich - bitte nicht den ganzen Aufbau kritisieren und durch andere Komponenten ersetzen wollen - es ist und bleibt ein Arduino/ESP-Projekt in der Arduino IDE für und mit meinem Sohn. Ich kann und möchte nicht auf PIC oder FPGAs oder sonstwas umsteigen; das wäre nicht kindgerecht. Nun gibt es mit dem MCP23017 einen 16-Bit Port-Expander über I²C, der aber "unglaublich teuer" (~5€ mit Versand aus China für den nackten Chip; beim großen A noch teurer) ist. Gestolpert bin ich auch noch über den PCF8574, ebenfalls I²C, 8-Bit Port-Expander. Der ist als Breakout-Board recht günstig. Wobei ich aber nicht weiß, ob bei beiden Chips überhaupt ein Breakout-Board nötig ist, da die externe Beschaltung recht spartanisch zu sein scheint... Bei beiden Varianten weiß ich auch nicht (da mangelnde Erfahrung), ob ich diese Ports dann für SPI nutzen könnte, um das TFT anzuschließen... Hier wäre eure Erfahrung Gold wert! Als weitere Idee schwebt mir vor, den derzeit verbauten Arduino Nano mit dem Display und dem Rotary-Encoder für das "Frontend" zu nutzen und diesen dann über I²C oder so mit dem Hauptprogramm auf dem ESP kommunizieren zu lassen. Klingt irgendwie auch nicht schlecht... Was meint ihr? Habe ich etwas grundlegend übersehen oder habt ihr DEN (kostengünstigen) Chip schlechthin, der meinen Port-Mangel beseitigt? Ach, und ich werde wohl eh 3,3V und 5V haben und auch Pegelwandler nutzen können, falls das jemand anmerken möchte. Alles vorhanden ;-) Dank & Gruß Ben
Neben den Port Extendern hat TI zum Beispiel mit dem TLC59116 einen LED Treiber für I2C. Oder warum nimmst du nicht gleich WS2812 LEDs? Die brauchen nur einen Pin für die Daten und werden in Reihe verschaltet.
Ähmm... du verbringst Monate mit so einem Projekt. Aber 5€ sind dir zu viel - da suchst du lieber stundenlang nach einer anderen Lösung? Das lohnt sich doch nicht. Außerdem, ganz egal, wie lange du dich informiert und wie du dich entscheidest - die Hälfte der gekauften Komponenten landet in der Kiste für zukünftige Projekte.
Wenn Du Pinmangel hast, wäre doch ein Arduino Mega 2560 als 5V-System oder ein Arduino Due als 3.3V System die passende Wahl. Da hast Du dann genug Pins, um ganz ohne IO-Expander auszukommen. Der ESP wäre dann nur noch WLAN-Gateway. https://store.arduino.cc/products/arduino-mega-2560-rev3 https://store.arduino.cc/collections/boards/products/arduino-due fchk
Ben B. schrieb: > Bei beiden Varianten weiß ich auch > nicht (da mangelnde Erfahrung), ob ich diese Ports dann für SPI nutzen > könnte, um das TFT anzuschließen... Hier wäre eure Erfahrung Gold wert! Wieso SPI ? Du möchtest aus den I2C-Expandern einen SPI-Port machen ? Das geht nicht. SPI ist eine Hardware Schnittstelle des Controllers. Du kannst doch SPI für das Display und I2C für den Expander nutzen. Wo ist da dein Problem?
Ben B. schrieb: > Einzeln funktioniert jede Komponente ganz hervorragend am ESP. Das > Problem ist: der ESP hat zu wenig (nutzbare) GPIOs, um alles > gleichzeitig anzuschließen. Vielleicht fehlt es nur am richtigen Anschlusskonzept. Was willst du, nachdem du keine 9 Potis (oder besser Drehencoder ?) werden sollen, alles anschließen?
Chris schrieb: > Neben den Port Extendern hat TI zum Beispiel mit dem TLC59116 einen LED > Treiber für I2C. Oder warum nimmst du nicht gleich WS2812 LEDs? Die > brauchen nur einen Pin für die Daten und werden in Reihe verschaltet. Weil es die LED-Streifen schon gibt und sie verbaut sind ;-) Ein Kommentar schrieb: > Ähmm... du verbringst Monate mit so einem Projekt. Aber 5€ sind dir zu > viel - da suchst du lieber stundenlang nach einer anderen Lösung? Das > lohnt sich doch nicht. > > Außerdem, ganz egal, wie lange du dich informiert und wie du dich > entscheidest - die Hälfte der gekauften Komponenten landet in der Kiste > für zukünftige Projekte. Du hast im Grunde vollkommen Recht. Ich kann es nicht beschwören, aber ich war der Meinung, vor 2-3 Wochen da eher Preise um die 20€ gesehen zu haben... Als ich eben die Preise nochmal angeschaut hatte dachte ich auch so für mich "hmmm, warum habe ich die 5€ nicht ausgegeben???" Bleibt die Frage: Könnte ich die Ports dann für SPI nutzen? also sozusagen SPI over I²C ;-) Frank K. schrieb: > Wenn Du Pinmangel hast, wäre doch ein Arduino Mega 2560 als 5V-System > oder ein Arduino Due als 3.3V System die passende Wahl. Da hast Du dann > genug Pins, um ganz ohne IO-Expander auszukommen. Der ESP wäre dann nur > noch WLAN-Gateway. > > https://store.arduino.cc/products/arduino-mega-2560-rev3 > https://store.arduino.cc/collections/boards/products/arduino-due > > fchk Auch eine interessante Idee! Danke!
Dein ESP8266 hat I²C und SPI. Alles andere kannst du über Portexpander daran anschließen. Wenn die 5€ kosten dann ist das halt so, dafür war der Mikrocontroller billig. Klar kann man das Programm auch auf zwei Mikrocontroller-Board verteilen. Das wird aber weder einfacher noch billiger. Schreibe dir die vor- und Nachteile auf und schlafe nochmal eine Nach darüber. Ich nehme an, dass die meisten hier auf einen ESP32 wechseln würden, wenn sie mehr Pins brauchen und keine Portexpander verwenden wollen.
Ben B. schrieb: > Bleibt die Frage: Könnte ich die Ports dann für SPI nutzen? also > sozusagen SPI over I²C ;-) Das hatte ich dir schon beantwortet. Aber gern nochmal, nein das geht nicht.
Brain 2.0 schrieb: > Das hatte ich dir schon beantwortet. > Aber gern nochmal, nein das geht nicht. Jau, danke! Ich hatte angefangen auf verschiedene Kommentare gleichzeitig zu antworten und wurde dann irl noch einmal rausgezogen, daher hatte ich deinen Kommentar noch nicht gelesen, als ich meine (Nach-)Frage geschrieben hatte. Ich hatte ganz naiv überlegt, ob es wohl sowas wie Software-SPI geben könnte, daher die konkrete Nachfrage. Aber ich merke selbst, dass solche Ideen das ganze nur unnötig verkomplizieren. Daher: alles klar, habs kapiert ;-) Danke!
Ben B. schrieb: > Ich hatte ganz naiv überlegt, ob es wohl sowas wie Software-SPI geben > könnte Ja schon aber viel langsamer. Über den Portexpander sogar sehr langsam.
Soft SPI gibt es. Aber ob du da den I2C-Expander zu verwenden kannst, bin ich nicht sicher. Ich würde davon absehen und ganz gewöhnlich Hardware SPI vom ESP nehmen und dazu I2C für den Expander. Das funktioniert sicher.
Stefan ⛄ F. schrieb: > Dein ESP8266 hat I²C und SPI. Alles andere kannst du über Portexpander > daran anschließen. Wenn die 5€ kosten dann ist das halt so, dafür war > der Mikrocontroller billig. Das stimmt wohl. Wie gesagt, ich hatte irgendwie im Kopf, dass ich den Chip neulich für 20€ gesehen hätte und das hätte ich etwas arg teuer gefunden. Als ich vorhin den Preis von 5€ rausgesucht hatte, habe ich nicht recht nachgedacht, als ich das Preis-Argument gebracht hatte. > Klar kann man das Programm auch auf zwei Mikrocontroller-Board > verteilen. Das wird aber weder einfacher noch billiger. Schreibe dir die > vor- und Nachteile auf und schlafe nochmal eine Nach darüber. Jo, mit all den guten Ratschlägen hier komme ich bestimmt zu einer guten Lösung! > Ich nehme an, dass die meisten hier auf einen ESP32 wechseln würden, > wenn sie mehr Pins brauchen und keine Portexpander verwenden wollen. Einen ESP32 habe ich in der Tat noch in der Bastelkiste... Könnte letzten Endes die einfachste möglichkeit sein. Ich bin da auch ein bißchen verbohrt, da der ESP8266 mit seinen GPIOs und was bei Boot high/low sein muss ja etwas speziell ist. SPI und i²C gleichzeitig sollte ja gehen, wenn GPIO15 (==CS für SPI) mit 4k7 oder so auf low liegt. Ich hatte nur den Rotary-Encoder nicht mehr unterbringen können, weil 0, 2 und 16 sich da so anstellen...
Ich danke euch allen! Das waren schnelle, hilfreiche Kommentare und Ideen! Gute Kritik mag ich und stoppt diesen Scheuklappen-Blick, bei dem man ein Problem so unbedingt auf eine Art lösen will, dass man die anderen Lösungen nicht sieht. Ich versuche jetzt letzten Endes wohl mal den Portexpander und parallel den ESP32, bevor ich meinen Sohn wieder dazu hole (nur um selbst noch ein bißchen mehr zu lernen ;-) ) Viele Grüße und einen schönen Feiertag! Ben
kannst du nicht den uart deaktivieren und gpio 1,2,3 für den encoder benutzen? falls du den uart benötigst, sollte der encoder nicht stören, solange er nicht betätigt wird. 2 pin für iic, 4 für spi (clock, data, chip select, register select) macht in summe genau 9 pins. alternativ wäre esp32 wahrscheinlich das einfachste, oder halt doch ein iic display (oder ein spi led treiber, spart aber dank zusätzlichem CS nur einen pin)
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.