Moin,
Ich verwende das was ich angehängt habe.
(Habe ich hier von https://github.com/cpldcpu/light_ws2812)
Setzte MAXPIX auf 128.
Alles gut. Es leuchtet ein schöner Regenbogen.
Setze ich allerdings MAXPIX auf 129 geht es nicht.
Der Streifen ist aus.
Möchte allerdings gerne 300 LEDs ansteuern.
Wieso funktioniert das nicht? Die Datentypen sind doch alle groß genug
oder?
Weitere Infos:
Alle LEDs funktionieren, habe mit einer billigen Testfunktion alle
ansteuern können.
Mir ist allerdings die Logik einen Regenbogen selbst zu machen noch zu
hoch.... Deswegen wollte ich auf etwas fertiges zurück greifen.
Ich hoffe ihr könnt mir helfen.
Gruß
Wolfsente
Auf die Schnelle sehe ich den Fehler nicht, aber ich sehe schon mal,
dass MAXPIX nicht grösser als 255 sein darf, ansonsten überläuft eine
Zählvariable in "Rainbow.c".
Am besten grenzt Du das Problem mal ein wenig ein mithilfe des
Debuggers. Also ob z.B. der Regenbogen richtig generiert wird, oder ob
irgendwo der Speicher (RAM) überläuft...
Johnny B. schrieb:> Auf die Schnelle sehe ich den Fehler nicht, aber ich sehe schon mal,> dass MAXPIX nicht grösser als 255 sein darf, ansonsten überläuft eine> Zählvariable in "Rainbow.c".
Das wäre ja nur die Varibale i. Die müsste dann ja nur auf uint16_t
gemacht werden. Allerdings 2 mal, sie wird komischerweise 2 mal
angelegt.
Aber bei 129 sollte ja noch nix sein.
Dachte erst das er bei #define ein signed Integer macht aber:
1
#include <avr/io.h>
2
#define maxpix 200
3
4
int main(void)
5
{
6
uint8_t i,k;
7
while(1)
8
{
9
for(i=maxpix;i>0;i--)
10
{
11
k++;
12
}
13
14
}
15
}
habe ich mir das i mit Watch im Simulator angeguckt, da steht das der
Wert 200 ist und damit kein minus Wert ist.
Aus versehen zu früh losgeschickt, nu werdens halt 2 Posts
Johnny B. schrieb:> Am besten grenzt Du das Problem mal ein wenig ein mithilfe des> Debuggers. Also ob z.B. der Regenbogen richtig generiert wird, oder ob> irgendwo der Speicher (RAM) überläuft...
Habe dies auf ein Arduino Nano draufgespielt. Da kann ich leider nicht
so wirklich debuggen...
Wolfsente schrieb:> Habe dies auf ein Arduino Nano draufgespielt. Da kann ich leider nicht> so wirklich debuggen...
Dan hast du trotzdem noch möglichkeiten um den Fehler einzukreisen:
Wolfsente schrieb:> Setze ich allerdings MAXPIX auf 129 geht es nicht.> Der Streifen ist aus.
Was funktioniert den noch? hast du einen KO oder LA um die Datenleitung
anzuschauen?
ist dauerhaft ein zustand low/high? oder werden Daten geschrieben und es
kommt nie zum reset (50us low).
ich kenne mich mit Arduino null aus, aber das Board hat bestimmt einen
RS232 Ausgang. Überprüfe die Zählschlaufen in dem du dir die Werte über
RS232 ausgiebst. Eine nach der anderen.
So kannst du eingrenzen, wo es hängt.
Ich hätte an Deiner Stelle auch einfach das getan, was gismi
vorgeschlagen hat: Mir zum debuggen einfach die Werte über USB bzw. den
UART ausgeben. Auf diese Weise wärest Du recht schnell auf das Problem
gestossen.
Das Problem liegt letztlich darin, dass der Wert "FADE" im jetzigen
Zustand beim Übergang von 128 zu 129 von 1 zu 0 wechselt, und der Code
schlicht nicht funktioniert, wenn FADE 0 ist.
Das scheint allerdings nur an dämlichen #defines zu liegen - denn im
jetzigen Zustand wird FADE vom Präprozessor durch
256/129/2
ersetzt - und nicht, wie es eigentlich sein sollte, durch
256/(129/2)
Die Lösung liegt also einfach darin, die Definitionen von COLORLENGTH
und FADE in Klammern zu setzen:
#define COLORLENGTH (MAXPIX/2)
#define FADE (256/COLORLENGTH)
Michael .. schrieb:> Was funktioniert den noch? hast du einen KO oder LA um die Datenleitung> anzuschauen?> ist dauerhaft ein zustand low/high? oder werden Daten geschrieben und es> kommt nie zum reset (50us low).
Ich werde mir heute Abend ein Oszilloskop ausleihen, dann werde ich mir
das angucken.
Weiss allerdings nicht was du mit KO meinst. LA meinst du ein
Logikanalyzer?
Michael .. schrieb:> ich kenne mich mit Arduino null aus, aber das Board hat bestimmt einen> RS232 Ausgang. Überprüfe die Zählschlaufen in dem du dir die Werte über> RS232 ausgiebst. Eine nach der anderen.> So kannst du eingrenzen, wo es hängt.
Ich glaub das könnte ich hinkriegen. Ist ja per USB mit dem PC
verbunden.
Joachim S. schrieb:> ...Auf diese Weise wärest Du recht schnell auf das Problem> gestossen.>> Das Problem liegt letztlich darin, dass der Wert "FADE" im jetzigen> Zustand beim Übergang von 128 zu 129 von 1 zu 0 wechselt, und der Code> schlicht nicht funktioniert, wenn FADE 0 ist.> Das scheint allerdings nur an dämlichen #defines zu liegen - denn im> jetzigen Zustand wird FADE vom Präprozessor durch> 256/129/2> ersetzt - und nicht, wie es eigentlich sein sollte, durch> 256/(129/2)>> Die Lösung liegt also einfach darin, die Definitionen von COLORLENGTH> und FADE in Klammern zu setzen:> #define COLORLENGTH (MAXPIX/2)> #define FADE (256/COLORLENGTH)
Oha ich glaub das hätte ich nicht so schnell entdeckt wie du glaubst :D
Ich werde das heute Abend mal ausprobieren und falls es immer noch
nicht geht, die Infos liefern wie du und gismi mir geschildert haben.
Vllt. krieg ichs dann ja selbst raus.
Vielen Dank schonmal!
Wolfsente schrieb:> Weiss allerdings nicht was du mit KO meinst. LA meinst du ein> Logikanalyzer?
KO : Kathodenstrahloszilloskop oder Oszilloskop
LA hast du richtig verstanden
Horst schrieb:> Welchen Prozessor benutzt Du und wie voll ist Dein Speicher nach> dem> compilieren?
Program Memory Usage : 816 bytes 2,5 % Full
Data Memory Usage : 834 bytes 40,7 % Full
ATmega328
Aber das ist in Ordnung mehr soll das Ding gar nicht machen :D
Vielen Dank an alle! Hat so super funktioniert!
Habe den Code mal angehangen.