CENTRALE REGELING

Communicatie tussen deelnemers in de toplaag

Na heel wat experimenten met verschillende types microcontroller en communicatieprotocollen, kwam ik voor de toplaag van de centrale uit op een vereenvoudigde I2C, ook bekend als TWI.
Op een 20-polige busprint kwamen zo niet alleen 2 aders voor deze seriële communicatie en voedingslijnen, maar ook verschillende aansluitngen die van en naar de noodstopschakeling, de PC-voeding, ... gaan

Elke component van de toplaag heeft centraal een AtMega1284P als microcontroller. Deze 44-polige smd-chip heeft met zijn 16K Ram, 4K Eprom en 128K Flash genoeg in huis om een (al dan niet grote) taak op zich te nemen. Verder heeft elk printje een ISP-aansluiting om de chip te programmeren, een aansluiting voor een extern LCD-kastje, enkele verklikkerlijnen en 8 tot 16 rechtstreekse aansluitngen met de "buitenwereld"
Op de centrale busprint is plaats voorzien voor 15 van dergelijke printjes, en aan de uiteinden kan de bus met extra connectoren verbonden worden met de rest van de aansluitingen (voeding, noodstopsignalen, ...) Er zijn 4 soorten printjes die op de bus komen: Input en Output (van en naar de baan, het synoptisch bord, ...), Denkers, en één centrale Master.

De Master en de centrale communicatie

Deze eenvoudige print beheert de communicatie tussen de deelnemers op de centrale bus, met een vereenvoudigd maar snel I2C-protocol (350 KHz)
Bij het opstarten stuurt hij een algemene boodschap, waarna alle andere printjes zich aanwezig melden en zich kenbaar maken. Eens die kennismakingsronde voorbij is, kan de feitelijke communicatie starten.
De Master modereert die communicatie: hij bepaalt wie iets mag "zeggen", kijkt na of de boodschap verstaanbaar is en herhaalt ze dan naar alle deelnemers. Indien nodig verstuurt hij algemene boodschappen (opstart- en afsluitmodus, interne alarmen, ...). Hij bepaalt verder ook wanneer er mag gepraat worden, en wanneer de chips dienen "na te denken". Deze afwisseling (8 keer per seconde) zorgt ervoor dat zowel de communicatie als het denkwerk ongestoord en toch vaak genoeg kan gebeuren.

Een boodschap zelf bestaat telkens uit een opcode met een korte vaste lengte, eventueel gevolgd door een datablok van maximaal 255 bytes. Een checksum-byte aan het einde helpt om te controleren of een boodschap correct is verstuurd en aangekomen. In de opcode staat een byte, die weergeeft wat voor soort informatie er wordt gestuurd. Een ontvanger kan zo selecteren of die informatie voor hem interessant is, en er mee aan de slag gaan.
Input- en Output-slaves zijn eigenlijk niet veel meer dan I2C-naar-meervoudige-RS232-omzetters. Ze babbelen met de (vele) microcontrollers van de baan zelf: snelheidsregelaars, bezetmelders, seinen, wissels, knopjes en leds op het synoptisch bord, ...)
Ze kunnen naar tot 7 externe printjes informatie sturen of er van opvragen. Een output-print zal (bijna) nooit informatie naar de centrale bus sturen (maar er vooral krijgen), terwijl een input-print alleen informatie stuurt als er iets veranderde tegenover de vorige "lezing". Op die manier wordt de bus niet belast met telkens dezelfde informatie, en weet een ontvanger dat het over nieuwe informatie gaat.


©2016 Gerolf Peeters - aangepast op 07.03.2016 Zie ook: noodstop - PC-voeding - Servo's