Driva LEDs med 74HC595 shift register

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
tobiasger
Inlägg: 26
Blev medlem: 1 augusti 2019, 20:51:25

Driva LEDs med 74HC595 shift register

Inlägg av tobiasger »

Jag försökte för några år sedan att bygga en MIDI-sequencer med hjälp av en Arduino Uno och diverse komponenter. Nu några år senare så har jag kvar kopplingsschema och Arduinon som jag använde med koden uppladdad, men jag har inte kvar själva källkoden. Så jag försöker nu att fräscha upp minnet kring hur jag byggde allt och på något sätt "reverse engineera" mitt egna projekt.

För att förstå vad jag tidigare gjort så håller jag nu på att gå igenom del för del av kretsen och bygga dessa delar isolerade på nytt på breadboard och parallellt med detta skriva kod. Jag håller nu på att kolla den del av kretsen som som styr LEDs. I originalkretsen som jag försöker återskapa så är det två daisy-chainade shift register av modell 74HC595 som styr 8 x 2 LEDs. När jag nu bygger det från scratch så använder jag bara ett shift register och åtta LEDs, men tanken är att det ska vara två st shift register senare. Här är kopplingsschemat för det jag gjort på breadboard:

Bild

Jag får logiken att fungera utan problem, speciellt med hjälp av biblioteket Shifty som gör det väldigt enkelt att skicka HIGH eller LOW till respektive LED. Ett litet mindre problem är dock att ljusstyrkan generellt blir svagare ju fler LEDs som är tända på samma gång. Jag har förstått att detta skulle kunna bero på att 74HC595 inte riktigt kan leverera tillräckligt med ström för LEDsen. Så det jag undrar är om det finns något sätt att komplettera kretsen för att få LEDsen att alltid lysa lika starkt? Eller finns det lättare sätt än att använda shift register för det jag vill göra?
Användarvisningsbild
Synesthesia
Inlägg: 591
Blev medlem: 22 januari 2010, 19:14:10
Ort: Mellan Göteborg och Kungsbacka

Re: Driva LEDs med 74HC595 shift register

Inlägg av Synesthesia »

Titta efter så det inte är drivspänningen som sjunker när du tänder fler lysdioder.
Annars finns det flera sätt att öka drivningen: man kan ha emitterföljare mellan, en NPN transistor som t.ex BC547, koppla basen till HC595:s utgång, emitter till lysdiod, kollektor till +5V, ett annat sätt är att koppla transistorer som du gjort i din solenoid-tråd (fast skyddsdioderna behöver du inte när du skall driva lysdioder istället för solenoider), eller du kan använda en drivkrets med flera drivare i som t.ex ULN2003 eller ULN2803.
tobiasger
Inlägg: 26
Blev medlem: 1 augusti 2019, 20:51:25

Re: Driva LEDs med 74HC595 shift register

Inlägg av tobiasger »

Hur kollar jag om det är drivspänningen som sjunker? Säkert dum fråga, men är verkligen nybörjare.

Att använda emitterföljare låter intressant. I fallet BC547, menar du då att använda en per LED, så det blir totalt 8 st då i det här fallet? Låter även intressant med drivkrets. Är det som flera emitterföljare i ett paket då?
Användarvisningsbild
Icecap
Inlägg: 26189
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Driva LEDs med 74HC595 shift register

Inlägg av Icecap »

Varje utgång ska ju klara MAX. 20mA. Då du inte skriver värdet på motståndarna är det omöjligt att konkludera något på den delen.

Om du "bara" ska se om de lyser eller inte, finns det effektiva LED som är mycket tydliga vid 3-5mA.

Emitterföljaren är en enkel men icke-optimal lösning. Bättre är att ha en 2N7000 per utgång, sourge till GND, gate till utgång och drain till ett motstånd o därifrån till LED som går vidare till VDD.

Drivkrets/drivkoppling är ett MÅSTE om du ska dra någon betydande ström till LEN.

Man mäter spänning med något instrument, ofta ett multimeter.
Biltema har till en skaplig peng.
H.O
Inlägg: 5729
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Driva LEDs med 74HC595 shift register

Inlägg av H.O »

Ja, värde på motstånd efterfrågas. Gärna också Vf eller åtminstånde färg på lysdioderna.

Varje utgång ska klara leverera 20mA men notera att max ström genom Vcc/GND är specad till 70mA (enligt ett datablad från TI jag precis kollade). Om du kör 20mA genom varje diod blir den totala strömmen mer än dubbelt av den tillåtna.

Notera även att drivförmågan skiljer mellan olika familjer av logikkretsar, du har skrivit 75HC595 i schemat så vi antar att det är just en HC du har.

Behöver du köra mer ström får man komplettera med extern MOSFET eller drivkrets enligt Icecaps inlägg. Alternativt finns det shiftregister med inbyggd buffert som kan sänka några hunda mA på utgång.
guckrum
Inlägg: 1703
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Driva LEDs med 74HC595 shift register

Inlägg av guckrum »

Synesthesias förslag om en ULN2803 är vägen jag skulle valt. En extra DIPkapsel med enkel pinout/kabeldragning och det är klart.
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32909
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Driva LEDs med 74HC595 shift register

Inlägg av HUGGBÄVERN »

En standarddrivkrets är ULN2004, vilken dock bara har sju steg, men ULN2803 har åtta.

Notera att det anges ofta hur mycket varje utgång kan driva (ULN2803 - 500mA) men max effekt för HELA kretsen begränsar drivförmågan (2.25W för ULN2803).

En enkel och billig variant är att använda typ CD4049/4050 för att driva lysdioder.
tobiasger
Inlägg: 26
Blev medlem: 1 augusti 2019, 20:51:25

Re: Driva LEDs med 74HC595 shift register

Inlägg av tobiasger »

Icecap skrev: 6 maj 2024, 04:21:23 Varje utgång ska ju klara MAX. 20mA. Då du inte skriver värdet på motståndarna är det omöjligt att konkludera något på den delen.
Jag har testat med både 1K, 220 ohm och inga motstånd alls (tillfälligt) för att se hur det påverkar ljusstyrkan. Styrkan blir ju självklart svagare ju högre motstånd jag testat med, men den relativa skillnaden i ljusstyrka beroende på antalet tända LEDs är konstant, dvs att en tänd LED lyser starkare än när jag har alla tända. Jag ser stegvis hur det för varje LED som tänds blir lite mindre och mindre ljusstyrka i alla LEDs. Så därför tänkte jag inte att motståndens värde var relevant just för det här problemet eftersom det är kvar oavsett vilken resistans jag testar. Tror jag kalkylerade att resistansen egentligen ska vara 100 ohm med hjälp av något verktyg på nätet (https://ledcalculator.net/#p=5&v=2.2&c=30&n=1&o=w), men utgick bara ifrån att det här problemet med olika ljusstyrka skulle kvarstå ändå, så inte bemödat mig med att gräva fram 100 ohm ännu. Men där kan jag ha jättefel så rätta mig gärna!
Icecap skrev: 6 maj 2024, 04:21:23 Emitterföljaren är en enkel men icke-optimal lösning. Bättre är att ha en 2N7000 per utgång, sourge till GND, gate till utgång och drain till ett motstånd o därifrån till LED som går vidare till VDD.
Varför är BC547 icke-optimal kontra 2N7000?
H.O skrev: 6 maj 2024, 07:02:31 Ja, värde på motstånd efterfrågas. Gärna också Vf eller åtminstånde färg på lysdioderna.
Jag kör diffus grön, 3 mm. Forward Voltage är min. 1.60V, typ. 2.20V och max 2.60V. Sen Forward Current ligger på 30 mA. Kör med dessa: https://www.tme.eu/se/details/ll-304gd2 ... uckylight/
Senast redigerad av tobiasger 6 maj 2024, 15:03:26, redigerad totalt 2 gånger.
Användarvisningsbild
Icecap
Inlägg: 26189
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Driva LEDs med 74HC595 shift register

Inlägg av Icecap »

Forward Current är 30mA MAX!

Det lägsta motstånd du får använda är på 680Ω.

En bipolar transistor SKA ha bas-motstånd medan en MOSFET (t.ex. 2N7000/2N7002) inte behöver det. Det sparar 8 komponenter o belaster inte shift-registret.
H.O
Inlägg: 5729
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Driva LEDs med 74HC595 shift register

Inlägg av H.O »

Det hela verkar konstigt, med 1k motstånd borde inte ljusstyrkan variera eftersom du ligger VÄL inom vad kretsen skall klara. Är det en 74HC595 från någon känd tillverkare eller något kinesiskt? Har du provat omvänd polaritet så kretsen får sänka strömmen istälet?

Jag är inte är med på vart Icecap får 680 Ohm ifrån.
Kretsen kan leverera 70mA totalt vilket ger 8,75mA per utgång, låt oss avrunda till 8.5mA.
Dioden har Vf på 1,6V-2,6V så vi har ett spänningsfall över resistorn på mellan 2,4V och 3,4V. Det ger en resistans på 280-400 Ohm.

Hur som helst, den där lysdioden är ju rätt "kass", endast 13mcd vid 20mA. Inga problem att hitta billiga gröna lysdioder som är 20, 50, 100ggr så effektiva för ungefär samma pris, t.ex: https://www.tme.eu/se/details/osg5ta39b ... ptosupply/ Om du inte sitter fast i valet av LED, prova en annan.
Mindmapper
Inlägg: 6463
Blev medlem: 31 augusti 2006, 16:42:43
Ort: Jamtland

Re: Driva LEDs med 74HC595 shift register

Inlägg av Mindmapper »

tobiasger skrev: 6 maj 2024, 14:50:29
Icecap skrev: 6 maj 2024, 04:21:23 Varje utgång ska ju klara MAX. 20mA. Då du inte skriver värdet på motståndarna är det omöjligt att konkludera något på den delen.
Jag har testat med både 1K, 220 ohm och inga motstånd alls (tillfälligt) för att se hur det påverkar ljusstyrkan. Styrkan blir ju självklart svagare ju högre motstånd jag testat med, men den relativa skillnaden i ljusstyrka beroende på antalet tända LEDs är konstant, dvs att en tänd LED lyser starkare än när jag har alla tända. Jag ser stegvis hur det för varje LED som tänds blir lite mindre och mindre ljusstyrka i alla LEDs. Så därför tänkte jag inte att motståndens värde var relevant just för det här problemet eftersom det är kvar oavsett vilken resistans jag testar. Tror jag kalkylerade att resistansen egentligen ska vara 100 ohm med hjälp av något verktyg på nätet (https://ledcalculator.net/#p=5&v=2.2&c=30&n=1&o=w), men utgick bara ifrån att det här problemet med olika ljusstyrka skulle kvarstå ändå, så inte bemödat mig med att gräva fram 100 ohm ännu. Men där kan jag ha jättefel så rätta mig gärna!
Icecap skrev: 6 maj 2024, 04:21:23 Emitterföljaren är en enkel men icke-optimal lösning. Bättre är att ha en 2N7000 per utgång, sourge till GND, gate till utgång och drain till ett motstånd o därifrån till LED som går vidare till VDD.
Varför är BC547 icke-optimal kontra 2N7000?
H.O skrev: 6 maj 2024, 07:02:31 Ja, värde på motstånd efterfrågas. Gärna också Vf eller åtminstånde färg på lysdioderna.
Jag kör diffus grön, 3 mm. Forward Voltage är min. 1.60V, typ. 2.20V och max 2.60V. Sen Forward Current ligger på 30 mA. Kör med dessa: https://www.tme.eu/se/details/ll-304gd2 ... uckylight/
Ett vanligt fel som får ljusstyrkan att variera med antalet tända LED, är att spara in på antalet resistorer. Har du använt en egen resistor för varje LED?
Har genom åren varit flera som tänker att man kan ha ett motstånd som flera LED får dela på. Så är inte fallet visar det sig.
Användarvisningsbild
pi314
Inlägg: 5983
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Driva LEDs med 74HC595 shift register

Inlägg av pi314 »

Båda borde fungera, men jag skulle ändå vända lysdioderna åt andra hållet och koppla motstånden till +5 volt.
Bl.a. för att utgångarna har något bättre drivförmåga mot jord än mot plus.

Vid 4,5 volt drivspänning driver "1" ut min 3,7 volt vid 6 mA. Dvs. 3,7 volt över LED + motstånd.
Vid 4,5 volt drivspänning driver "0" ut max 0,4 volt vid 6 mA. Dvs 4,1 volt över LED + motstånd.

I specen är utgångarnas drivförmåga specad vid 4,0 till 7,8 mA, beroende på drivspänning (4,5 - 6,0 volt).

Om man vill hålla sig inom det, med marginal, så är ca 1 kohm lämpligt seriemotstånd. Då blir strömmen ca 3 mA, vilket är väl under 6 mA.

Jag utgår från att inte 5 volt sjunker när alla lysdioder är tända.

Om det ändå blir skillnad beroende på hur många lysdioder som är tända så behövs kanske en separat drivkrets?

SN74HC595 spec.
https://www.ti.com/lit/ds/symlink/sn74h ... FSN74HC595

tobiasger
Inlägg: 26
Blev medlem: 1 augusti 2019, 20:51:25

Re: Driva LEDs med 74HC595 shift register

Inlägg av tobiasger »

Tack för alla svar! Mycket matnyttig info som jag får testa mig fram med.
pi314 skrev: 6 maj 2024, 20:39:53 Båda borde fungera, men jag skulle ändå vända lysdioderna åt andra hållet och koppla motstånden till +5 volt.
Bl.a. för att utgångarna har något bättre drivförmåga mot jord än mot plus.
Dum fråga från min sida, men försöker lära mig "as I go": är det något annat i kopplingsschemat ovan som behöver korrigeras annat än att motstånden ska gå till +5V och katoden på LEDs till utgångarna, om jag tolkar det rätt?
Mindmapper skrev: 6 maj 2024, 20:33:21 Ett vanligt fel som får ljusstyrkan att variera med antalet tända LED, är att spara in på antalet resistorer. Har du använt en egen resistor för varje LED?
Har genom åren varit flera som tänker att man kan ha ett motstånd som flera LED får dela på. Så är inte fallet visar det sig.
Jag kör ett motstånd per LED.
Senast redigerad av tobiasger 7 maj 2024, 21:33:44, redigerad totalt 1 gång.
Användarvisningsbild
pi314
Inlägg: 5983
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Driva LEDs med 74HC595 shift register

Inlägg av pi314 »

tobiasger:

Det räcker så. Testa först med 1K-motstånd, för då är du väl inom marginalen för den strömmen som dom anger utspänningen på utgången vid "0" ut vid. Då "borde" inte LEDarna påverka varandra.

Sedan får du justera programvaran så att "0" ut motsvarar tänd LED och "1" ut motsvarar släckt LED, dvs. invertera.

tobiasger
Inlägg: 26
Blev medlem: 1 augusti 2019, 20:51:25

Re: Driva LEDs med 74HC595 shift register

Inlägg av tobiasger »

pi314 skrev: 7 maj 2024, 21:29:26 tobiasger:

Det räcker så. Testa först med 1K-motstånd, för då är du väl inom marginalen för den strömmen som dom anger utspänningen på utgången vid "0" ut vid. Då "borde" inte LEDarna påverka varandra.

Sedan får du justera programvaran så att "0" ut motsvarar tänd LED och "1" ut motsvarar släckt LED, dvs. invertera.

Hehe. Jag blev lite konfunderad först när allt betedde sig tvärtom, men kom på sedan att det då blir LOW istället för HIGH i koden. Får fixa det senare.

Ska ner i källaren och ta fram 1K men provade med 220 ohm nu och då blev det dessvärre ingen större skillnad vad jag kunde se. Jag kanske iofs överdriver skillnaden i ljusstyrka då det är marginell skillnad, men ändå märkbar om man är uppmärksam. Så är väl egentligen mer än störig grej än något annat. Ska se vad skillnaden blir med 1K!
Skriv svar