Z21 Arduino Zentrale (ESP32): Unterschied zwischen den Versionen

Aus Digital Modellbahn
Zeile 101: Zeile 101:
 
| A5 || 28 PC5(ADC5/SCL) || Master-Prozessor || I2C
 
| A5 || 28 PC5(ADC5/SCL) || Master-Prozessor || I2C
 
|}
 
|}
 +
 +
== Patch für den ESP-Core ==
 +
Im ESP32 Core gibt es ein Problem mit dem "timerAlarmWrite()" der aus Platzgründen zur Laufzeit aus dem Code-Cache entfernt wird! Dann stürzt der ESP beim Nächsten Interrupt ab. Zur Behebung ist dieser Patch notwendig:
 +
[https://github.com/espressif/arduino-esp32/commit/be77bd4e27228e10cf7132668f0f1fd2172f4a37 Resolve crash with timer interrupt functions called from ISR (#4684)]

Version vom 9. Februar 2021, 14:21 Uhr

Eigenbau | Zentrale Z21PG | Z21 mobile | XpressNet | LocoNet | Booster

Arduino UNO Version | Arduino MEGA Version | ESP8266 (WeMos D1 mini) Version | ESP32 Version | Sanguino Version

Z21 logo.png
Preview: IN DER ENTWICKLUNG - STILL UNDER DEVELOPMENT!

Beschreibung

ESP32 Anschlussbelegung
Schematischer Aufbau ESP32 Zentrale

Um die Zentrale zukunftssicher zu gestalten wurde ein neuer Aufbau mit einem ESP32 Modul, welches einen DualCore Prozessor mit 240 MHz besitzt gewählt. Da die Funktionen für Xpressnet, aufgrund von Hardware Inkompatibilität und LocoNet aufgrund der Hardwarezusammenhänge in der Bibliothek nicht auf dem ESP32 umgesetzt werden können, wurde für diese der Arduino UNO/NANO also Co-Prozessor eingesetzt. Die Kommunikation zwischen den beiden Prozessoren erfolgt über das I2C Protokoll. Bei der Koppelung wurde ein Level-Shifter eingesetzt um die unterschiedlichen Spannungen des ESP32(3,3 Volt) und UNO/NANO (5,0 Volt) auszugleichen.

Funktionsumfang:

  • WLAN-Interface (integriert)
  • LAN-Interface (W5100)
  • S88N
  • interner Booster
  • externer Booster (ROCO oder CDE)
  • global RailCom Detector
  • XpressNet (Co-Prozessor)
  • LocoNet (Co-Prozessor)

Pinbelegung ESP32

Hier eine Auflistung der Pinbelegung für den ESP32 im Sketch "Arduino Z21 Zentrale"

Arduino Pin Funktion aktiv Pegel (HIGH/LOW)
GPIO1 (TX) Debugging Serial
GPIO3 (RX) Debugging Serial
GPIO21 (SDA) Co-Prozessor I2C
GPIO22 (SCL) Co-Prozessor I2C
GPIO17 Enable Co-Prozessor LOW = Data to Send
GPIO?? (RX) RailCom Detector RX Serial
GPIO19 (MISO) Ethernet-Shield W5100/W5500
GPIO23 (MOSI) Ethernet-Shield W5100/W5500
GPIO5 (CS) Ethernet-Shield W5100/W5500
GPIO18 (CLK) Ethernet-Shield W5100/W5500
?? (RST) Ethernet-Shield W5100/W5500
GPIO2 DCC HIGH/LOW
GPIO16 DCC S88/LocoNet output
?? NDCC (Booster intern) output
GPIO4 SHORT (Booster extern) LOW
GPIO15 GO/STOP (Booster extern) HIGH
GPIO36 Taster/Reset LOW
GPIO32 DCC status LED HIGH
?? S88 Data in input
?? S88 Clock output
?? S88 PS/Load output
?? S88 Reset output
?? Relais Programmiergleis (PROG) HIGH/LOW
?? Current Sensor Programmiergleis (ACK)
?? Eingangsspannung Main VCC <-> [100k]<-> Sence (A10) <-> [4,7k] <-> GND
?? interner Temperatur Sensor +5V <-> [46k] <-> Sence (A11) <-> [15k NTC-Widerstand] <-> GND

Pinbelegung Co-Prozessor (UNO/NANO)

Hier eine Auflistung der Pinbelegung für den ATmega328p im Sketch "Arduino Z21 Zentrale-CO"

Arduino Pin MCU Pin Funktion aktiv Pegel (HIGH/LOW)
0 2 PD0(RXD) XpressNet_RX [oder WLAN_RX] Serial
1 3 PD1(TXD) XpressNet_TX [oder WLAN_TX] Serial
7 13 PD7(AIN1) LocoNet_TX (out) HIGH
8 14 PB0(ICP) LocoNet_RX (in) HIGH/LOW
9 15 PB1(OC1A) XpressNet_S/R HIGH/LOW
A3 26 PC3(ADC3) EN - DataReadyToSend LOW
A4 27 PC4(ADC4/SDA) Master-Prozessor I2C
A5 28 PC5(ADC5/SCL) Master-Prozessor I2C

Patch für den ESP-Core

Im ESP32 Core gibt es ein Problem mit dem "timerAlarmWrite()" der aus Platzgründen zur Laufzeit aus dem Code-Cache entfernt wird! Dann stürzt der ESP beim Nächsten Interrupt ab. Zur Behebung ist dieser Patch notwendig: Resolve crash with timer interrupt functions called from ISR (#4684)