Arduino multplexen met HC595

Hallo iedereen,

Ik heb jaren als plc programmeur gewerkt en heb sinds vorig jaar ook mijn zinnen gezet op een projectje thuis (met behulp van arduino).

Het eerste probleem daarbij is uiteraard het beperkt aantal in- en
uitgangen van de arduino en dus is voor beiden een multiplexer noodzakelijk.
Na wereldwijd zoekwerk ben ik bij de HC595 en HC165 uitgekomen, heb ik een schema getekend, materialen besteld en alles voor de eerste acht uitgangen op een euro printplaat samengebouwd.

Heel het ontwerp is wellicht overkill (optocouplers, transistoren, zekering, extra weerstanden), maar zo hoop ik te vermijden dat ik later bij een elektrisch foutje te snel dingen moet repareren (en de fout niet kan vinden). Ik ken namelijk de blln van digitale techniek en probeer met gezond verstand iets werkend te maken en het dan zo te houden. Dat ik overal 10k weerstanden gebruikt heb is om het eenvoudig te houden en de stroom laag. Ik zou uiteindelijk tot 64 uit en 32 in willen kunnen gaan en de arduino ook nog verder uitbreiden (data logging, koppeling met pc of ...).

Om te kunnen testen heb ik voor de 8 uitgangen een plaatje met ledjes en 1k weerstanden gemaakt en een plaatje met enkel schakelaars en drukknoppen.
Bij de test zonder ic (rechtstreeks 5V aanbrengen via de ic voet), liep alles perfect en ik was best wel trots op mezelf. Dus, enkele dagen later IC-tje er in gestoken en ... trots weg.
Dat hoort er uiteraard bij, maar ik kan geen fout vinden en weet nu niet meer hoe het verder moet. Alles in een doos gooien is momenteel mijn enige optie en die heeft niet mijn voorkeur zolang er geen dwingende omstandigheden komen.

Dus, iemand enig idee of ik een fout in mijn schema heb (zie bijlage), waar dit aan kan liggen, hoe ik dit verder kan testen of hoe ik dit kan oplossen?

Er zijn geen draadbreuken of kortsluitingen en alles is overeenkomstig het schema (ben daar ondertussen heel zeker van).
Ook de IC heb ik al eens omgewisseld (geen verschil merkbaar).
Als voeding heb ik een 12V voeding die ik met een regelbaar dc-dc voeding naar 5V breng (chinees materiaal) en alles ligt op een houten mdf plaat om geen kortsluitingen te maken.
Zo durf ik het niet met de arduino te koppelen (om uit te sluiten dat het aan de stuursignalen ligt).

PROBLEEM:
Zodra ik de OE aan de nul hang en MR hoog zet beginnen de 8 uitgangen snel te flikkeren zonder dat ik ook maar één clockpuls of shiftpuls of datasignaal activeer. Geef ik stuursignalen (drukknopkes)of kom ik met mijn hand aan de draden, dan heeft dat invloed op het gedrag (maar het blijft chaos) of valt alles stil.
Ik heb een extra plaatje met ledjes gemaakt zodat ook elk stuursignaal (in en uit) zichtbaar is en meteen ook met de nul verbonden is.
Helaas heeft dit geen verbetering gegeven.

Ik heb op dit forum al wat gezocht, maar kon geen topic vinden met iets vergelijkbaars.

Arco

Special Member

Zitten alle overige lijnen van de 74595 wel aangesloten? (anders gaat 'ie natuurlijk vreemde dingen doen...)
Schema is nogal een warrige boel (alles loopt door elkaar, en van de transistoren is niet duidelijk of het een top of bottom view is)
Probeer alles logisch op een schema te zetten (+ boven, - onder, ingangen links en uitgangen rechts o.i.d.)

Dan begrijp je zelf ook nog wat het is over een jaar of zo... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
High met Henk

Special Member

je kunt ook een losse Atmel nemen, dan kun je al veel meer IO kwijt een atmega128 bijvoorbeeld..

of als je op arduino platform wilt blijven de genuino.

maarem het is een idee. er is niets mis met Multiplexen.

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???

Op 28 juli 2016 23:34:18 schreef High met Henk:
je kunt ook een losse Atmel nemen, dan kun je al veel meer IO kwijt een atmega128 bijvoorbeeld..

of als je op arduino platform wilt blijven de genuino.

maarem het is een idee. er is niets mis met Multiplexen.

Omdat ik geen enkele electronica ervaring heb wou ik toch eerst wat simpele dingen succesvol doen alvorens componenten te gaan gebruiken waar meer kan bij mis gaan. Bij bootloaders en hun mogelijke problemen waren ze me dus al kwijt.
Over Arduino (2009 = ATmega328) kan je zowel informatie in eenvoudige bewoordingen terugvinden als gedetailleerde info over details. Ik vermoed ook dat het programmeren wat eenvoudiger is omdat enkele zaken je al uit handen genomen worden.

Het is dus niet de goedkoopste/krachtigste, oplossing, maar laat iemand zoals mezelf toe om er stapsgewijs in te komen (of het te houden op eenvoudige dingen).
Zo probeer ik momenteel uit te zoeken hoe ik met analoge signalen en PWM kan omgaan (744051 of ...). Dan moet er ook nog een eenvoudige display bijkomen en externe klok, bekijk ik wat ik met i2c protocol kan doen, moet er data logging gebeuren en was het mijn idee om voor bediening een link te leggen met een Raspberry PI (waar ik nu nog niets van ken).

Je kan me dus niet verwijten geen ambitie te hebben (gehad ?).

Op 28 juli 2016 22:58:13 schreef Arco:
Zitten alle overige lijnen van de 74595 wel aangesloten? (anders gaat 'ie natuurlijk vreemde dingen doen...)

In men testopstelling zijn alle pinnen aangesloten op een led met weerstand.
Ingangen hebben daarnaast een drukknop of schakelaar naar de plus. 'Zwevende' spanningen zou ik dus nergens mogen hebben.

Op 28 juli 2016 22:58:13 schreef Arco:
Schema is nogal een warrige boel (alles loopt door elkaar, en van de transistoren is niet duidelijk of het een top of bottom view is)

De vorige bijlage was de print layout (top-view op componenten, blauw zijn connecties onderaan, rood langs boven).
Hier als bijlage het elektrisch schema. Beiden zijn gemaakt met eagle en wijken dus niet van mekaar af.

Arco

Special Member

Weerstanden van 10k aan de optocoupler ingang zijn wel heel, heel erg hoog... (ik zou 470 Ohm of hooguit 1k nemen)
Wat is trouwens het nut van die optocouplers? (zo te zien zitten in en uitgang aan dezelfde voeding vast...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik gok op "een poging de 595 te beschermen". Mijn voorstel: beschouw die 595 gewoon als "buffer" die zichzelf opoffert als er dingen verkeerd gaan.

Je output schakeling is niet zo handig. Zo hou je maar ongeveer 4V over aan de uitgang. Dat kan 5x beter met een iets andere constructie (ofwel: schakel de min, de opto trekt dan de basis van de 547 via een weerstand omhoog, ofwel gebruik een 557 en de opto trekt via een vergelijkbare constructie de basis omlaag om hem aan te krijgen).

Je huidige constructie werkt niet. Zet je 20V op een uitgang, dan gaat zo'n uitgangstransistor kapot, en gaat geleiden. Dan krijg je 20V op je 5V draad en dan gaat de arduino ook gewoon kapot. Aparte voedingen zijn nodig om enige zekerheid te hebben dat een fout niet "overslaat". Gewoon voorzichtig zijn... :-)

[Bericht gewijzigd door rew op vrijdag 29 juli 2016 07:48:00 (24%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
mel

Golden Member

Is de voedingsspanning wel ontkoppeld op ieder ic? Dat wil ook wel eens rare dingen geven.

u=ir betekent niet :U bent ingenieur..

In het onderhavige geval was de aansturing statisch en stond de boel al raar te doen (oscileren). Dus dat zal niet komen doordat de chip dynamisch z'n voeding onderuit trekt (waar je de ontkoppel-C voor hebt).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Wanneer je OE hoog maakt worden de uitgangen in Z-state gebracht. Mijn ervaring is dat de uitgangen beginnen te "zweven" waardoor je soms onverwachte resultaten krijgt. Om dit op te lossen gebruik ik vaak een resistor-array waarvan ik de gemeenschappelijke pen aan GND hang. Zoals arco al vermelde is 10kΩnogal aan de hoge kant. Een waarde tussen 470Ω en 1kΩ is meer gebruikelijk

Depeet

Je maakt het je makkelijker als je een Arduino Mega pakt, die heeft veel meer I/O on board.

Op 29 juli 2016 09:53:24 schreef depeet:
Wanneer je OE hoog maakt worden de uitgangen in Z-state gebracht. Mijn ervaring is dat de uitgangen beginnen te "zweven" waardoor je soms onverwachte resultaten krijgt. Om dit op te lossen gebruik ik vaak een resistor-array waarvan ik de gemeenschappelijke pen aan GND hang. Zoals arco al vermelde is 10kΩnogal aan de hoge kant. Een waarde tussen 470Ω en 1kΩ is meer gebruikelijk

Als ik OE hoog zet is alles perfect 0 en heb ik geen enkele sturing van uitgangen. Als ik OE laag maak begint de chip onmiddellijk te reageren.

Op 29 juli 2016 01:36:21 schreef Arco:
Weerstanden van 10k aan de optocoupler ingang zijn wel heel, heel erg hoog... (ik zou 470 Ohm of hooguit 1k nemen)
Wat is trouwens het nut van die optocouplers? (zo te zien zitten in en uitgang aan dezelfde voeding vast...)

De werking van de optocouplers met 10k heb ik op zich gecontroleerd en werkt prima. Door de stroom laag te houden kan ik meer kaartjes gaan toevoegen (5V@10k= 0.5mA, 64 DO+32 DI = 50mA,
Arduino 200mA max per groep -> zou dus max. tot 2,5k kunnen laten zakken).

Op 29 juli 2016 07:45:27 schreef rew:
...
Je output schakeling is niet zo handig. Zo hou je maar ongeveer 4V over aan de uitgang. Dat kan 5x beter met een iets andere constructie (ofwel: schakel de min, de opto trekt dan de basis van de 547 via een weerstand omhoog, ofwel gebruik een 557 en de opto trekt via een vergelijkbare constructie de basis omlaag om hem aan te krijgen).

Je huidige constructie werkt niet. Zet je 20V op een uitgang, dan gaat zo'n uitgangstransistor kapot, en gaat geleiden. Dan krijg je 20V op je 5V draad en dan gaat de arduino ook gewoon kapot. Aparte voedingen zijn nodig om enige zekerheid te hebben dat een fout niet "overslaat". Gewoon voorzichtig zijn... :-)

De optocouplers laten toe om 2 (of meer) verschillende voedingen te gebruiken en juist het probleem van overslaan of kortsluiting (arduino reset) te vermijden.
Zo kan ik ook, door 5,7V voeding te geven, opnieuw een mooie 5.0V uitsturen (of eender welke andere spanning)
Zo kan ik ook één kaartje spanningsloos maken zonder uitgangen los te maken en kan ik bvb een opgeblazen transistor vervangen zonder de arduino stil te moeten leggen.

Door de transistoren aan de plus zijde te hangen is mijn nul overal nul en geen 0,7V. Die 0,7V tussen de nul van een sturing en de echte nul zou in eventuele achterliggende elektronica voor problemen kunnen gaan zorgen en dat wil ik vermijden.

Op 29 juli 2016 09:07:59 schreef Vonkenpromotor:
Probeer deze eens van het Arduino form:

https://www.arduino.cc/en/Tutorial/ShiftOut

Daar is alles op gebaseerd, ik heb daar een scheiding van voedingen aan toegevoegd en ook de OE en MR beschikbaar gemaakt (kan deze nog steeds vast zetten indien ik ze toch niet zou gebruiken)

Op 29 juli 2016 10:03:26 schreef Rolo:
Je maakt het je makkelijker als je een Arduino Mega pakt, die heeft veel meer I/O on board.

Heeft 54 IO en daar ga ik zeker niet mee toekomen. Het is wel een optie om 2 Mega's te gebruiken.

Om het geheugen niet te overbelasten (geen idee hoeveel nuttige code daar in te krijgen valt) wil ik de code in de arduino heel eenvoudig houden (servo, encoder, allerlei regelkringen, tijd gestuurde uitgangen en eenvoudige 'snelle' logica).
'Trage' logica wil ik extern laten draaien (Rasberry PI of ...)

Arco

Special Member

De werking van de optocouplers met 10k heb ik op zich gecontroleerd en werkt prima.

Je denkt dat het prima werkt... ;)
Met zo'n lage stroom (380µA) is de CTR van de opto ronduit bedroevend (ver onder de 100%)
(de Vcesat van de transistor wordt niet eens opgegeven bij zulke extreme waardes. Een geval van 'werkt, maar absoluut niet aan te bevelen en onbetrouwbaar')

Neem een pic24, die is er in 100 pins, kun je vooruit...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Het lijkt dat alles op minieme spanningen reageert (radio ?, ... ) waarbij ikzelf en/of draden als antenne functioneren.
Gewoon door mijn hand te bewegen, zonder iets aan te raken, of een hendeltje van een schakelaar aan te raken, heeft dit al impact.

Ik heb laminaat op de vloer en geen tapijt, zelf contact maken met de nul geeft ook geen verbetering.

P.S. Ik gebruik een 74HCT595N (als dit enig verschil zou maken) - geen zinvol idee waarom ik niet de klassieke 74HC595 gebruik.

Op 29 juli 2016 14:20:44 schreef Arco:
[...]
Je denkt dat het prima werkt... ;)
Met zo'n lage stroom (380µA) is de CTR van de opto ronduit bedroevend (ver onder de 100%)
(de Vcesat van de transistor wordt niet eens opgegeven bij zulke extreme waardes. Een geval van 'werkt, maar absoluut niet aan te bevelen en onbetrouwbaar')

Neem een pic24, die is er in 100 pins, kun je vooruit...

Ik heb de test niet gedaan, maar vermoed dat dit enkel kan door aan de andere zijde de uitgang naar een extra transistor te leiden die dan als versterker dient.
Tot nu toe heb ik er enkel ledjes mee gestuurd (2 à 3 mA). Of de transistor in volledige geleiding zit weet ik dus niet. Zal eens een testje met 50mA doen.

Ondertussen test gedaan en ik kan inderdaad maar 4 à 5 mA trekken.
Een optie is om er darlington schakelingen van te maken.

Om de aangehaalde redenen (met één foutje de boel opblazen / het totaal vermogen dat de arduino moet leveren) stap ik niet graag af van de scheiding van stuurcircuit en 'vermogen' deel.

Een 595 kan per uitgang wel 25mA leveren, maar in totaal slechts zowat 70 mA (Vcc/GND). Rechstreeks 8 relais gaan sturen is dus niet echt mogelijk. Ik wil hem ook niet belasten met de in- en uitschakelpieken (zelfs met terugslagdiode over de spoelen).

[Bericht gewijzigd door Cojon op vrijdag 29 juli 2016 15:26:11 (27%)

Arco

Special Member

Is niet 'klassiek'... ;)
Zijn gewoon verschillende families. De HC is cmos compatible, en de HCT is TTL compatible. (qua logic levels)
Als de boel vreemd doet bij in de buurt komen of aanraken, hangt er ergens gegarandeerd een ingang los die als antenne functioneert...
Wat je kunt schakelen hangt van de BC547 af (of dit een A, B, C type is). De 100mA haal je zeker niet. (met de BC547A haal je met wat veel geluk zo de 25mA)

Uitproberen hoeft niet; als de datasheet zegt dat iets niet gaat of twijfelachtig is: niet aan beginnen.
De 595 kan die ledjes ook rechtstreeks aansturen; dan kan alle onnodig/zinloos spul er tussenuit (opto, bc547)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ondertussen test gedaan en ik kan inderdaad maar 4 à 5 mA trekken.
( Correctie : fout getest, blijkt tot ca 80mA te geraken bij kortsluiting)
Een optie is om er darlington schakelingen van te maken.

Om de aangehaalde redenen (met één foutje de boel opblazen / het totaal vermogen dat de arduino moet leveren) stap ik niet graag af van de scheiding van stuurcircuit en 'vermogen' deel.

Een 595 kan per uitgang wel 25mA leveren, maar in totaal slechts zowat 70 mA (Vcc/GND). Rechstreeks 8 relais gaan sturen is dus niet echt mogelijk. Ik wil hem ook niet belasten met de in- en uitschakelpieken (zelfs met terugslagdiode over de spoelen).

http://www.learnerswings.com/2014/09/cascade-operation-of-two-74595-sh…

Meer heb je niet nodig. Wil je relais aansturen gebruik je achter de 74HC595 een ULN2803.

[Bericht gewijzigd door Roland van Leusden op vrijdag 29 juli 2016 15:30:56 (24%)

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Arco

Special Member

Voor relais neem je een ULN2803. Heb je 8 uitgangen, en de diodes zitten er ook al in... :)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
blackdog

Golden Member

Hi Cojon, :-)

Heb je ook al eens bij Microchip gekeken, deze hebben een serie i2c extenders zodat je tot 64 extra in/uitgangen kan gaan.

MCP23017 en b.v. de MCP23018, hou echter wel rekening met de maximale spanning die de uitgangen aan kunnen (5,5V).
Als je zeg 12V of 24 relais wilt gaan sturen heb je alsnog een transisor nodig of zoals al eerder is voor gesteld een ULN2803 of een van zijn broertje.

Misschien is het wat voor je...

Gegroet,
Blackdog

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
Arco

Special Member

...een serie i2c extenders zodat je tot 64 extra in/uitgangen kan gaan...

Kan nog wel verder ook, hoor... ;) (16 bit per expander)
Ik heb kortgeleden trouwens een andere handige i2c expander gevonden: de PCA9506. Geeft 40 extra i/o per chip...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 29 juli 2016 15:28:54 schreef Roland van Leusden:
http://www.learnerswings.com/2014/09/cascade-operation-of-two-74595-sh…

Meer heb je niet nodig. Wil je relais aansturen gebruik je achter de 74HC595 een ULN2803.

Het cascade gebruik van 595 en 165 ken ik. De ULN2803 kende ik nog niet. (Thx)

@ Blackdog
@ Arco

Ik ben met het i2c protocol bekend in zoverre dat je daar dus inderdaad meerdere (en zeer diverse) ic's kan aanhangen en deze individueel aanspreken.

De reden dat ik er niet mee begonnen ben is dat ik het simpel wilde houden. i2c is/lijkt niet zo moeilijk, maar het was toch al een stapje verder. Bovendien moet ik dan meteen alles via de arduino doen.
Moest ik komen vast te zitten om het werkende te krijgen, dan zou dit mijn 'jeugdig' enthousiasme nogal temperen en komt de kartonnen doos boven.