Arduino en shiftregisters

Beste mede knutselaars,

Ik ben nieuw hier op het forum maar niet met programmeren en de Arduino, ik val meteen met de deur in huis.

Ik ben de laatste tijd bezig om meer outputs te creëren met shiftregisters (74hc595) dit werkt dan ook.

1 shift stuurt de lcd-1602 aan, en 2 andere shifts 16 I/0

Er zit nog verder een RTC1302 en een 433mhz aangeknoopt aan de uno, alles werkt via de ingestelde alarm tijden.

Maar nu zit ik met het volgende qua vraag/hulp.

Probleem 1 : na de loop met ingestelde alarmen die goed functioneren loopt de tijd vrolijk door zonder problemen. Maar af en toe begint de cursor te blinken op het lcd scherm.

Wie kan mij weg wijs maken in me eigen code, zie ik iets over het hoofd? of zit het in de hardware ?

Aangezien mijn code langer is dan toegestaan qua max 9000char heb ik hier bij de link van mijn github.

Ik ben ook daar pas gestart dus er komt nog verbetering :smiley:

Alvast bedankt voor de komende feedback.

Bij dit soort problemen denk ik meteen aan de voeding: is die sterk en stabiel genoeg?

Wordt het display gevoed vanuit de Arduino? Dat is sowieso af te raden, eigen bedrading vanuit de voeding is wel het minste.

De oorzaak kan liggen in spikes op de voedingsspanning. Dat kun je tegengaan door vlakbij dingen als het display, de schuifregisters, de RTC break-out en de 433MHz-module een elco'tje van pakweg 10 µF te plaatsen, én een (liefst keramische) condensator van 0.01 tot 0.1 µF direct op die aansluitingen (dus met zo kort mogelijke draden, bij de IC's er letterlijk bovenop!).

Aangezien mijn code langer is dan toegestaan

Dat is geen wonder, je code is bijzonder inefficiënt opgebouwd. Maar dat is van later zorg, eerst die bug maar eens fixen. ;-)

djquickland: fritzing layout.png

Oh-oh. Jouw fritzing kunstwerk is een groot voorbeeld dat de reden voor de haat tegen dat programma voedt. Het programma zelf is zo slecht nog niet, maar wel hoe het toegepast word. Ongetwijfeld heb je er veel tijd in gestopt en helpt het jou ook wel omdat je er zo lang mee bezig bent geweest. Maar voor iemand die eens met je mee wil kijken om je te helpen, is er bijna geen doorkomen aan.

Net zoals je een *.png kunt toevoegen aan je post, kun je ook een *.ino toevoegen en als je daarbij net zoals nu uitlegt dat het anders te groot is om in een code venster te tonen zal niemand daar een probleem mee hebben.

Problemen zoals beschreven door jou (na een tijdje gaat het fout), worden vaak veroorzaakt door gebrek aan geheugen (management). De Arduino heeft niet erg veel geheugen beschikbaar, en daar moet je dus wel rekening mee houden. Zorg er daarom voor dat je variabelen niet groter zijn dan wat je zult gaan gebruiken. Maar ook dat variabelen die niet veranderen geen variabelen zijn maar constanten. Een constante die je definieert in je sketch, neemt nagenoeg geen geheugen in, maar een variabele wel (want die moet bewerkt worden). Dus gebruik in dat geval een const in plaats van een int. En zorg bijvoorbeeld dat je variabelen die niet per se globaal moeten zijn, dat ook niet zijn. Ik weet niet of je dat al wist en dus ook gedaan hebt.

Op Github staan twee sketches. Naar welke zal ik kijken ?
Gebruik je de “RemoteSwitch” library of the “RCSwitch” library ?
Kun je aangeven waar je die libraries vandaan hebt gehaald en ook waar je de LiquidCrystal_SR library vandaan hebt ?

Er zijn ontkoppelingscondensators nodig op de GND en 5V bij de shift registers.
Kijk ook goed naar de draden van de GND en de 5V die van de Arduino naar het breadboard gaan. De achtergrondverlichting van het display vraagt stroom, die kan het voltage op het breadboard verlagen als de draden geen goede verbinding maken.

Ik denk dat je beter eerst aan ons had kunnen vragen hoe je dit project kon maken.
Je gebruikt nu een LiquidCrystal_SR library van 9 jaar oud, en waarvan niet duidelijk is of die werkt.
Met een I2C RTC (DS3231) en een I2C display en een NeoPixel ledstrip was het eenvoudiger geweest. Eventueel nog een I2C I/O expander er bij voor meer pinnen. Dan had je zelfs de leds en het display onafhankelijk van elkaar van alles tegelijkertijd kunnen laten doen.

Ik heb nog helemaal niet naar je listing gekeken, maar als er niets verandert op je scherm, hoef je die dus ook niet te updaten, scheelt tijd en misschien ook wel blinken.

Ten eerst bedankt voor jullie feedback.

Erik_Baas:
Bij dit soort problemen denk ik meteen aan de voeding: is die sterk en stabiel genoeg?

Wordt het display gevoed vanuit de Arduino? Dat is sowieso af te raden, eigen bedrading vanuit de voeding is wel het minste.

De oorzaak kan liggen in spikes op de voedingsspanning. Dat kun je tegengaan door vlakbij dingen als het display, de schuifregisters, de RTC break-out en de 433MHz-module een elco’tje van pakweg 10 µF te plaatsen, én een (liefst keramische) condensator van 0.01 tot 0.1 µF direct op die aansluitingen (dus met zo kort mogelijke draden, bij de IC’s er letterlijk bovenop!).
Dat is geen wonder, je code is bijzonder inefficiënt opgebouwd. Maar dat is van later zorg, eerst die bug maar eens fixen. :wink:

Dit had ik eigelijk al verwacht, ik wil weer te veel via de adruino zelf. Heb dit al aangepast en tot nu toe nergens last van.
Dat van die elco wist ik ergens in me achterhoofd die vangt de piekspanning op. Dat van die condensator wist ik niet dit ga ik ook maar eens erbij prikken.
en inefficiënt opgebouwd :slight_smile: als ik aan het schrijven ben dan maak ik het me makkelijk zonder na te denken hoe ik deze op dat moment heb opgebouwd ( grof,ruw ,makkelijk, knippen, plakken LOL), ik kan de het korter schrijven maar dat is een zorg voor later.

MAS3:
Oh-oh.
Jouw fritzing kunstwerk is een groot voorbeeld dat de reden voor de haat tegen dat programma voedt.
Het programma zelf is zo slecht nog niet, maar wel hoe het toegepast word.
Ongetwijfeld heb je er veel tijd in gestopt en helpt het jou ook wel omdat je er zo lang mee bezig bent geweest.
Maar voor iemand die eens met je mee wil kijken om je te helpen, is er bijna geen doorkomen aan.

Net zoals je een *.png kunt toevoegen aan je post, kun je ook een *.ino toevoegen en als je daarbij net zoals nu uitlegt dat het anders te groot is om in een code venster te tonen zal niemand daar een probleem mee hebben.

Problemen zoals beschreven door jou (na een tijdje gaat het fout), worden vaak veroorzaakt door gebrek aan geheugen (management).
De Arduino heeft niet erg veel geheugen beschikbaar, en daar moet je dus wel rekening mee houden.
Zorg er daarom voor dat je variabelen niet groter zijn dan wat je zult gaan gebruiken.
Maar ook dat variabelen die niet veranderen geen variabelen zijn maar constanten.
Een constante die je definieert in je sketch, neemt nagenoeg geen geheugen in, maar een variabele wel (want die moet bewerkt worden).
Dus gebruik in dat geval een const in plaats van een int.
En zorg bijvoorbeeld dat je variabelen die niet per se globaal moeten zijn, dat ook niet zijn.
Ik weet niet of je dat al wist en dus ook gedaan hebt.

Fritzing blijft toch het makkelijkste en het snelste, ben er mss 10 min mee bezig geweest :stuck_out_tongue:
De opzet is toch duidelijk of? tips hints altijd welkom of andere software.

Het is allemaal nieuw voor mij op het forum maar inderdaad had de .ino ook hier kunnen uppen, next time.

Zoals al uitgelegd is de sketch ruw grof makkelijk, mar inderdaad neemt veel space in beslag maar zit nog niet aan de max. heb de nodige kennis van c# java enz (software developer). het is niet meer dan normaal als ik alles werkend heb wat ik in me hoofd heb zitten dan is de code aan de beurt om alles te shorten en van een int een const en eventueel bool enz komt goed. :slight_smile:

Koepel:
Op Github staan twee sketches. Naar welke zal ik kijken ?
Gebruik je de “RemoteSwitch” library of the “RCSwitch” library ?
Kun je aangeven waar je die libraries vandaan hebt gehaald en ook waar je de LiquidCrystal_SR library vandaan hebt ?

Er zijn ontkoppelingscondensators nodig op de GND en 5V bij de shift registers.
Kijk ook goed naar de draden van de GND en de 5V die van de Arduino naar het breadboard gaan. De achtergrondverlichting van het display vraagt stroom, die kan het voltage op het breadboard verlagen als de draden geen goede verbinding maken.

Ik denk dat je beter eerst aan ons had kunnen vragen hoe je dit project kon maken.
Je gebruikt nu een LiquidCrystal_SR library van 9 jaar oud, en waarvan niet duidelijk is of die werkt.
Met een I2C RTC (DS3231) en een I2C display en een NeoPixel ledstrip was het eenvoudiger geweest. Eventueel nog een I2C I/O expander er bij voor meer pinnen. Dan had je zelfs de leds en het display onafhankelijk van elkaar van alles tegelijkertijd kunnen laten doen.

Als je nog zou willen kijken is de update sketch 1 de goeie.
De libraries heb ik overal en nergens vandaan. van github van arduino forums enz was even zoeken maar ze werken.
als je ze wilt hebben kan ik ze wel in me github gooien.
Dat van die elco’s is duidelijk en extra voeding is duidelijk en opgelost.
Ik weet dat er verschillende modules zijn om het allemaal te vermakelijken maar als je niet dat in huis hebt en je wilt een project maken dan moet je roeien met de riemen die je hebt toch?
En dat een library 9 jaar oud is maakt toch niet zo veel uit wel?
Ik pas regelmatig library’s aan naar eigen wens. Soms zijn de pins niet zoals ik wil, of is de max van iets niet helemaal als max geschreven. dus aanpassen tot het werkend is, voor elk probleem is een oplossing.

shooter:
Ik heb nog helemaal niet naar je listing gekeken, maar als er niets verandert op je scherm, hoef je die dus ook niet te updaten, scheelt tijd en misschien ook wel blinken.

Kan je dat eens uitleggen?
De vaste text hoeft niet telkens geupdate te worden.
De tijd daar in tegen weer wel.
Ben benieuwd.
Thanks mensen…