Hallo,
Diese Frage zielt darauf, welche allgemeinen Maßnahmen man im
Werkzeugkoffer haben sollte, wenn man in der Firmware die SPI/I2C
Kommunikation robuster machen möchte gegenüber Störung (z.b EMV).
Was tut ihr, wenn die Kommunikation z.B in der While-Schleife (gaanz
schlecht, ich weiß) hängen geblieben ist, weil vom Slave keine Antwort
kommt?
Der Schaltplan und die Hardware ist hier bei meiner Fragestellung
zunächst als irrelevant zu betrachten.
Schönen Abend.
Teddy schrieb:> Was tut ihr, wenn die Kommunikation z.B in der While-Schleife (gaanz> schlecht, ich weiß) hängen geblieben ist, weil vom Slave keine Antwort> kommt?>> Der Schaltplan und die Hardware ist hier bei meiner Fragestellung> zunächst als irrelevant zu betrachten.
Dann viel Glück.
Wenn die Kommunikation in einer while-Schleife hängen bleiben kann,
fehlt ein Timeout
Wolfgang schrieb:> fehlt ein Timeout
Wobei hier kann auch passieren dass sich der HW I2C Baustein sich
verabschiedet hat. Danach könnte man versuchen den Baustein wenn es geht
zu reseten. Aus und wieder einschalten könnte helfen. Manchmal aber auch
nicht, da hilft dann nur der POR :(
Das Thema ist leider nicht so einfach. Wenn man anfängt mit HW
Bausteinen zu arbeiten dann kann sein dass die sich aufhängen. Wenn man
dann auf Bit Bang zurückgreift, dann wird man entweder den CPU aufhalten
müssen damit man sehr schnell etwas schicken kann, oder es wird sehr
langsam weil man eine State Maschine bauen muss.
Teddy schrieb:> Was tut ihr, wenn die Kommunikation z.B in der While-Schleife (gaanz> schlecht, ich weiß) hängen geblieben ist, weil vom Slave keine Antwort> kommt?
Ja ja, immer schön die Hardware die voller Macken steckt, mit
Software Patches flicken. Das nennt man professionelles Arbeiten.
Teddy schrieb:> Der Schaltplan und die Hardware ist hier bei meiner Fragestellung> zunächst als irrelevant zu betrachten.
Bloss nichts mehr an der Hardware flicken, das könnte nur
schlafende Hunde wecken.
Ihr habt dann parallel einen Timer laufen, der bei erfolgreicher
Übertragung zurück gesetzt wird?Was macht ihr, wenn es zu einem Timer
Interrupt kommt?
Teddy schrieb:> Ihr habt dann parallel einen Timer laufen, der bei erfolgreicher> Übertragung zurück gesetzt wird?Was macht ihr, wenn es zu einem Timer> Interrupt kommt?
SysTick reicht, muss ja nicht hochauflösend sein
Herbert schrieb:> Teddy schrieb:>>> Ihr habt dann parallel einen Timer laufen, der bei erfolgreicher>> Übertragung zurück gesetzt wird?Was macht ihr, wenn es zu einem Timer>> Interrupt kommt?>> SysTick reicht, muss ja nicht hochauflösend sein
Was machst du in der Routine?
Andras H. schrieb:> Wobei hier kann auch passieren dass sich der HW I2C Baustein sich> verabschiedet hat. Danach könnte man versuchen den Baustein wenn es geht> zu reseten. Aus und wieder einschalten könnte helfen.
Das hätte aber etwas mit der Hardware zu tun und wurde vom TO als
irrelevant ausgeschlossen.
Teddy schrieb:> Der Schaltplan und die Hardware ist hier bei meiner Fragestellung> zunächst als irrelevant zu betrachten.
Teddy schrieb:> z.B in der While-Schleife (gaanz> schlecht, ich weiß)
Warum sind while Schleifen schlecht?
Quasi jeder Prozess, jeder Thread/Task, beinhaltet eine solche
(endlos)Schleife.
Sie kann also nicht böse sein, sondern ist eher notwendig.
Natürlich kann man damit auch Schindluder treiben.
Wie mit jedem anderen Sprachmittel auch.
Herbert schrieb:> SysTick reicht, muss ja nicht hochauflösend sein
Mir ist es auch schon passiert, dass sich eine while Schleife
aufgehangen hat.
Wie funktioniert das mit SysTick bzw. hat jemand für einen
Programmierlaien einen konkreten Programmschnipsel, vorzugsweise für
einen MSP430xxx ?
Arduino Fanboy D. schrieb:> Warum sind while Schleifen schlecht?> Quasi jeder Prozess, jeder Thread/Task, beinhaltet eine solche> (endlos)Schleife.> Sie kann also nicht böse sein, sondern ist eher notwendig.
While-schleifen sind schlecht. Abgesehen von einzelnen Tasks, die extern
überwacht werden (z.b. GUI, die auf Tasten/Events wartet)
Du meinst vermutlich Endlosschleifen. Das ist etwas anderes. (Wird in C
eigentlich auch mit for gemacht)
Prinzipiell spricht dann nichts gegen while, wenn sichergestellt ist,
dass die Schleife wirklich schnell genug verlassen wird. Z.b. warten bis
transmit des uarts beendet.
Bei I2C-bus nur für interne Signale, ganz sicher nicht das Warten bei
clockstretching.
Wolle G. schrieb:> Wie funktioniert das mit SysTick
Indem die while-schleife abbricht, wenn der systicker einem bestimmten
Wert überschritten hat. Entweder in der while-abfrage oder im Körper als
Break. Und wenn der systicker Überlaufen kann, dann nur so (für 50
Ticks):
Startwert=Systicker;
while(... && (Systicker - Startwert)<50)
SPI/I2C sind grundlegend unterschiedlich, die kann man nicht in einen
Topf werfen.
SPI kann nicht hängenbleiben, aber auch keine Übertragungsfehler
feststellen. Da hilft nur saubere und kurze Verdrahtung, eventuell
Treiber-ICs (differentiell).
Bei I2C kann sich der Master durch Störungen verklemmen, da hilft
Timeout mit Disable.
Wurde bei einer Störung oder einem Reset gerade ein Slave als Sender
adressiert, kann dieser SDA auf low ziehen (0-Bit senden). Da helfen
dann bis zu 9 Takte auf SCL.
Oder der Slave disabled sich ebenfalls nach einem Timeout, falls er auch
ein MC ist.
Teddy schrieb:> weil vom Slave keine Antwort> kommt?
Dieser Fall ist unmöglich, der Master liest immer was. Er kann nur
vermuten, daß es Mumpitz ist, wenn er bei I2C 0xFF liest oder bei SPI
das vorher gesendete Byte.
Sind alle Teilnehmer MCs, dann sollte man ein Protokoll mit CRC
vorsehen. Ist die CRC falsch, dann liegt ein Fehler vor.
Ich verwende hausintern eine rabiat-robuste Methode, weil meine Systeme
teilweise bis zu sechs Monate rennen müssen.
Einen FET, um die gesamten Slaves von der Stromversorgung zu trennen.
Macht einer der HDC2010 Fiesipatentelen, schießt ihm der STM32L4 in den
Kopf. Eine Sekunde ohne Energie, und gut.
Das Thema mit hängender I2C Staemachine habe ich hier schon endlos
durchgekaut. Du brauchst überhaupt keine Timeouts und anderen OverBlow.
Jede gescheite Anwendung benutzt den Watchdog und der wird zyklisch
zurück gesetzt. Mit einer Laufzeitanalyse des Codes wird ermittelt wie
oft er das tun muss. Und hängt es irgendwo kommt der Reset und danach
werden Bits abgefragt warum er das getan hat. Der HardFault Handler ist
auch noch eine Option, der Ausrutscher abfangen kann.
Mit Ausrutscher meine ich so ca 1-2 Wochen geht alles gut und dann steht
alles und auch kein Reset Knopf bringt es mehr ans laufen.
Ich kann dir allerdings gleich sagen, dass bei mir alles nichts geholfen
hat die I2C wieder in den Tritt zu bringen ausser ON/OFF und zwar bei
beiden Teilnehmern. Die STM32 haben auch ein spezielles Bit dafür.
Irgendwelche EEProms oder was es sonst noch gibt können auch stehen
bleiben wo sie sind und die setzen erst zurück mit ON/OFF.
Meine rabiate Methode ist die, dass ich über einen 3.3V DC/DC Wandler
mit Enable in der Größe eines Fingernagels alle abklemme per CPU Befehl
und dann wieder zuschalte. Ruhestrom sind keine 150uA, damit kann ich
leben.
Christian J. schrieb:> Irgendwelche EEProms oder was es sonst noch gibt> können nämlich auch stehen bleiben wo sie sind und die setzten erst> zurück mit ON/OFF.
Nö.
Nur bei beratungsresistenten Teilnehmern im mikrocontroller.net-
Forum die ihre Hardware selbst und schlecht aufbauen und dann
jammern dass die Chips sich so mies verhalten.
Teddy schrieb:> Diese Frage zielt darauf, welche allgemeinen Maßnahmen man im> Werkzeugkoffer haben sollte, wenn man in der Firmware die SPI/I2C...
...
> weil vom Slave keine Antwort kommt?
Mal abgesehen vom Clock-Stretching beim I2C, was man entweder im Treiber
oder im zuständigen I2C-Peripherie-Core zeitlich begrenzt, gibt es die
Sitation NICHT, daß vom Slave keine Antwort kommt. Stattdessen hast du
eben kein ACK und das führt nicht zum Hängenbleiben, sondern zum Abbruch
der Transmission durch den Treiber und Rückgabe eines Fehlercodes oder
so.
Und was die höheren Schichten der Firmware dann daraus machen, ist eine
andere Nummer. Das hat dann aber nicht mit "Kommunikation robuster
machen" zu tun, sondern nur mit "die eigenen Algorithmen robuster
machen".
W.S.
Christian J. schrieb:> Jede gescheite Anwendung benutzt den Watchdog und der wird zyklisch> zurück gesetzt.
"Jede" würde ich nicht unterschreiben wollen. Es gibt Anwendungen, wo
ein Neustart nur im äußersten Notfall zulässig ist.
Unabhängig davon hat der Watchdog keinen Einfluss auf die I²C cCients.
Eine nicht abgeschlossene Transaktion ist nach dem Neustart immer noch
offen. Ohne weitere Maßnahmen kann das dazu führen, dass der Bus nach
dem Neustart direkt wieder hängt.
Freitakten ist eine gängige Lösung, die nicht 100% wirkt.
Die Clients kurz Stromlos schalten und den I²C Master resetten (nicht
den ganzen µC) dürfte immer gehen, denke ich. Nur ist leider auch das
nicht immer gewollt und möglich.
W.S. schrieb:> Mal abgesehen vom Clock-Stretching beim I2C
eben und wenn der Master nicht ewig warten will muss er sich selber eben
aus dem Wartezustand befreien, er kann dann versuchen eine
Abbruchsequenz zu senden und wenn das auch nicht hilft muß er eben einen
Power On Reset auslösen und das geht nur am I2C slave durch
Stromunterbrechung vom Slave.
W.S. schrieb:> Mal abgesehen vom Clock-Stretching beim I2C, was man entweder im Treiber> oder im zuständigen I2C-Peripherie-Core zeitlich begrenzt, gibt es die> Sitation NICHT, daß vom Slave keine Antwort kommt.
Wenn ein sich irgendwie verhedderter Slave SCL und/oder SDA low zieht,
steht der Bus. Da hilft dann nur noch der o.a. Kopfschuß...
Oliver
Man sollte die Hardware so hinbekommen, dass sie nie aussteigt. Ich
musste noch nie einen SPI verkehr neu aufsetzen. I2C vermeide ich, da
eher muehsam zu implementieren
Pandur S. schrieb:> I2C vermeide ich, da eher muehsam zu implementieren
Beim Programmieren von Mikrocontrollern vermeide ich Multiplikation
und Division von Zahlen da eher muehsam zu implementieren. Ich
beschränke mich auf das Ein- und Ausschalten von LEDs.
Oliver S. schrieb:> W.S. schrieb:>> Mal abgesehen vom Clock-Stretching beim I2C, was man entweder im Treiber>> oder im zuständigen I2C-Peripherie-Core zeitlich begrenzt, gibt es die>> Sitation NICHT, daß vom Slave keine Antwort kommt.>> Wenn ein sich irgendwie verhedderter Slave SCL und/oder SDA low zieht,> steht der Bus. Da hilft dann nur noch der o.a. Kopfschuß...>> Oliver
Ich sehe, noch jemand hat HDC2010 Erfahrung
SPI Clients die hängen hatte ich noch nie, denke auch wenn der SSL High
ist, sind die vom CHIP Aufbau nicht mehr fähig die Leitungen zu
blockieren. (Man möge mich korrigieren)
I2C ist eine andere Nummer. Wir haben teilweise I2C Recovery Function
eingeführt. Nachdem Bus-Hänger schwer zu reproduzieren sind, gibt es
keine qualitative Aussage bzgl. Nutzen.
https://www.nxp.com/docs/en/application-note/AN10216.pdf
Seite 17 I2C Bus recovery.
Und natürlich jede while mit Abbruchbedingungen über die Zeit und
Auslassen des Teilnehmers bei Fehler. Bleibt die SDA Leitung wirklich
down schließe ich mich hier an:
Oliver S. schrieb:> Da hilft dann nur noch der o.a. Kopfschuß...
Alles Annahmen das du der Master bist.
Wir produzieren seit 1995 Geräte mit I2C-Bus, die 24/7 laufen.
Zuerst mit Philips 8051, da war nichtmal ein Timeout nötig.
Dann wurden die eingestellt und wir wechselten auf AVR. Die liefen ohne
Timeout nicht mehr durch.
Aber die VCC abklemmen war noch nie notwendig.
Peter D. schrieb:> Wir produzieren seit 1995 Geräte mit I2C-Bus, die 24/7 laufen.
dito meine Firma (nicht die kleinste) seit geschätzt 1998.
Peter D. schrieb:> Aber die VCC abklemmen war noch nie notwendig.
dito meine Firma. Wenn "solche Ereignisse" oder ähnliche notwendig
wären, wären I2C Bausteine schon längst aus unseren Geräten ver-
schwunden und intern hätte ein Aufschrei stattgefunden der seines-
gleichen gesucht hätte. Doch lebt I2C bei uns weiterhin.
Daher nochmal mein Zitat:
jo mei schrieb:> Nur bei beratungsresistenten Teilnehmern im mikrocontroller.net-> Forum die ihre Hardware selbst und schlecht aufbauen und dann> jammern dass die Chips sich so mies verhalten.
Hinzuzufügen wäre dass es möglicherweise auch andere beratungs-
resistente Leute gibt die nicht notwendigerweise der mikro-
controller.net-Gemeinde angehören ....
Peter D. schrieb:> Wurde bei einer Störung oder einem Reset gerade ein Slave als Sender> adressiert, kann dieser SDA auf low ziehen (0-Bit senden). Da helfen> dann bis zu 9 Takte auf SCL.
Diese 9 Takte sind eigentlich fast immer das Patentrezept, wenn der
I2C-Bus klemmt.
Ich konnte das bei Tests nachvollziehen. Wird der µC mitten in einer
I2C-Übertragung resettet/ausgeschaltet, dann kann sich der angesprochene
I2C-Baustein (z.B. eine RTC) dabei aufhängen und SDA auf permanent auf
low ziehen. Da hilft unter Umständen noch nichtmals ein Power-Off, wenn
die RTC an einer Batterie hängt. Aber die 9 Takte helfen immer.
Vorgehen (Pseudo-C):
1
booli2c_reset_bus()
2
{
3
uint_fast8_ti;
4
boolsuccess=true;
5
6
if(SDA_is_low())// SDA low?
7
{// yes, reset i2c bus
8
set_SCL_low();
9
delay_msec(1);
10
11
for(idx=0;idx<9;idx++)
12
{
13
set_SCL_high();
14
delay_msec(1);
15
16
if(SDA_is_high())// SDA now high?
17
{// yes, we are ready
18
break;
19
}
20
21
set_SCL_low();
22
delay_msec(1);
23
}
24
25
set_SCL_high();
26
delay_msec(1);
27
28
if(SDA_is_low())// SDA still low
29
{
30
success=false;
31
// log_message ("error: cannot reset I2C bus");
32
}
33
}
34
35
returnsuccess;
36
}
Die Delays mit 1 Millisekunde sind nicht fix vorgeschrieben. Sie sollen
nur verdeutlichen, dass man nach einer neuen Flanke etwas warten sollte.
Dies kann man eigentlich immer prophylaktisch in der i2c_init()-Funktion
durchführen. Dann ist man auf der sicheren Seite.
EDIT: C-Pseudo-Code nochmals geändert und mit Kommentaren versehen.
Frank M. schrieb:> Wird der µC mitten in einer> I2C-Übertragung resettet/ausgeschaltet, dann kann sich der angesprochene> I2C-Baustein (z.B. eine RTC) dabei aufhängen.
Das ist eine irreführende Aussage, denn er hängt sich gar nicht auf. Er
bleibt einfach im Sende 0-Bit stehen, denn er kann ja nicht hellsehen,
daß der Master resettet wurde.
Der Worst-Case ist, der Slave sendet 9 aufeinanderfolgende 0-Bits (ACK +
8 Datenbits). Daher die bis zu 9 SCL-Takte, um SDA = 1 zu erhalten und
das Startbit senden zu können.
Man muß nach jedem Takt prüfen, ob SDA = 1 ist, denn als Slave Receiver
sendet der Slave nach 9 Takten wieder ein ACK, d.h. 0.
Die ganze Prozedur lang ist aber der Slave im regulären I2C-Modus und
keinesfalls hängen geblieben oder abgestürzt.
Peter D. schrieb:> Das ist eine irreführende Aussage, denn er hängt sich gar nicht auf.
Ja, natürlich, er hat sich nur "augenscheinlich" aufgehängt, weil er
sich nicht erwartungsgemäß verhält, wenn ich das System einschalte.
Peter D. schrieb:> Man muß nach jedem Takt prüfen, ob SDA = 1 ist,
Ist in obigem Pseudo-Code auch so drin, siehe "break".
Mike schrieb:> https://www.nxp.com/docs/en/application-note/AN10216.pdf> Seite 17 I2C Bus recovery.
"1 - Send 9 clock pulses on SCL line"
Darin fehlt jedoch das Abfragen nach jedem Takt. D.h. man kann in die
Slave-Receiver Falle laufen und nach jeweils 9 Takten das nächste ACK
sehen. Daß dazwischen der Bus frei ist (SDA = 1), merkt man so nicht.
Dieser Fall kann durchaus sehr wahrscheinlich sein, da der I2C-Interrupt
im ACK-Slot wartet, bis das nächste Byte in den Sendepuffer geschrieben
wird. Bleibt dann ein höher priorisierter Interrupt oder atomarer Block
hängen und schlägt der Watchdog zu, dann ist das I2C in genau diesem
Zustand.
Man verdächtig dann den I2C-Slave, obwohl der Fehler an einer völlig
anderen Stelle passiert.
Trick 17 wäre natürlich:
- SDA abfragen
- SCL 10* takten // above 9 but not multiples of 9
- SDA abfragen
Damit wäre man asynchron zum ACK-Slot und der Leser kratzt sich verdutzt
am Kopf.
Frank M. schrieb:> Diese 9 Takte sind eigentlich fast immer das Patentrezept, wenn der> I2C-Bus klemmt.
Die stehen schon seit 20 Jahren in einer Appnote von Microchip drin
glaube ich. Gewirkt haben sie bei mir aber nicht auf einem AVR. Lag
vielleicht auch daran, dass sich der Hang-Up Zustand nicht künstlich
erzeugen liess und die Routine nur aus dem Kopf geschrieben war in der
Hoffnung, dass sie "wirkt".
Die Hänger traten eh nur alle 1-2 Wochen auf oder auch mal nicht. Beim
STM2 ist das ja eine Mords-Umschalterei, bevor aus einem I2C Pin wieder
ein I/O Pin wird und das Ganze wieder zurück.
Ich gebe zu, dass ich irgendwann aufgehört habe darüber nach zu denken
und die Holzhammer-Methode des Abschaltens der Slaves gewählt habe, da
ich nur den Master unter voller Kontrolle habe.
PS: Watchdog ist bei sicherheitsrelevanter Software in gelber Ware
absolute Pflicht, sogar ein externer. Es kann jederzeit ein Bit oder
irgendwas kippen. Und das System muss genau da wieder aufsetzen wo es
aufgehört hat.
jo mei schrieb:> Peter D. schrieb:> dito meine Firma. Wenn "solche Ereignisse" oder ähnliche notwendig> wären, wären I2C Bausteine schon längst aus unseren Geräten ver-> schwunden und intern hätte ein Aufschrei stattgefunden der seines-> gleichen gesucht hätte. Doch lebt I2C bei uns weiterhin.>
Hallo,
wenn ich kleine Flügelchen am Hintern hätte, wäre ich eine Yak40. Leider
bin ich aber nur ein rassischer Halbaraber.
Die Sensorbausteine kommen allzu oft aus der Anwendung und du kannst sie
nicht aussuchen. Wenn du es kannst, ich beneide dich. Ich kann es leider
nicht...zumindest in dieser Applikation nicht.
lg
th
Christian J. schrieb:> Lag> vielleicht auch daran, dass sich der Hang-Up Zustand nicht künstlich> erzeugen liess und die Routine nur aus dem Kopf geschrieben war in der> Hoffnung, dass sie "wirkt".
Beim AVR ist das sehr einfach zu simulieren, da er genau in den
kritischen ACK-Slots auf den Interrupt wartet. Man muß also nur eine
Endlosschleife einfügen und auf den Watchdog warten.
Die Endlosschleife wird dann z.B. per UART-Befehl oder Taster
getriggert.
Die UART gibt dann nach dem Watchdogreset aus, wie oft SCL getaktet
werden mußte. Als Slave reicht ein einfacher PCF8574.
Aber es ist schon ein Armutszeugnis, daß über viele Jahrzehnte es noch
kein MC-Hersteller geschafft hat, sowas in den I2C-Controller zu
integrieren. Man könnte es automatisch vor jedem Startbefehl aufrufen.
Peter D. schrieb:> Aber es ist schon ein Armutszeugnis, daß über viele Jahrzehnte es noch> kein MC-Hersteller geschafft hat, sowas in den I2C-Controller zu> integrieren.
Vielleicht ist das eine Charaktersache, weil man damit ja nicht das
eigentliche Problem beseitigt ;) Man könnte nämlich auch am anderen Ende
ansetzen:
Es ist eine Schande, dass es Port-Expander ohne Reset-Pin gibt und
ausgerechnet solche besonders beliebt sind.
Es ist eine Schande, dass eine RTC das I2C-Interface im Batteriebetrieb
nicht abschaltet.
Es ist eine Schande, dass es so wenig I2C-Peripherie mit integriertem
Time-Out gibt. Ausgerechnet Maxim baut eine RTC mit I2C-Time-Out (und
5ppm MEMS-Oszillator!), MAX31343. Aber die kennt natürlich wieder
niemand :(
Bauform B. schrieb:> Vielleicht ist das eine Charaktersache, weil man damit ja nicht das> eigentliche Problem beseitigt ;)
Das Problem ist eigentlich nur, daß man I2C nicht verstanden hat.
Es liegt kein Fehler vor, sondern der Master wurde innerhalb eines
Transfers resettet oder hat durch Leitungsstörungen die Arbitration
verloren. Daher sollte auch der Master gefälligst den Slave wieder
deadressieren, denn der Slave ist völlig unschuldig. Er verhält sich nur
streng nach dem I2C-Standard. Daß der Standard kein Timeout definiert,
mag nicht jedem gefallen, läßt sich aber nachträglich nicht mehr ändern.
Es hat dafür den Vorteil, daß es keine Maximalzeiten gibt, d.h. man kann
I2C zu Fuß debuggen und keine Task muß auf I2C Rücksicht nehmen.
Bauform B. schrieb:> Ausgerechnet Maxim baut eine RTC mit I2C-Time-Out
Dazu muß aber SCL >35ms auf low gehalten werden. Also muß man doch
wieder das I2C disablen und mit den Pins spielen. Da mache ich lieber 9
Takte, das geht bedeutend schneller.
Peter D. schrieb:> Er verhält sich nur streng nach dem I2C-Standard
Wer ist "er"? Kann es sei, dass hier wieder phantasiert wird, um welche
Bauteile es konkret geht?
Stefan ⛄ F. schrieb:> Wer ist "er"?
Der IC (integrierte Schaltkreis), der in 99.9% der Fälle
fälschlicherweise verantwortlich gemacht wird, abgestürzt zu sein.
Vielleicht stürzen ja wirklich I2C-ICs ab. Ich kenne das aber auch nur
so, dass die ersten zig Implementierungen einfach von Unkenntnis geprägt
sind. Ich habe Clock-Stretching beispielsweise erst nach Jahren
berücksichtigt. Andere Kollegen kennen das heute noch nicht.