Keuze van de hardware voor dit project.
Ja ik had echt de bedoeling om een AVR Xmega chip te gebruiken. Zo, dan maar 2 modules "MIKROE-793 READY FOR XMEGA" Bij Mouser besteld en het boek "De taal C en de Xmega" Van Wim Dolman.
Back to school PB246626 by Frans, on Flickr
en dan maar leren en testen. Met de LA aangekoppeld en na meerdere dagen C leren dan maar een kleine toepassing maken:
Xmega Stage controller transfert PC266646 by Frans, on Flickr
Dat het werkte zie je op de foto, LCD display, Rotary encoder analoog input, keyboard enz. Dus ja nu maar het echte knikkerbaan project voorbereiden. Maar al snel kwam ik er achter dat ik nog steeds vele I/O pinnen te kort kwam en vooral dat de vele I/O's functie gekoppeld zijn. Je moet vooraf goed weten welk type I/O je nodig hebt want eens de pcb interface gemaakt is wijziging veel moeilijker.
Oef, het lukte mij niet, kon het confort dat een FPGA module bied niet evenaren. Hier ligt nog een ongebruikte originele Xmega doos nooit gesoldeerd of aangesloten en eentje waar ik enkel een test programma ingeduwd heb.
Dat is nu de echte reden waarom ik terug grijp op de FPGA module. Kostprijs bepaald hier helemaal niet de keuze, ik heb al evenveel betaald voor mijn 2 stuks Xmega (zonder dan nog het boek) als een DE0-Nano boardje.
Vandaar de eindkeuze:
Fischertechnik Controller + carrier board. by Frans, on Flickr
P6077065 fpga board Fischertechnik project by Frans, on Flickr
fpga board drager, bestukking plan Fischertechnik project. by Frans, on Flickr
Omdat bij een FPGA bijna iedere I/O pin dezelfde functie type kan hebben, kun je de layout voor de interface sterk optimaliseren. Dat zie je direct op de layout pcb. Daar zitten ongeveer 100 I/O's op en er is nauwelijks een kronkelende baan in de layout.
De DE0-Nano module is een kleine kant en klare board. Connectoren zitten er ook op en je moet enkel de onderliggende interface pcb ontwerpen. Hoewel ik gekozen heb om zelf de DC/DC convertors er op te plaatsen voor 5V en 3.3V is dit zelfs niet echt nodig, want je mag ze ook zo voeden (3.6-5.7V range). Ik heb echter al die spanningen nog nodig, vandaar dat ik ze zelf voorzien heb. Het zijn 1.5A versie's, je mag ze voeden tot 18V en ze hebben een heel hoog rendement.
Nu wat de I/O betreft, mijn princiep is voor alles extern zoveel mogelijk buffers voorzien, intern geen probleem 3.3V is meestal perfect. Naar buiten toe staan 74HCT245 buffers. Die zorgen voor de juiste level interface tussen FPGA en buitenwereld die 5V is. De input van de externe I/O doe ik met een kleine weerstands deler zodat max 3.3V op de FPGA kan komen.
De externe signalen zijn vooral heel veel inputs op 5V level en veel outputs voor leds en 7 segment display's. De soorten inputs zijn vrij uiteenlopend en de interface is hierop voorzien. Het zijn allemaal SPI boards zowel voor input als outputs. Dit kunnen Rotary encoders zijn, Hall decoder, schakelaars, reflectie sensoren, het maakt allemaal niet uit. Achteraf gezien gebruik ik bijna geen gewone leds meer voor de uitgangen, die worden vervangen door Neoleds. Neoleds zijn kleurleds, 24 bit waarvan je per led de waarde kunt instellen, kleur helderheid, on/off, blink enz. Ze staan in een loop, bijna onbeperkt van aantal als je rekening houd dat ze voldoende stroom moeten hebben. Daarom voed ik ze in de loop op meerdere punten, het output signaal uit de FPGA vergt slechts 1 I/O pin en ik heb nu 128 leds voorzien.
Neoleds zijn design, spectacle, informatief, leuk voor de kinderen maar ook functioneel. Als de deuren van mijn lift bv openstaan branden er 2 groene neoleds, als ze gesloten zijn worden er 2 rode uitgestuurd. Allemaal zeer creatief te gebruiken, onbeperkt in mogelijkheden. Wat hier een grote rol speeld is dat je bij het ontwerp helemaal nog niet hoeft te bepalen waar en welke led moet verbonden worden. Als het project klaar is maak je gewoon een loop van al de leds. Je hebt een nummer in een tabel en je kan ze gebruiken. Wijzigd achteraf toch die loop, dan zijn het slechts enkele nummers in je programma die je moet updaten. Led nummers worden als paramters ingegeven en staan eenmalig vooraan in je programma met een functionele naam.
Genoeg voor vandaag, het is nieuwjaar avond en ik mag nu 2 pintjes drinken!