Go Down

Topic: led strip addressable (Read 4918 times) previous topic - next topic

contecavour

Uwe sin dall'inizio io ho parlato di ws2801, poi tu mi hai chiesto che libreria uso e io ho copiato il link e l'esempio da loro prodotto cosi come.
<Sotto per evitare fraintendimenti ho scritto infatti che io avendo il ws2801   ho sistemato il codice, mi sembra una procedura corretta.

Il prodotto è questo
http://www.ebay.com/itm/111044008934?item=111044008934&viewitem=&sspagename=ADME:X:AAQ:MOTORS:1123&vxp=mtr

Ma oltre a questo 5m ws2801 led digital strip,32pcs IC and 32pcs 5050 SMD RGB each meter, non dicono niente.

N

uwefed

Se guardi la foto vedi che vicino ai contatti, dove puoi tagliare la striscia é scritto OUT e IN. Devi collegare il lato IN al Arduino.



La foto l' ho presa dalla descrizione dell'offerta che hai linkata anche se mi resta un piccolo dubbio Se la Foto corrisponde al prodotto a Te fornito visto che avevi scritto che é scritto
5V
ck
sI o s1
GND
e sulla foto vedo
5V
CK
SD
GND

Sí avevi scritto che hai modificato la riga del WS2801 ma cosa costava mettere lo sketch modificato con cui piloti la striscia?

Se usi striscie corte basta aliemntare da una delle due parti, é piú semplice usare la aprte IN perché devi collegarci comunque i 2 fili del pilotaggio. Se hai striscie piú lunghe é meglio mettere l' alimentazione ad entrambi i lato; lil pilotaggio sempre sul lato IN.

Ciao Uwe

ratto93





Cosa succede ad Arduino se cerco di accenderne troppi e collego l'alimentazione al 5V di Arduino?

N

Se sei collegato al PC non hai alcun tipo di protezione su arduino quindi se ce l'hai dentro il pc bene sennò, se superi la corrente di 200mA i danni che possono verificarsi potrebbero essere molteplici anche se a me non è mai successo nulla....
se alimenti esternamente arduino hai il limite degli 800mA dati dal regolatore e dal termofusibile, superati questi lo vedi spegnersi lentamente come se fosse in corto fino a non dar più segni di vita, quando scolleghi il carico poi si riaccende... occhio però.. il regolatore regge 800mA, io ho una 2009 e a mio avviso la pista sottostante è sottodimensionata come dissipatore ergo scalda come un fornetto, se hai la UNO non so dirti però in quanto non ne ho mai avuta una tra le mani :)


ratto93 stai facendo un po di confusione.
La USB é linitata a 500mA da un fusibile autoripristinante su Arduino e dal da un circuito di protezione sul PC che limita pure lui a 500mA.
Sul conettore di alimentazione non c'é nessun fusibile. C'é un diodo che regge 1A per evitare che la polaritá sbagliata rovini l'arduino.

Il regolatore puó reggere tale corrente ma devi fare i conti con la potenza che deve dissipare per abbassare la tensione di alimentazione a 5V. Non rischierei di prendere piú di 200mA dallo stabilizzatore.

Ciao Uwe

Mannaggia, hai ragione, come sempre, scusate l'intervento errato  :smiley-sweat:
Se corri veloce come un fulmine, ti schianterai come un tuono.

contecavour

Esatto Uwe.
Sulla mia striscia non c'è scritto ne IN ne OUT però è uguale.

E quindi dove dovrei attaccare secondo te sI e Ck?
Io ho provato a collegare sI al PIN 4 dato che nel codice si parla di PIN4 e il clock a 11 e poi a 13 ma non da segni di vita.

Io ho una Arduino Uno ver 2.0 potrebbe essere li il problema?

ratto93 non ho capito il tuo post?

N

Brunello

nella documentazione della fastSpi leggo questo

Quote

The other two connections are for data control, the Serial Programming Interface SPI. There should be one for the SCK (clock) which has to be connected to the clock pin for SPI, usually pin 13 on recent arduinos.
Then you need to connect the data input to the pin for master - to - slave data (MOSI), usually pin 11.



contecavour

Infatti quyello l'ho letto, ma nel codice si setta anche un PIN 4 che non capisco cosa serva allora.

cece99






Cosa succede ad Arduino se cerco di accenderne troppi e collego l'alimentazione al 5V di Arduino?

N

Se sei collegato al PC non hai alcun tipo di protezione su arduino quindi se ce l'hai dentro il pc bene sennò, se superi la corrente di 200mA i danni che possono verificarsi potrebbero essere molteplici anche se a me non è mai successo nulla....
se alimenti esternamente arduino hai il limite degli 800mA dati dal regolatore e dal termofusibile, superati questi lo vedi spegnersi lentamente come se fosse in corto fino a non dar più segni di vita, quando scolleghi il carico poi si riaccende... occhio però.. il regolatore regge 800mA, io ho una 2009 e a mio avviso la pista sottostante è sottodimensionata come dissipatore ergo scalda come un fornetto, se hai la UNO non so dirti però in quanto non ne ho mai avuta una tra le mani :)


ratto93 stai facendo un po di confusione.
La USB é linitata a 500mA da un fusibile autoripristinante su Arduino e dal da un circuito di protezione sul PC che limita pure lui a 500mA.
Sul conettore di alimentazione non c'é nessun fusibile. C'é un diodo che regge 1A per evitare che la polaritá sbagliata rovini l'arduino.

Il regolatore puó reggere tale corrente ma devi fare i conti con la potenza che deve dissipare per abbassare la tensione di alimentazione a 5V. Non rischierei di prendere piú di 200mA dallo stabilizzatore.

Ciao Uwe

Mannaggia, hai ragione, come sempre, scusate l'intervento errato  :smiley-sweat:

(Scusa Leo72 ma devo per forza quotare sennò non capisco nulla)
La USB ha in output un massimo di 100mA prima di ricevere il comando dal dispositivo di attivare la High Current (500mA) e penso che arduino non lo faccia, quindi hai a disposizione solo 100mA da USB
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

uwefed

cece, puoi fare riassunti nelle citazioni  ;) ;) ;)

Hai ragione che nello standart della USB senza richiesta un apparecchio collegato potrebbe consumare al massimo 500mA.
Non so se Arduino faccia questo negoziamento per poter consumare fino a 500mA ma so di certo che viene trasmesso un ID che specifica il dispositivo USB come Arduino del  e un numeri univoco  (per questo trovi 2 Arduini su diverse COM).

So anche che lo standart per la corrente massima sulla USB senza negoziamenti non viene visto in modo cosí rigido dal PC senó tante cose non sarebbero possibili come caricare apparecchi dalla USB.

Ciao Uwe

contecavour

Provato con una striscia tagliata di 10 òòed.
Pin 11 dati, 13 clock.
Remmata la riga del PIN 4, ma non va.
Idee?

N

uwefed


Provato con una striscia tagliata di 10 òòed.
Pin 11 dati, 13 clock.
Remmata la riga del PIN 4, ma non va.
Idee?

N

Prego lo sketch (ma veramente quello) che hai usato per fare le prove sopraelencate.
Ciao Uwe

contecavour

Ho aggiunto adesso
Quote
//MODIFICATO DA ME
davanti alle righe che ho tolto con un rem e dietro a quelle valide (non remmate)  per aiutarti a trovare i punti in cui ho cambiato il codice di test

Code: [Select]
#include <FastSPI_LED.h>

#define NUM_LEDS 10 //MODIFICATO DA ME

// Sometimes chipsets wire in a backwards sort of way
struct CRGB { unsigned char b; unsigned char r; unsigned char g; };
// struct CRGB { unsigned char r; unsigned char g; unsigned char b; };
struct CRGB *leds;

#define PIN 4

void setup()
{
  FastSPI_LED.setLeds(NUM_LEDS);
  //MODIFICATO DA ME FastSPI_LED.setChipset(CFastSPI_LED::SPI_SM16716);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_TM1809);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_LPD6803);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_HL1606);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_595);
  FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801); //MODIFICATO DA ME

  //MODIFICATO DA ME  FastSPI_LED.setPin(PIN);
 
  FastSPI_LED.init();
  FastSPI_LED.start();

  leds = (struct CRGB*)FastSPI_LED.getRGBData();
}

void loop() {
  // one at a time
  for(int j = 0; j < 3; j++) {
    for(int i = 0 ; i < NUM_LEDS; i++ ) {
      memset(leds, 0, NUM_LEDS * 3);
      switch(j) {
        case 0: leds[i].r = 255; break;
        case 1: leds[i].g = 255; break;
        case 2: leds[i].b = 255; break;
      }
      FastSPI_LED.show();
      delay(10);
    }
  }

  // growing/receeding bars
  for(int j = 0; j < 3; j++) {
    memset(leds, 0, NUM_LEDS * 3);
    for(int i = 0 ; i < NUM_LEDS; i++ ) {
      switch(j) {
        case 0: leds[i].r = 255; break;
        case 1: leds[i].g = 255; break;
        case 2: leds[i].b = 255; break;
      }
      FastSPI_LED.show();
      delay(10);
    }
    for(int i = NUM_LEDS-1 ; i >= 0; i-- ) {
      switch(j) {
        case 0: leds[i].r = 0; break;
        case 1: leds[i].g = 0; break;
        case 2: leds[i].b = 0; break;
      }
      FastSPI_LED.show();
      delay(1);
    }
  }
 
  // Fade in/fade out
  for(int j = 0; j < 3; j++ ) {
    memset(leds, 0, NUM_LEDS * 3);
    for(int k = 0; k < 256; k++) {
      for(int i = 0; i < NUM_LEDS; i++ ) {
        switch(j) {
          case 0: leds[i].r = k; break;
          case 1: leds[i].g = k; break;
          case 2: leds[i].b = k; break;
        }
      }
      FastSPI_LED.show();
      delay(3);
    }
    for(int k = 255; k >= 0; k--) {
      for(int i = 0; i < NUM_LEDS; i++ ) {
        switch(j) {
          case 0: leds[i].r = k; break;
          case 1: leds[i].g = k; break;
          case 2: leds[i].b = k; break;
        }
      }
      FastSPI_LED.show();
      delay(3);
    }
  }
}

contecavour

Nessuna sa aiutarmi?

Ho fatto questo
Code: [Select]

memset(leds, 0, NUM_LEDS * 3);
      leds[1].r = 255;
      leds[1].r = 255
       leds[1].r = 255
   
      FastSPI_LED.show();


Non dovrebbe accendersi il secondo bianco?
Beh si accende il secondo ma blu

uwefed

Non devi scrivere r g b?
Code: [Select]
memset(leds, 0, NUM_LEDS * 3);
      leds[1].r = 255;
      leds[1].g = 255;
       leds[1].b = 255;
   
      FastSPI_LED.show();

contecavour

Quote
Non devi scrivere r g b?


Non ho capito la tua domanda.
Cosa intendi?

Io ho preso un esempio del codice della libreria tolta tutta la parte per farli accendere in serie, fade in e out ecc e concentrato su una singola cosa, accendere un led.
leds è un array di una struttura che indirizza il singolo  led dei 3 che compongono quello rgb in cui vado a pilotare i singoli canali r,g,b e li setto al massimo che dovrebbe darmi luce bianca.

N

gpb01

... intende che tu hai riportato :

Code: [Select]

   memset(leds, 0, NUM_LEDS * 3);
   leds[1].r = 255;
   leds[1].r = 255
   leds[1].r = 255
   
   FastSPI_LED.show();


... ed in questo codice, come vedi, metti a 255 SEMPRE E SOLO la componente "R" e non le altre due.

Ora, o hai sbagliato a riportare qui nel tuo post il codice, oppure, se hai veramente scritto così, il codice è sbagliato visto che non server a nulla ripetere 3 volte la stessa istruzione e che, probabilmente, volevevi mettere a 255 le anche le componenti "G" e "B" da cui ... la correzione che ti è stata indicata ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up