De LocoNet start/stop heeft duurtesten doorstaan dus nu op naar een volgende stap (om uiteindelijk tot een LocoNet synoptisch bord te komen).
Waarom een synoptisch bord op het LocoNet en niet gewoon het MM/DCC signaal van de rails decoderen (wat ondertussen maar weinig geheimen meer voor mij heeft)? Op het MM/DCC signaal zie je alles passeren: een wissel wordt omgeschakeld, een sein wordt gezet, een ontkoppelingsrail wordt bediend. Maar je ziet het enkel passeren en kan zelf niets sturen. Info over een bezetmelder in het MM/DCC signaal? Daar kom je totaal niets van te weten.
Al die info (wissels, seinen, melders, ontkoppelingsrails, locomotief gegevens, ...) passeren wel op het LocoNet... ...En het zijn net die gegevens die ik nodig heb voor een synoptisch bord.
In eerste instantie wil ik de toestand van 16 'devices' weergeven. Ik noem ze 'devices' want het kan een wissel zijn (2 standen - led rood of led groen), een sein (3 standen - rood, geel of groen), een ontkoppelingsrail (niet bekrachtigd: magenta - bekrachtigd: rood) of een bezetmelder (niet bezet: ciaan - bezet: blauw).
Ik wil het project ook universeel opzetten. Ieder van de 16 devices moet elk device aan kunnen (via een eenvoudige herprogrammering met een druktoets en een digitale (LocoNet) centrale). Elke punt op het bord zal dan bestaan uit een drukknopje en een RGB led (een drukknopje bij een melder heeft wel geen zin - tenzij om de reactie van de baan-besturings-software te testen = spookmeldingen genereren).
Ik wil 16 druktoetsen lezen en 16 RGB leds aansturen (16 x 3 = 48 leds). Nu heb ik wel nog enkele pootjes op mijn µC over maar veel te weinig om dat alles te verwerken. Dus extra hardware.
De toetsen wou ik in eerste instantie in een 4x4 matrix plaatsen - dat zijn rechtstreeks op de µC nog 8 IO pennen die ik nodig heb - en om I/O te besparen had ik mijn oog laten vallen op een
PCF8574, een oud gediende en betrouwbare I2C naar 8 bit IO expander. Enkele testen en dat werkte. Helaas wel heel wat software om die 4x4 matrix via I2C aan te sturen en uiteindelijk uit te lezen.
Een verder speurtocht bracht mij bij een
MCP23017 (eveneens een I2C IO expander maar wel 16 bits) en na uitpluizen van de lijvige datasheet tot de conclusie gekomen dat die expander de oplossing is. Geen matrix meer maar aan elke van de 16 ingangen een schakelaartje (pull-up weerstand niet nodig - interne weak pull-up softwarematig in te schakelen). Via I2C telkens de ingangen opvragen om te zien of er een toets is ingedrukt, is ook niet nodig. Een interruptlijntje geeft aan wanneer een toets wordt ingedrukt of los gelaten. Dus enkel op tijd en stond dat lijntje controleren en daarmee is de kous af.
...Misschien (als ik tijd en goesting heb) kan ik in een latere fase daarmee een LocoNet terugmelder opzetten met slechts 2 IC's

Voor die 16 RGB leds (waarbij ik ook de helderheid wil regelen - via een bepaald (te programmeren) locomotiefadres) heb ik het direct laten varen om die rechtstreeks vanuit de controller aan te sturen (
Charlieplexing even bekeken maar dat idee toch naast me neergelegd).
Bij een verdere speurtocht (wat is dat internet toch een luxe) naar externe hardware toch een leuk IC'tje gevonden:
MAX7219 - stuurt op zijn gemak 64 ledjes aan MET helderheidsregeling via slecht 3 I/O poortjes.
En nu een extra breadboardje bijprikken en nog een hoop draadjes van isolatie ontdoen en experimenteren...
Wordt (hopelijk) vervolgd...