- INA2180A1IDGKR für 0.45€ würde wohl gehen. Und der hat dann schon zwei Channel.
- INA2180A1IDGKR für 0.45€ würde wohl gehen. Und der hat dann schon zwei Channel.
- Einziges Problem am INA2180 ist, dass 26V das Absolute Maximum sind. Das ist mir doch etwas knapp. Und wenn wir nur deshalb nicht die Spannung etwas
- Einziges Problem am INA2180 ist, dass 26V das Absolute Maximum sind. Das ist mir doch etwas knapp. Und wenn wir nur deshalb nicht die Spannung etwas
hoch drehen können, wäre schade.
hoch drehen können, wäre schade.
- MCU Pinout:
- 4x ADC ist klar. Da gibt's nur vier von leider.
- GPIO26..29
- 1x I2C, PIO, PWM für die Digital-Ausgänge. Eventuell wäre auch SPI TX hilfreich, falls das für WS2812 besser geht als PIO.
- I2C gibt's alle zwei Pins, abwechselnd I2C0 und I2C1.
- SPI und UART sind beides 4-er Gruppen, d.h. SPI TX und UART TX bekomme ich nicht beide (oder ich muss es mit zwei Pins verbinden).
- Andererseits steht WS2812 mit PIO sogar als Beispiel im Datenblatt.
- UART auch.
- PWM gibt's quasi überall.
- PIOs gibt's beide überall und der Start-Offset ist einstellbar.
- -> GPIO24+25: UART1 RX/TX, I2C0, PWM4
- Eventuell zusätzlich GPIO23 für SPI0 TX und GPIO18 für SPI0 SCK, aber eigentlich nicht sinnvoll weil langsam. Und CS müsste man über GPIO21 über den
Widerstand vom Digital-Eingang treiben. -> Nein, weil sonst habe ich keine Pins für Taster mehr.
- 2x SBU
- ebenfalls auf UART1 und wenn möglich I2C0 -> 4+5 oder 8+9
- 1x I2C auf Stiftleiste für optionales Display.
- I2C0, d.h. 4*n+0
- // 8+9, weil da ist PWM4, was wir schon benutzen. -> Nein, da ist SBU.
- 5x PWM für LEDs.
- Quasi überall, aber nicht PWM4 nehmen.
- 2x PWM für Heizung.
- 1x UART für RS485
- UART0 nehmen -> 0+1, 12+13, 16+17
- Erstmal 16+17 und TX_EN auf 15.
- VBUS_DET? Der Pico hat es an GPIO24 (mit Spannungsteiler), was nicht passt. Der RP2040 Zero hat es nicht. Aber evtl wollen wir USB schlafen legen.
- GPIO ??
- 4x Reed / Digital-Eingang
- Im Prinzip egal wohin, sofern man es nicht anderweitig nutzt.
- UART RX
- GPIO20 oder GPIO22 sind Clock Inputs. Das könnte man eventuell als Frequenzzähler nutzen.
- GPIO19 bis GPIO22: UART1 RX, SPI0 RX
- Taster-Matrix:
- Dual-Purpose Ausgänge:
- TX solange TX_EN nicht gesetzt
- 5x LED theoretisch aber die ziehen runter und ggf wollen wir die aktiv low treiben; weiß vielleicht?
- 2x I2C, aber die PU stören vermutlich (wenn mehr als 1 Taster gedrückt) -> Dioden hier oder in der Taster-Matrix sollten helfen
- GPIO 7, 18, 23
- Protokoll:
- Modbus RTU:
- Viel einfacher wird's nicht, solange man nur die Register-Zugriffe implementiert.
- Es gibt zwei Python Libraries.
- CRC sind sinnvoll. Zusätzlich Parity muss ich nicht haben, aber was soll's.
- Abstand zwischen Nachrichten würde ich evtl nicht nach jeder machen.
- Die Zusatzfeatures für Diagnose (Event Log) und ID klingen sinnvoll.
- Baudrate und so:
- Aufstarten mit Standardeinstellung (19200, 8-E-1)
- Auto-Baud per Break und dann Zugriff auf Gerät 0x55, wenn man eine andere Baudrate möchte.
- Mit Adresse 0x55 würde ich dann auch die sonstige Zusatzfeatures machen wie den Broadcast für Auto-Discovery.
- Auto-Discovery:
- Ich habe wenig Lust, die Adressen manuell zu verteilen.
- Simpel: "setze deine Adresse auf xx, falls dein Button gedrückt ist". Das kann ein Schreibzugriff auf ein bestimmtes Register von Broadcast-Gerät 0x55 sein.
Adresse wird dann in den Flash geschrieben. Bevor sie eine Adresse im Flash haben, reagieren sie nur auf 0x55.
- Auto-Discovery ginge auch einfach mit Broadcast und Backoff. Parameter wie Anzahl der Backoff Slots, Seed und die Wahrscheinlichkeit überhaupt zu antworten
stehen mit in dem Broadcast. Es gibt eine maximale Zeit und nach der darf nicht mehr geantwortet werden, damit wieder normale Kommunikation möglich ist.
- Man setzt ein Flag im Device für "ich kenne dich schon". Das deaktiviert Reaktion auf den Broadcast (ggf optional per Flag in dem Broadcast) und erlaubt
dem zentralen Controller einen Reset des Geräts festzustellen.
- Der Vorschlag kam so halb von ChatGPT. Meine Variante wäre eher was in der Art von DS18B20 gewesen, evtl mit mehreren Zeitslots um direkt 4 bit abzufragen.
- Der Vorteil ist, dass man mit allen Geräten reden kann, ohne sie anzulernen (und man weiß nur nicht, welches wo ist).
- Die Adresse ist entweder permanent im Flash oder die zentrale Steuerung merkt sich die Chip-ID vom MCU und vergibt die Modbus-Adressen bei jedem Start neu.
- Non-Features:
- USB Host: Der MCU kann es und wäre cool zu haben für Erweiterungen.
- VBUS EN per P-MOS auf VBUS (und ggf ersetzt der die existierende Diode für die andere Richtung)
- Die 5.1k PD so mit VBUS EN verbinden, dass die zu PU werden. Es muss aber ein PD dran, damit es sich im Bootloader korrekt als USB Device
meldet. Das braucht etwas Kreativität, damit in beiden Fällen der Widerstand im richtigen Bereich liegt. Oder man muss einen Pin finden,
den der Bootloader auf low treibt.
- Problem: Geht auf keinen Fall standardkonform, weil wir nicht genug Strom auf 5V zur Verfügung stellen können.
- Und wenn man sowieso die 5V extern einspeisen muss, brauche ich auf der Platine nix weiter zu tun.
TODO und weitere Gedanken:
TODO und weitere Gedanken:
- Auto-Discovery ginge auch einfach mit Broadcast und Backoff. Parameter wie Anzahl der Backoff Slots, Seed und die Wahrscheinlichkeit überhaupt zu antworten
stehen mit in dem Broadcast. Es gibt eine maximale Zeit und nach der darf nicht mehr geantwortet werden, damit wieder normale Kommunikation möglich ist.
- Man setzt ein Flag im Device für "ich kenne dich schon". Das deaktiviert Reaktion auf den Broadcast (ggf optional per Flag in dem Broadcast) und erlaubt
dem zentralen Controller einen Reset des Geräts festzustellen.
- Der Vorschlag kam so halb von ChatGPT. Meine Variante wäre eher was in der Art von DS18B20 gewesen, evtl mit mehreren Zeitslots um direkt 4 bit abzufragen.
- Spulen mit rein zum Motor für langsamere Anstiegszeit / EMV Abstrahlung auf der Zuleitung?
- Spulen mit rein zum Motor für langsamere Anstiegszeit / EMV Abstrahlung auf der Zuleitung?
- WS2812 runter und einfach zwei LEDs mit an den WS2811 - reicht für Debug.
- Auf den freien Pin 5V legen, aber über Widerstand oder PTC-Sicherung.
- Anschlussplan wird nicht auf die Platine passen, aber kann man in den Deckel kleben.
- Anschlussplan wird nicht auf die Platine passen, aber kann man in den Deckel kleben.
- USB-Buchse und Taster gegen richtige Footprints und Parts austauschen
- I2C Temperatursensor
- Reed-Eingänge ohne Spannungsteiler (weil mit PU gedacht). Und dann auch ohne TVS.
- Mehr Strom erlauben für OLED (12 mA bei 50% pixel an)