Guten Abend,
gibt es eine Möglichkeit die FastLED-Lib für den ATTiny84 nutzbar zu machen?
Thx
Guten Abend,
gibt es eine Möglichkeit die FastLED-Lib für den ATTiny84 nutzbar zu machen?
Thx
Was geht genau nicht? Bitte kompletten Errorlog senden. Kann mir jetzt eigentlich so nicht vorstellen wieso das Probleme machen soll. Ist doch nichts anderes als Bitbanging. Oder hast du deinen Attiny84 mit weniger als 4Mhz am laufen? Bin mir jetzt nicht ganz sicher, ob da oder bei 1-2MHz die Grenze lag.
Offiziell werden in dieser Liga nur die Gemma / Flora / Trinket Boards unterstuetzt und die haben alle einen ATTiny85 drauf, welcher mit 8/16 MHz getaktet ist.
Grundsaetzlich sehe ich kein Problem, einen ATTiny84 zu verwenden. Aber der Speed muss stimmen. Ich habe im Hinterkopf, dass manche clockless LED Controller, wie z.B. WS2812 mindestens 4 (oder waren es 8?) MHz Prozessortakt brauchen, damit man deren enges Timing sicher einhalten kann. Aber Sschulteworter hat damit sicher praktische Erfahrung, ich nicht.
Probiere es mal mit der maximal moeglichen Geschwindigkeit fuer den ATTiny oder nimm LED Controller mit Data- und Clockline, dann sollte die Prozessorgeschwindigkeit egal sein.
Durch den kleinen RAM kann man damit natuerlich nicht viele LEDs ansteuern, ich glaube Mark hat mal geschrieben, er haette mit ein paar Tricks 100 Stueck an einem ATTiny85 gehabt, aber das ist die absolute Obergrenze.
Beste Gruesse
Helmuth
Sketch:
#include "FastLED.h"
#define NUM_LEDS 5
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
int valAct, valOld;
void setup() {
FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
valAct = analogRead(4);
if((float)valOld/(float)valAct <= 0.3)
{
moveForward();
unsigned long test = 0x00FFFFFF;
test*= ((map(valAct, 0, 1023, 0, 100))/100.0);
int blue = test;
int green = (test >> 8);
int red = (test >> 16);
leds[0].green = green;
leds[0].red = red;
leds[0].blue = blue;
FastLED.show();
}
valOld = valAct;
//delay(64);
}
//Alle Leds auf die Farbe des Vorgängers setzen
void moveForward()
{
for(int i = NUM_LEDS - 1; i >= 1 ; i--)
{
leds[i] = leds[i - 1];
}
}
ATTiny84V mit internen 8MHz. Später hänge ich da n 10MHz Quarz dran.
Fehlermeldung:
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h: In static member function 'static void ClocklessController_Trinket<DATA_PIN, T1, T2, T3, RGB_ORDER, WAIT_TIME>::showRGBInternal(int, bool, int, uint8_t, const byte*) [with unsigned char DATA_PIN = 3u, int T1 = 2, int T2 = 5, int T3 = 3, EOrder RGB_ORDER = RGB, int WAIT_TIME = 50]':
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:178: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:182: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:182: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:182: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:182: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:182: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:182: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:183: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:184: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:185: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:186: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:187: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:188: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:188: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:188: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:188: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:188: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:190: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:203: error: impossible constraint in 'asm'
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/clockless_trinket.h:204: error: impossible constraint in 'asm'
Probier es mal mit dem aktuellen FastLED Branch: https://github.com/FastLED/FastLED/tree/FastLED2.1
Es gibt wohl auch noch Probleme mit der Arduino 1.5.7+, schau mal, ob das Problem mit neuerer Lib und aelterer IDE bestehen bleibt.
Ok, das funktioniert mittlerweile, danke
Nun habe ich aber das Problem, dass sobald ich das Delay() oder das Millis() auskommentiere,
dass es sich dann nicht mehr kompillieren lässt o_O.
Fehlermeldung:
c:/program files (x86)/arduino 1.0.5/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn84.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/program files (x86)/arduino 1.0.5/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o)
Der Blink-Sketch ausm Basic-Ordner läuft jedenfalls perfekt.
Thx
Okay, sehe du hast nur die 1.05 drauf. Kannst du mal die Fehlerausgabe erweitern? Komisch dass der Sketch meckert sobald delay oder millis raus sind.
10MHz Quarz wofür? Braucht es der Attiny? 8MHz interner Quarz des Attiny84 ist voll ausreichend für die WS2812B bzgl. Timings.
Ne, der meckert, wenn die nicht kommentiert sind und zwar nur wenn die Lib eingebunden ist.
Habe mich da wohl falsch ausgedrückt
Fehlermeldung:
Den 10MHz Quarz will ich draufmachen, weill der 84er ein Audio Signal auswerten soll
8MHz reichen zwar auch, aber ein wenig schneller ist ja auch nicht schlimm und ohne Quarz
habe ich sone leere Stelle auf der Platine
Edit:
Das ist doch zum Ratten melken ey, das hier lässt sich auch nicht kompillieren:
#include "FastLED.h"
#define NUM_LEDS 5
#define DATA_PIN 7
CRGB leds[NUM_LEDS];
int valAct, valOld;
int moveSpeed;
float valMid;
unsigned long test;
void setup() {
FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
valAct = analogRead(4);
//moveSpeed = map(analogRead(3), 0, 1023, 32, 512);
float per = (float)(valAct - valMid)/valMid;
if(per <= 0.6 && per > 0)
{
moveForward();
unsigned long test = 0x00FFFFFF*((map(valAct, 0, 1023, 0, 100))/100.0);
leds[0].green = test;
leds[0].red = (test >> 8);
leds[0].blue = (test >> 16);
FastLED.show();
}
valMid = (valAct + valOld)*0.5;
valOld = valAct;
}
//Alle Leds auf die Farbe des Vorgängers setzen
void moveForward()
{
for(int i = NUM_LEDS - 1; i >= 1 ; i--)
{
leds[i] = leds[i - 1];
}
}
Sobald man "float per" raus nimmt oder auf nen festen Wert setzt gehts aber wieder -.-
Fehlermeldung:
c:/program files (x86)/arduino 1.0.5/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn84.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/program files (x86)/arduino 1.0.5/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o)
sketch_Sound3.cpp.o: In function `PixelController<(EOrder)10>::init_binary_dithering()':
C:\Users\Adrian\Documents\Arduino\libraries\FastLED/controller.h:279: relocation truncated to fit: R_AVR_13_PCREL against symbol `__divmodhi4' defined in .text.libgcc section in c:/program files (x86)/arduino 1.0.5/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_divmodhi4.o)
Die Compilermeldung sagt mir nichts, aber: Wenn Du das Problem schon soweit eingekreit hast, dann benutze doch einfach Integer Mathe und keine haesslichen Floats.
Geht nebenbei auch deutlich schneller und macht den Code schoener.
Und bei nur 5 LEDs wuerde ich das Temporal Dithering ausschalten, weil sich mache LED Controller bei so vielen fps gern verschlucken. Im besonderen WS2812, da ist schon bei 400 fps Schluss, bei hoeheren Werten flackert die LED nur noch.
FastLED.setDither( 0 );
Gruss
Helmuth
An Integer Mathe habe ich auch schon gedacht, das funktiniert ebenfalls nicht.
Das is extrem seltsam, weil der andere Teil des Codes welcher beides beinhaltet sich ja kompillieren lässt.
Wie gesagt, dass liegt nur an der Lib sobald ich alles raushaue was damit zu tun hat lässt sich alles ohne probleme kompilieren.
Bitte poste das mal mit komplettem Code + kompletter Fehlermeldung + verwendeter IDE und Lib Version + verwendetem MC und verwendeter Taktfrequenz hier:
https://plus.google.com/communities/109127054924227823508
Danke,
Helmuth
Alles klar, werde ich machen.
Ich werde vorher nurnochmal etwas versuchen.
Ich habe mal versucht das Ganze mit der Adafruit Lib zu machen,
das geht ebenfalls nicht -> selbes Problem.
Lad mir jetzt die IDE neu runter und versuchs nochmal.
Mit IDE 1.0.6 habe ich noch nie Probleme gehabt, allerdings, wie gesagt, auch nichts mit ATTinys gemacht.
Habe ich gerade probiert geht auch nicht
Ich stell das jetzt mal in die Community.
Thx für die Hilfe
Guten Abend
Ich habe es nun hinbekommen.
Nach dem ich im Internet nach einer alternative zur FastLED und Adafruit Lib gesucht habe
bin ich nun fündig geworden:
Gefunden habe ich sie hier:
http://www.mikrocontroller.net/articles/WS2812_Ansteuerung
Name: Light weight WS2812 Library
Soll laut dem Artikel mit allen AVRs von 4 bis 20MHz (also auch dem ATTiny84V :D) kompatibel sein.
Die Lib ist auch deutlich kleiner als die anderen beiden ;).
Code:
#include <WS2812.h>
#define F_CPU 8000000L
#define PIN_DATA 7
#define MAX_LEDS 5
int valAct, valOld, moveSpeed;
float valMid, percent;
unsigned long test;
WS2812 LED(MAX_LEDS);
cRGB ledData[MAX_LEDS];
void setup()
{
LED.setOutput(7);
LED.setColorOrderRGB();
}
void loop()
{
valAct = analogRead(4);
moveSpeed = map(analogRead(3), 0, 1023, 32, 512);
percent = valMid/(valAct - valMid);
if(percent <= 0.45 && percent > 0)
{
moveForward();
//Farbe der ersten LED berechnen
unsigned long rgb = 0x00FFFFFF*(map(valAct, 0, 1023, 0, 100)/100.0);
ledData[0].r = rgb&0x000000FF;
ledData[0].g = ((rgb&0x0000FF00) >> 8);
ledData[0].b = ((rgb&0x00FF0000) >> 16);
//Farben anzeigen
showLEDs();
}
//Mittelwert bilden und den alten Wert auf den neuen setzen
valMid = (valAct + valOld)*0.5;
valOld = valAct;
}
//Alle Leds auf die Farbe des Vorgängers setzen
void moveForward()
{
for(int i = MAX_LEDS - 1; i >= 1 ; i--)
{
ledData[i].r = ledData[i - 1].r;
ledData[i].g = ledData[i - 1].g;
ledData[i].b = ledData[i - 1].b;
}
}
void showLEDs()
{
for(int i = 0; i < MAX_LEDS; i++)
{
LED.set_crgb_at(i, ledData[i]);
}
LED.sync(); //Farben anzeigen
}