Vorschlag:
setup() und loop() weg.
Stattdessen main()
Verringert die Schachtelungstiefe.
Dann ist auch die Timer ISR weg.
Also weniger Stackbedarf.
Und ein paar Byte an globalen Variablen sparts auch noch.
Für die Zeitsteuerung muss man sich dann was anderes einfallen lassen...
z.B. util/delay.h
Oder Hardware Timer pollen
Mit dieser Variante "main" statt "setup/loop" habe ich in diesem Fall schon jongliert. Wenn man wegen dem dadurch fehlenden Timer die notwendige "init" hinzufügt bleibt das alles gleich und man gewinnt nichts. In der Tat müsste man den Timer in abgespeckter Version manuell einrichten, weil "init" intern noch die zusätzlichen Variablen für "micros" bedient. Oder das ganze direkt in Assembler schreiben - würde noch einiges mehr an Platz schaffen.
Aber ich denke, das würde hier im Moment ein wenig zu weit führen. Wenn man wie oben die 17 LEDs mit der "normalen" Variante bedient sieht es schon recht gut und wenig langweilig aus. Ein zyklisches Verschieben der Zeitwerte kann man gar nicht wirklich erkennen. Ich bin mir recht unsicher, ob der zusätzliche Aufwand an dieser Stelle nötig ist.
Hilfe!
Wenn ich geahnt hätte, dass ihr alle so viel Hirnschmalz für mein Problem verbraucht, hätte ich niemals nach Lösungsvorsachläge gefragt. Ihr seid ja famos.
Danke euch allen!
Ich will ja nicht mutwillig was in den 2313 reinstopfen, war halt noch da, 4313 eben nicht mehr.
Aber gelernt habe ich trotzdem, glaube ich.
Der Preis für den 4313 liegt grad bei 1,60 Euro/ Stück. Durchaus noch leistbar für mich.
@RudiDL5 (oder falls jemand schneller als RudiDL5 ist):
doch noch eine Frage:
DDRD = 0b01111111;
DDRA = 0b00000011;
DDRB = 0b11111111;
bedeutet was?
Kann ich da für zukünftige Projekte etwas mit anfangen?
Scheint mir ja wichtig zu sein.
schon jetzt Danke für die Auskunft.
ich guck schon die ganze Zeit, wie die LEDs an und aus gehen, lustig durcheinander und frage mich ernsthaft: wieso? und such im Sketch, finde aber kein Zufallgedöns.
Also frage ich.
ist hier Magie im Spiel?
@Combie:
jetzt mal mit dem weiter untenstehenden Multiplikator gespielt, da ging mir doch ein Lichtlein auf.
nicht wirklich Zufall. Tipp angekommen.
aber magisch ist es trotzdem ( O-Ton Neu-Flötzinger).
Damit es nicht langweilig wird, möchte ich mal eben an die Maximalströme erinnern.
Da gibts auch Grenzen.
Nicht nur für jeden Pin, sondern auch für jeden Port und auch für den gesamten Chip.
Bei 20mA pro LED läuft das schon reichlich aus dem Ruder, nehme ich mal an.
... mal eben im Umzugs-Stress zwischen den Kartons hervorschaue ...
Bei 20 mA je LED würde sich der 2313 im Extremfall wahrscheinlich in Rauch auflösen - aber genau aus diesem Grund habe ich jeder LED (siehe oben) einen 1 kOhm Widerstand gegönnt. Somit schwankt der Stromverbrauch zwischen minimal 5 mA und maximal 85 mA für 17 Leuchtdioden. Als LEDs habe ich die kleinen 3mm-Dinger Rot/Gelb/Grün eingesetzt, die bei 5 mA noch ausreichend gut leuchten. Sollte man aber mehr Lichausbeute wünschen (brauchen) wäre jeder Kanal separat zu verstärken.
keine Sorge Combie, der Breadboard Aufbau hat schon die auch später auf der Platine verwendenen ULN 28xx am Start.
Läuft konstant, quasi ohne Störung über externes Netzteil.
Hochinteressant ... und gleichzeitig ärgerlich wenn man feststellt, was für faule Eier man sich bei gedankenlosem Copy&Paste ins Nest holen kann! Die ganze Zeit über brodelte es im Hinterkopf, was diese übernommene While-Schleife eigentlich bewirken soll?! Als ich mir gerade meine alten Sketches ansah, bin ich über diesen Bock gestolpert: Die ganze Konstruktion aus dem Ursprungs-Sketch ist m.E. "falsch herum" und die loop() kann noch weiter vereinfacht werden:
Test-Ergebnis: Die LEDs blinken genau so lustig wie in der ersten Version, identische Muster, man spart noch mal knapp 60 Byte Flash, die loop() wird übersichtlicher, ungeprüftes Copy&Paste macht einem das Leben schwerer als notwendig...
Beste Grüße, nächste Tage ist auf jeden Fall Umzug auf dem Programm
Rudi