Adafruit_NeoPixel.h auf Attiny betreiben

Hallo,

ich stehe gerade vor einem Problem und hoffe auf eure Unterstützung. Vor ein paar Tagen hatte ich es geschafft, meinen Code erfolgreich auf einen Attiny zu laden, um einen RGB-LED-Streifen zu steuern. Allerdings funktioniert es nun leider nicht mehr.

Ich habe den Attiny mit einer internen Taktfrequenz von 8 MHz betrieben. Möglicherweise habe ich versehentlich einen Fehler in meinem Code eingeführt. Ich wäre sehr dankbar für eure Hilfe bei der Fehlerbehebung.

Hier ist ein Ausschnitt meines Codes:

#include <Adafruit_NeoPixel.h>

#define PIN            3
#define NUMPIXELS      28
#define BRIGHTNESS     50

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.setBrightness(BRIGHTNESS);
}

void loop() {
  RunningLights(255, 0, 0, 10000, false, 70);       
    
  
}

void RunningLights(byte red, byte green, byte blue, int duration, bool reverse, int speed) {
  int Position = 0;
  int increment = reverse ? 1 : -1;

  unsigned long startTime = millis();  

  while (millis() - startTime < duration) {
    Position += increment;
    for (int i = 0; i < NUMPIXELS; i++) {
      setPixel(i, ((sin(i + Position) * 127 + 128) / 255) * red,
                    ((sin(i + Position) * 127 + 128) / 255) * green,
                    ((sin(i + Position) * 127 + 128) / 255) * blue);
    }

    showStrip();
    delay(speed);  // Geschwindigkeit der Animation
  }
}

void setPixel(int Pixel, byte red, byte green, byte blue) {
  strip.setPixelColor(Pixel, strip.Color(red, green, blue));
}

void showStrip() {
  strip.show();
}

Wenn jemand eine Idee hat, woran es liegen könnte, oder Tipps zur Fehlerbehebung hat, wäre ich sehr dankbar!

Was geht denn nicht?

Der Stripe bleibt komplett dunkel. Habe mit einem Multimeter Plus und Minus direkt am Stripe gemessen und es wird ~5 Volt angezeigt. Also, an der Spannung kann es nicht liegen. Ich vermute ein Problem am Datenpin. Ich wüsste nur nicht, was dort falsch sein kann? Der Code/Stripe am Arduino direkt angeschlossen funktioniert.
8 MHZ müsste doch richtig sein, oder? Wobei ich es auch schon mit 16MHZ versucht habe.

In manchen Codes stand folgende Zeilen

#if defined (__AVR_ATtiny85__)
	if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif

Ein Widerstand am erstem zwischen ATtiny und Dataleitung vorhanden?
Soll zw.150 & 300 Ohm sein. Such danach hier im Forum. Meistens bei falscher Handhabung geht erste Chip, LED defekt.

Welchen ATtiny hast Du?
Wieviel RAM hat dieser ATtiny?
Wieviel RAM brauchen 28 Neopixel?

Grüße Uwe

Ich würde das als Wechselspannung ansehen. Das ist dann def. falsch.
Damit machst du etwas kaputt.

:wink: Ich wurde das als "um die" 5V deuten, ist zwa komplett falsch und zeigt das der Jemand ist ohne Kenntnisse.

Ich verwende einen ATTINY 45V.
https://www.reichelt.de/8-bit-attiny-avr-risc-mikrocontroller-4-kb-10-mhz-pdip-8-attiny-45v-10pu-p68163.html?search=attiny45

Es sind 5Volt Gleichstrom.

Ich denke, dass es am Datenpin liegt. Ich habe gerade folgendes festgestellt. Wenn ich einen 300Ohm Widerstand verwende funktioniert der Stripe auch nicht am Arduino. Erst unter einem Wert von 200Ohm Widerstand geht es wieder.
Evtl. ist der Verbindung für die Datenleitung zu schlecht.

Wie lang ist denn die Datenleitung?

Gruß Tommy

ca. 10cm

Da ist der genaue Widerstandswert unkritisch. Evtl. ist die erste LED schon geschädigt.
Wenn der MC sendet, die LEDs aber noch keine Versorgung haben,#

Gruß Tommy

Und bei dem ATtiny ist das mit 256 Byte Ram schon sehr kritisch bis nicht ausreichend.
Du brauchst für die 28 Leds x 3 Byte schon fest 84 Byte. Da bleibt für den Rest des Programmes nicht mehr viel übrig. Was sagt denn die IDE bei dynamischen Speicher ?

Ohne Optiboot passt drauf :wink:

Der Sketch verwendet 3920 Bytes (95%) des Programmspeicherplatzes. Das Maximum sind 4096 Bytes.
Globale Variablen verwenden 41 Bytes (16%) des dynamischen Speichers, 215 Bytes für lokale Variablen verbleiben. Das Maximum sind 256 Bytes.

Ja, wir wissen ja nix. :wink:
Es wird der einzelne Chip sein, vermutlich ohne Optiboot.
Und wir wissen nicht, was der noch im Betrieb braucht.
Aber evtl. reicht das Ram ja aus.

Um Speicher zu sparen, habe ich damals beim ATTiny84, eine andere Bibliothek als die von Adafruit genutzt.

<tinyNeoPixel_Static.h> // ATTiny WS2812b Bibliothek // https://github.com/SpenceKonde/megaTinyCore/tree/master/megaavr/libraries/tinyNeoPixel_Static

Vielleicht hilft dir dies.

Es liegt an der Anzahl der NUMPIXLS.
Ab 24 funktioniert der Code auf einem Attiny.

Hat jemand mir eine Erklärung?
Danke.

Die Antwort findest Du wohl in Beitrag #12.

Die Antwort kam ja schon von @Kai-R .
Aber zur Ergänzung?: lies einfach unsere Antworten genau durch.

Wo zu :sweat_smile:
Wird sehr oft gedacht, sollen die doch schreiben.

Na dann brauchen wir das Forum bald nicht mehr, wenn keiner mehr liest.

Nee soweit will ich nicht gehen.