Buongiorno a tutti,
ho comprato tre WS2812 Breakout Sparkun.
Ho scaricato le librerie Adafruit e fastLED, e ho provato gli esempi di base per accendere un singolo led.
Non riesco a fare nulla.
Gli esempi compilano e vengono correttamente caricati sulla scheda, non ho errori.
Ho provato su due Arduino Uno diversi e su un Arduino Nano.
Ho provato a cambiare il pin collegato al DI del mio led, spostandolo dal pin 3 al pin 10.
Ho provato a collegare un oscilloscopio al pin di uscita, anche senza il led collegato, giusto per vedere se vedo l'onda quadra che pilota il led.
La linea è sempre a massa, qualunque pin io scelga.
Se aggiungo altre istruzioni allo skecth queste vengono eseguite (ad esempio far blinkare il led a bordo scheda, collegato al piedino 13).
Metto qui sotto i due banali esempi che ho provato.
Dove sto sbagliando?
Grazie.
---------------------Esempio con la libreria Adafruit
#include <Adafruit_NeoPixel.h>
#define PIN 10
#define LED_COUNT 1
// Create an instance of the Adafruit_NeoPixel class called "leds".
Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
void setup()
{
leds.begin(); // Call this to start up the LED strip.
clearLEDs(); // This function, defined below, turns all LEDs off...
leds.show(); // ...but the LEDs don't actually update until you call this.
}
void loop()
{
leds.setPixelColor(0, 0, 200, 0);
leds.show(); // Turn the LEDs on
delay(1000);
leds.setPixelColor(0, 200, 0, 0);
leds.show(); // Turn the LEDs on
delay(1000);
}
Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:
>eliberg: Oltre a quanto richiesto da Nid, ti segnalo anche che, in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai posto la stessa domanda in area di lingua Inglese. Tale tua domanda, che violava il regolamento, è stata quindi cancellata.
Anche senza collegamenti non vedi alcuna uscita dai pin di Arduino? Sicuro di non averlo fritto con le precedenti prove? Leggi le avvertenze sul sito Sparkfun (protezione con condensatore, resistenza da 220 sul pin di controllo..). Prova con un altro Arduino eventualmente
Buongiorno,
chiedo scusa per non aver letto prima per bene tutto il regolamento.
La fretta di risolvere il mio problema è stata cattiva consigliera.
Ho scritto il post di presentazione nella sezione opportuna.
Non avevo letto del cross posting.
Se il mio messaggio è stato cancellato posso riproporlo, solo in un'area, in modo da non ricadere nel problema del cross posting?
Grazie per la pazienza.
Ciao docdoc,
credevo che il mio post fosse stato cancellato da entrambe le aree, quindi mi chiedevo come riproporlo senza violare il regolamento.
Ok, adesso che mi è più o meno chiaro come funziona torno alle questione tecniche.
Il mio Arduino funziona, è solo che non vedo in uscita l'onda quadra sul pin che seleziono per pilotare il led.
E' come se le funzioni di libreria non avessero alcun effetto, non pilotassero l'uscita.
E' indifferente quale piedino scelgo, su nessuno, dal 2 al 12, riesco a vedere l'onda quadra di uscita.
Se però uso quei piedini per generare altro, funzionano correttamente.
Eppure il tutto viene compilato senza problemi.
Ho provato ad aggiornare la versione dell'IDE, a cambiare PC, ho provato con tre Arduino diversi...nulla.
Uso il condensatore e la resistenza, così come suggerito dal sito della Sparkfun.
Eh sì che penso che gli sketch siano banali, ho navigato due giorni in rete, prima di scrivere questo post, ho trovato un sacco di esempi e un sacco di gente che usa questi led senza problemi.
Qualche idea?
Grazie.
Non ho quella Sparkfun e quindi neanche mai usato quella libreria, ma la cosa mi incuriosisce perché avrei anche io intenzione a breve di fare qualcosa con gli RGB. Ho quindi comunque qualche domanda.
Primo, ma tu hai provato uno degli esempi della Adafruit (strandtest, ovviamente imposterai 1 solo pixel se hai una sola breakboard)? Funziona?
Secondo, nel tuo sketch non vedo la funzione clearLED(): non è che magari lì dentro c'è qualcosa che blocca l'esecuzione e quindi non uscendo mai dal setup() non fa nulla in output?
gpb01:
Posso garantire che i NeoPixel di Adafruit, con la loro libreria, funzionano perfettamente
Immagino, ma in ogni caso quelli del nostro amico non hanno lo stesso chip (WS2812) e quindi dovrebbero funzionare?
Tra l'altro nel codice la NEO_KHZ800 è descritta come "800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)", immagino/spero sia quindi compatibile (in pratica un clone, credo ).
Se intanto l'amico ci fa vedere la clearLEDs() magari capiamo meglio..
docdoc:
Immagino, ma in ogni caso quelli del nostro amico non hanno lo stesso chip (WS2812)
... ma io infatti rispondevo a te che dicevi di voler fare qualche cosa con gli RGB ... suggerendoti di farlo con i NeoPixel del cui funzionamento sono certo
gpb01:
... ma io infatti rispondevo a te che dicevi di voler fare qualche cosa con gli RGB ... suggerendoti di farlo con i NeoPixel del cui funzionamento sono certo
Ah, capito, grazie Guglielmo!
uwefed:
Nello sketch che hai fatto vedere é scritto: #define DATA_PIN 9
Perché provi a collegare il LEd al pin 3 e 10?
Aaah, io la sua frase l'avevo intesa come "ho provato TUTTI i pin dal 3 al 10" ma forse hai ragione tu...
In effetti ho provato a ricompilare svariate volte cambiando ogni volta il piedino che collego al DI tramite resistenza.
Ho provato col piedino 2, col piedino 3, ... col piedino 10.
L'uscita è sempre piatta.
Però mi è sorto un dubbio: guardando sul sito della Sparkfun il documento relativo al protocollo onewire che gestisce l'ingresso digitale del led RGB, uno 0 logico è codificato come 0.35 us alto + 0.8 us basso e un 1 logico come 0.7 us alto + 0.6 us basso.
Ora, il mio Arduino Uno va a 16MHz, quindi dovrei essere perfettamente in grado di seguire questi tempi.
Però se implemento una cosa banale come:
for (i = 0; i< 20000; i++)
{
digitalWrite(PINOUT, HIGH);
nop;
digitalWrite(PINOUT, LOW);
nop;
}
vedo sull'oscilloscopio un'onda quadra con Ton = Toff = 3.4 us, che è un tempo troppo alto rispetto a quanto richiesto dal led.
In ogni caso la libreria Adafruit è consigliata proprio dal sito del produttore, quindi dovrebbe funzionare perfettamente.
Ho provato anche con l'altra libreria, la fastLED, che ha un profilo esattamente per il WS2812, ma il risultato è identico.
Ovviamente il primo sketch che ho usato è quello proposto nell'esempio della libreria, dove ho selezionato opportunamente il mio piedino di uscita e ho messo a 1 il numero dei led (ma ho provato anche attaccando due led e settando a 2 la dimensione dell'array).
E ho provato anche con la clearLEDS.
Nulla...
eliberg:
vedo sull'oscilloscopio un'onda quadra con Ton = Toff = 3.4 us, che è un tempo troppo alto rispetto a quanto richiesto dal led.
... il tuo test NON fa testo, la libreria Adafruit, proprio per rispettare i tempi stretti, è scritta per la maggior parte (quella critica) in assembler e, oltretutto, con gli interrupt disabilitati.
Continuo a ripetere che su Arduino UNO (ma in genere sugli AVR) la libreria di Adafruit funziona perfettamente ed è usata praticamente ovunque siano usato quei LED con Arduino.
Ok, allora quale potrebbe essere il motivo per cui non vedo nulla in uscita dal mio piedino?
Anche senza collegare il led, il piedino dovrebbe darmi in uscita un'onda quadra, ovvero la sequenza di 24 bit che codifica il colore impostato.
Avreste qualcosa da consigliarmi, qualche misura da fare, qualcosa da settare nel mio sketch?
Non avendo errori di compilazione e avendo fatto le prove su tutti i piedini e su tre arduino diversi sono un po' a corto di idee
Grazie mille!
Ok,
ho disinstallato e reinstallato Arduino e librerie.
Adesso il mio piedino oscilla a dovere e coi tempi giusti.
Da oscilloscopio vedo l'uscita che in circa 25 us manda tutti i 24 bit di colore al WS2812.
Il led però non si accende.
Magari provo a comprare degli Adafruit originali, forse il problema è quello, nonostante sia garantita la compatibilità?
Grazie a tutti.
Ciao