Hallo,
Ik ben momenteel op zoek naar de beste oplossingen om zeer veel digitale uitgangen te kunnen sturen via RS232
Ik had zelf gedacht aan een Atmel + schuifregisters.
Een printplaat zou toch een 512 IO's moeten kunnen aan/uit schakelen met een refresh rate van ongeveer elke seconde...
Atmels kan ik programmeren, dus dat is geen probleem, echter wat is de beste (en goedkoopste) oplossing om tot een mooi resultaat te komen.
Och ja, het is om allerlei te kunnen aansturen op een modeltreinbaan
Praat je over uitgangen of I/O?
Hoe ga je 512 x 2 draadjes aan een PCB bakken? Da's best een hoop...
Zelf zou ik toch opteren voor moduletjes van 16 outputs ofzo en die met een bus aan elkaar hangen. Kun je ze makkelijk onder je treinbaan kwijt.
Als het toch op 1 PCB moet: kijk eens naar SPI (I/)O expanders. Meestal kunnen die wel 'shout & pray', je hebt dus geen inputs op je AVR nodig. Meerdere chippies die op dezelfde nCS reageren, maar andere data krijgen. Als je er 8 data lijnen voor pakt, kun je er 8 teglijk van hun data voorzien. 16 pins per expander, heb je nog 4 nCS nodig om de volledige 512 bits te kunnen doen. Een AVR met 13 vrije pinnen kan het zonder trucen.
Zelf zou ik toch opteren voor moduletjes van 16 outputs ofzo en die met een bus aan elkaar hangen. Kun je ze makkelijk onder je treinbaan kwijt.
Het moet niet persé op 1 print staan.
Maar het hoofdbord moet toch een 64 uitgangen kunnen schakelen en eventueel dan nog meerdere pcb's van 16 output kunnen aansturen.
liefst met zo weinig draadjes. IC2 ... of zo...
btw, zou het ook mogelijk zijn om het aantal output pcb's instelbaar te maken ifv het aantal pcb's die aangesloten zijn? daardoor wordt het waarschijnlijk nog meer flexibler...
Hang het spul aan RS485. Geeft elke 'module' een adres, verzin een leuk protocolletje en het luistert allemaal braaf. Voor een treinbaan lijkt 'shout & pray' mij goed genoeg. Zeker op dergelijke korte afstanden.
Je busmaster is de enige die kennis moet hebben van wat op welk adres zit, de rest hoeft er niks van te weten.
Even uitgaande van spul op 1 PCB:
I2C heeft als nadeel dat het aantal mogelijke adressen beperkt is. Je kunt natuurlijk creatief zijn met meerdere bussen. Met SPI heb je mi. wat meer flexibiliteit in de aansturing, waardoor het ondanks dat het 'creatief' is toch overzichtelijk blijft.
Met een gedistribueerd geheel heb je die flexibiliteit niet nodig: je zou evt. ze uitgangen van je AVR rechtstreeks aan drivers kunnen hangen.
Als het uitbreidbaar moet zijn zou je kunnen overwegen serieel gaan vanuit een micro. Met 64 stuks 74HC4094 a €0.24 kom je voor een schappelijke prijs een heel eind. Zorg wel dat je clocksignaal er goed uit ziet over lange bedrading. Wordt dat lastig dan zit je met (software) I2C volgens Marco69's methode (meerdere bussen) beter.
over welke lengte zou het problemen kunnen opleveren?
als het over een afstand van 10 meter nog werkt is het goed genoeg. of spreken we hier over kleinere afstanden?
en wat zou de frequency mogen zijn?
ik vermoed dat 100kHz al meer dan voldoende is?
meer dan 1024 bits / seconde zal ik toch nooit toepassen
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
10 meter? Flink modelspoor, als je't mij vraagt! Of bedoel je de afstand PC <--> modelspoor? In dat geval zou ik de RS232-verbinding zo lang mogelijk maken, en het stuurgedeelte centraal onder de spoorbaan - met korte verbindingen tussen de modules, dus.
Een schuifregister over stuurdraden van 10m aansturen kan natuurlijk ook, maar dan ga je toch extra aandacht aan die stuurlijnen moeten besteden: zorgen voor een goede afsluiting e.d.
10 meter voor een modelspoor is toch niet zo achterlijk veel? Of ben ik nou verwend?
Zeker als het een U-vormige baan is, zit je daar zo aan.
Ik zou lekker voor RS485 gaan. Beproefd concept, kost geen drol, alles modulair, dus lekker testen. Als je alles met shiftregisters doet en je hebt een uitgang extra nodig, moet je je software aanpassen omdat er wat tussen gekomen is...
het is wel degelijk 10 meter spoor, grote zolder 
als die RS485 reeds beproefd is en geen drol kost, zijn daar dan voorbeelden van te vinden?
[Bericht gewijzigd door shortcircuit op (47%)]
Als je dan toch al voor die RS485 gaat neem je toch gewoon DMX? daar is ook al voldoende software voor te krijgen.
Pak een williekeurige levelshifter die dat voor je doet (kijk even bij Maxim) en hang het aan de UART van je AVR. Ik neem aan dat je die 23 touwtjes zelf nog wel kunt uitdokteren (en anders trek je ze uit de datasheet...) Rest is software.
DMX is wel leuk, nadeel is wel dat je in elke 'slave' DMX moet gaan implementeren, wat het mi. in deze context zinloos ingewikkeld maakt. Zeker daar je je aansturing vermoedelijk ook zelf in elkaar klust...
[edit] aantal touwtjes aangepast
[/edit]
dat is nu net de bedoeling om vast te stellen wat het beste is voor deze toepassingen.
ff buiten DMX gerekend en ik geef elke slave een adres mee dan kom ik dus volgens jou met het volgende toe:
een level shifter RS232->RS485
een microcontroller
de slaves met een adrescodering + latch geheugen + output buffer?
toch nog ff melden dat het eenvoudig moet blijven!
een master pcb
meerdere slave pcb's
uiteindelijk 512 Outputs kunnen schakelen
meer mag ook maar is niet echt nodig.
met 8bit dips kan ik al 256 adressen coderen...
Een 8255 misschien een idee ?. Dan heb je met 1 chip al 24 I/O pennen te pakken (zijn er nog steeds
22 bij 512 I/O's). I2C of RS485 kan ook. Of een combinatie van RS485 en de 8255. Google eens op "SNAP" en RS485 dan heb je al een leuk freeware protocol te pakken met foutafhandeling, wordt t wat minder "fire-and-forget". RS485 kan ook nog eens over lange afstanden. Paar honderd meter is zelfs geen probleem.
Groeten, Bram
EdwinNadorp
Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....
Als je de RS485 gaat gebruiken wordt het een master-slave oplossing (iets wat ik ook zou doen)
Dat betekend dat je een master heb (duh) en meerdere slaves.
Elke slave heeft een eigen adres, dat kan een software matige zijn, maar een dipswitch op de print is natuurlijk wel makkelijker.
Het voordeel van de slave is dat het aansturen hetzelfde kan zijn maar de hardware verschillend.
De slave's zullen wel allemaal een uC bevatten.
Tevens is het uitbreiden hiervan simpel een extra printje maken.
ok, RS485 met master en slave lijkt me leuk
maar waaruit bestaat dan zo een slave voor bijvoorbeeld
16 bitjes ?
en ik vermoed dat ik dan ook een protocol moet verzinnen waarbij het adres meegestuurd wordt waarvoor de data bestemd is ?
ok, 128 slave adressen,
maar ik kan toch per slave adres meerdere bytes sturen nietwaar?
en dan gebruik maken van 8 bit schuifregisters ?
of ineens 32bit/slave ?
Op 31 december 2007 18:44:45 schreef RES:
Een adresbyte (ID), en dan de databyte.
Maar RS485 was max. 128 devices dacht ik.
Huh? Het is gewoon een vorm van dataoverdracht. Net zoals RS232 dat is. Hoe je je info in die data stopt is aan de bedenker. Enig probleem is dat het aantal 'slaves' beperkt is vanwege bus load (wellicht komt dat getal daar vandaan). Heb niet het idee dat dat hier echt een probleem gaat zijn.
Maak een protocolletje. Eerste byte heeft bit 7 cleared, zo heb je 128 adressen. 2e byte heeft bit 7 set, bit 6 zegt on / off en de overige bits geven het bit address. Met 16 pins heb je aan 4 bits genoeg. Heb je nog 2 bits over voor een 'reset' oid. Door het verschil in bit 7 tussen de bytes kan je slave syncen op de datastream. Kost bijna meer tijd om het uit te tikken dan om de code te bakken.
Maak een protocolletje.
Waarom kijken jullie niet even naar de site van HTH daar is alles (inclusief hardware) al uitgevonden en voorgedaan. Het aantal bits per slave bepaal je zelf. Je kunt ook alle 512 uitgangen op 1 processor hangen. Maar is waarschijnlijk niet handig. Ik zou een gemiddelde zoeken in wat werkbaar/handig is (hoeveel kanalen wil je tegelijkertijd toevoegen, weghalen).
[Bericht gewijzigd door bprosman op (44%)]
EdwinNadorp
Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....
Op 31 december 2007 18:48:56 schreef shortcircuit:
ok, 128 slave adressen,maar ik kan toch per slave adres meerdere bytes sturen nietwaar?
en dan gebruik maken van 8 bit schuifregisters ?
of ineens 32bit/slave ?
De 128 slave's kan je eventueel wel vermeerderen met repeaters. Maar heb je er echt 128 nodig?
Een slave is een io board met meerdere io's. Je zal je spoor eens moeten uittekenen en bekijken waar je wat nodig heb. Vervolgens projecteer je de slave modules.
10m spoor zal een oppervlakte hebben van 2x5, 3x3? Wellicht kan je uit de voeten met 50 slaves elk 100 poorten via shiftregisters.
Je protocol zal een header moeten bevatten met het adres, gevolgd door data afgesloten met een einde markering.
De slave's lezen allemaal de header en alleen de geadresseerde zal reageren op de data. Als de einde markering geweest is, moeten alle slave's weer op een header wachten.
Ik weet niet wat je gaat schakelen maar terugkoppeling is natuurlijk ook mogelijk.
De master vraagt, de slave met het adres antwoord.
Deze site bedoelde ik :
Groeten, Bram
P.S. "50 slaves elk 100 poorten via shiftregisters" zijn dr 5000 
[Bericht gewijzigd door bprosman op (35%)]