Hallo allemaal,

Voor een project met modeltreinen ben ik bezig met een automatisering via een pic. Het programma is bijna af en ik heb nog flink ruimte in mijn pic. Nu kan ik het aantal baanvakken dat maximaal aangestuurd wordt uitbreiden, maar daar heb ik meer shiftregisters voor nodig (74hc595), ik gebruik er nu al 9. Ik heb geen pinnen meer vrij op mijn pic.

Mijn vraag is: hoeveel shiftregisters kan ik maximaal achter elkaar zetten?

Bedankt!

Benjamin

ligt aan de update frequentie

je moet steeds meer bytes aan data inschuiven in dezelfde tijd

Hoi DK,

Ik werk met een kristal van 20 Mhz.

Bedankt voor je supersnelle reactie ;)

[Bericht gewijzigd door Henry S. op (53%)]

Je kunt er 2 595's in serie zetten. Kost je geen pennen, maar dus wel tijd omdat je nu elke keer 16 bits moet inklokken.
Een Pic met (veel!) meer pennen is in dit soort gevallen natuurlijk veel makkelijker. Dan houdt je wat pins over en dat geeft je de mogelijkheid te interfacen met iets dat niet zo goed via een schuifregister kan.

P.S. Op 20 MHz mag 16 bits inklokken geen probleem wezen, zou (in assembler) in minder dan 10 µs moeten kunnen.

[Bericht gewijzigd door Hensz op (15%)]

daarna kun je de 2e aan de 3e toch ook weer op dezelfde manier doorlussen, alleen moet je dan telkens 24 bits inklokken

volgens mij is dit onbeperkt

alleen de tijd dat je data in aan het schuiven bent (waarbij de outputs stil staan) wordt steeds langer

Op zo'n FDS132 matrixbord zitten 34 schuifregisters achter elkaar dus dat is het probleem niet. Dus snel inklokken en door gebruik van de latch zorgen dat de output niet wijzigt tijdens inklokken. Dan gaat het prima.

Tijd is hier niet zo'n probleem, als het tot maximaal een 2 a 3 seconde duurt is dat voor de input of output niet zo erg.

Ik was bang dat het signaal op de latch te zwak zou worden als je dat te vaak zou verdelen.

Je gebruikt de HC versie, die hebben een hoge ingangsimpedantie, dus je output van de PIC wordt niet zwaar belast. Moet kunnen.

[Bericht gewijzigd door Henry S. op (57%)]

staat in de datasheet wat de latch nodig heeft

als je het echt gek gaat maken kun je altijd nog iets van een buffertrap maken tussen je pic en alle latches

Op 4 november 2013 19:08:03 schreef benjamin.lentjes:
Tijd is hier niet zo'n probleem, als het tot maximaal een 2 a 3 seconde duurt is dat voor de input of output niet zo erg.

Ik was bang dat het signaal op de latch te zwak zou worden als je dat te vaak zou verdelen.

Eerste punt: 2 a 3 seconden, PIC op 20Mhz, dat zijn 5miljoen instructies per seconde. Je hebt dus 15 miljoen instructies. Bits inklokken is een uitgang de juiste waarde geven en een andere uitgang een keer toglen. Laten we daar heel ruim 15 asm instructies voor nemen, daarin moet het lukken. Dan kun je een miljoen bits inklokken. Dus 125 duizend schuifregisters van 8 bit achter elkaar moet kunnen.

Tegen die tijd krijg je echter wel meer problemen dan alleen de latch...

Qua latch
In de datasheet kun je fan in / fan out opzoeken. Maar 'n stuk of 10 moet zeker lukken. Zo'n PIC kan 20mA sourcen/sinken, als dat shiftregister 2mA trekt lijkt me vreselijk veel. Then again, ik heb de datasheet niet bekeken. (Maar hierboven roept iemand hoge ingangsimpedantie, dat lijkt me eerder groteorde 500uA of lager. Dus 10 is 'n voorzichtige gok).

De capaciteit van de clock-lijn wordt eerder een probleem dan de fan-in van de IC's. Als je een scoop hebt kun je het signaal meten om te kijken of de flanken er nog goed uit zien.
Maar nog steeds kun je er een aanzienlijk aantal achter elkaar zetten.

En als de capaciteit van die 125000 latch enable en clock pinnnen teveel dreigt te worden gewoon een gate-drivertje ertussen. Bestaan ook in een 5V versie, met uitgangsstromen tot 4A (10nF belasting).
Die dingetjes zijn ook best wel snel, ik heb ze wel eens gebruikt voor een 13.5MHz signaal. Van Microchip dacht ik.

Edit: 't Was de TPS2817 van Texas...

De ingangscapaciteit van een 74HC795 (NXP) klokpin is 3.5pF. Doe daar nog eens 3.5pF bij voor je traces, en je hebt 7pF per schuifregister.

Om een capaciteit van 7pF van 0.8 naar 2.0V te krijgen met 20mA heb je 1.2v * 7pF/20mA = 0.42 ns nodig. Per klokperiode moet je omhoog en omlaag, dus met 1 schuifregister kom je op 0.84ns

Met 1000 schuifregisters kom je op 0.84us => 1.19MHz.

In de praktijk moet je meer marge nemen (zo zal een PIC geen 20mA kunnen sourcen/sinken in een capaciteit die deels opgeladen is, en moet je wat meer marge nemen dan de minimale Vil (0.8) en Vih (2.0).

Maar met 125000 schuifregisters zul je geen klok van meer dan een paar kHz halen, en gaat je update dus wel redelijk lang duren...

Hoor je waar je het over hebt?
Voordat ik 125000 gesoldeerd hebt ben ik allang en failliet en met pensioen ook denk :p

Met andere woorden, @TS: geen probleem, gewoon doen.

Ik houd voor dit soort zaken meestal een fan-out van 20 aan. Zit je (bijna) altijd goed. En de zaak blijft overzichtelijk.

En dus als je "shared" signalen hebt, kan je iedere 20 schuifregisters een buffertje opnemen. Ik zou het modulair maken. Ofwel als volgende module een volgend schuifregister (of 2 of 3 per print), ofwel een "buffer" module.

Of je zet bijvoorbeeld 5-10 schuifregisters op 1 printje en buffert gewoon altijd de klok en latch signalen voordat je ze uitstuurt naar de uitgang....