Het blijkt dat Lenz dit laatste pakketje NIET verstuurd.
We dachten dus door middel van het activate bit in het XpressNet (en DCC) commando de wissel in de ene dan wel andere stand te kunnen zetten.
Ik denk dat je de mrrwa library redelijk makkelijk kan aanpassen om minstens het aantal berichten te monitoren en te tellen hoeveel verkeerde checksums er binnen komen.
Het moet ook mogelijk zijn om collisions te volgen die andere apparaten veroorzaken. Het laatste wat ik me herinner is dat er dan een pauze plaatsvindt waardoor iedereen weet van de collisie. Maar ik moet dan met mn neus de documentatie induiken en dan iets van een callback toevoegen aan die Library.
De mrrwa library is helaas niet bijzonder "onderhouds vriendelijk" geschreven.
Ik vermoed dat collisions het makkelijkst gedetecteerd kunnen worden door te kijken of er een signaal is, dat na korte tijd (enige us) wordt afgebroken. Daarna moet het even stil zijn. Pauze alleen lijkt me een onvoldoende voorwaarde.
All transmitters are responsible for detecting TRANSMIT COLLISIONS on a 1 bit or whole echo-byte basis. If a TRANSMIT collision is detected the TRANSMITTER will force a line BREAK of 15 BIT times with a Low or "SPACE" on LocoNet, and decrement the Transmit Attempt count. (The device can attempt the next acess at the same Priority, or change it by some small amount, depending on an internal Phase reference, if the delay from Network free to Seizure is greater than 2uS).All receivers will process the BREAK as bad data framing and reset Message parsers The network is then free to re-arbitrate access. Any message that has format or framing errors , data errors or is a fragment caused by noise glitches and does not completely follow the MESSAGE FORMAT will be ignored by ALL receivers, and a new OPCODE will be scanned for re-synchronization.
Ik gebruik daarom zowel voor het zenden als het ontvangen gewoon de UARTs. Dat doet de job uitstekend. Het enige dat me kan overkomen, is dat ik een paar honder microseconden te laat door heb dat er een collision is. Maar het is toegestaan door De LN specs
Klopt het dat je dan, nadat een compleet byte is verstuurd, het ontvangen byte vergelijkt met het verstuurde? Hierdoor wordt dus na ongeveer 500us gecheckt of er een collission heeft plaatsgevonden?
Lijkt me (bij hoge belasting) niet ideaal, maar ik ben met je eens dat continue interrupts afhandelen nog minder is.
Ik heb het nog niet in detail begrepen, maar misschien is de aanpak van Mikael Ejberg (https://www.ejberg.dk/portfolio/loconet-avr-da/) toch wel interessant.