• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zapalone diody przy starcie
#1
Witam,
borykam się z problemem jakim jest po podaniu zasilania do podświetlania schodów.
Po zmierzchu dochodzi dopiero prąd do całego układu i wtedy na stale zapalają się wszystkie światła,
do momentu gdy nie wejdę na czujnik i uruchomi się sekwencja i od tego momętu wszystko działa normalnie.
Próbowałem już komendy clear do TLC ale nie pomaga.
Zwracam się do was o pomoc co zrobić aby się nie uruchamiały samoczynnie.
Pozdrawiam
Oto kod jaki mam:
Kod:
#include <Tlc5940.h>
const int downButtonPin = 6;     // włącznik dolny
const int upButtonPin = 7;     // włącznik górny
int downButtonState = 0;         // status
int upButtonState = 0;         //status
int ledCount = 16; //liczba aktywnych wyjść (światełek)
int brightness = 4095; //maksymalna jasność
int brightStep = 28; //krok przy rozjaśnianiu
int brightStep1 = 7; //krok przy ściemnianiu
int delayTime = 2; //szybkosc
int outs[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //wyjścia do których podpinane są taśmy

void setup()
{
 Tlc.init();
 for (int diode=0; diode<ledCount; diode++)
 pinMode(downButtonPin, INPUT);
 digitalWrite(downButtonPin, LOW);  
 pinMode(upButtonPin, INPUT);    
 digitalWrite(upButtonPin, LOW);  

for (int diode = 0; diode<ledCount;diode++) {
    Tlc.set(outs[diode], brightness-outs[diode]);

}
Tlc.update();
}

void loop()

{
downButtonState = digitalRead(downButtonPin);

 // check if the pushbutton is pressed.
 // if it is, the buttonState is HIGH:

if (downButtonState == LOW) {    
   downButton();
 //  upButton();
 }

 upButtonState = digitalRead(upButtonPin);
 if (upButtonState == LOW) {    
   upButton();
 }
}

void downButton() {

for (int diode = 0; diode<ledCount;diode++) {
 
  int bright = brightness;
  do {
     if (bright<0) {
       bright = 0;
     }
     Tlc.set(outs[diode], bright);
     Tlc.update();

     delay(delayTime);
     bright = bright - brightStep;
  } while (bright>=0);
 }
 
 for (int diode = 0; diode<ledCount;diode++) {
   int bright = 0;
   while (bright<brightness) {
     bright = bright + brightStep1;
     if (bright>brightness) {
       bright = brightness;
     }

     Tlc.set(outs[diode], bright);
     Tlc.update();
     delay(delayTime);
   } ;
 }

}

void upButton() {

for (int diode = ledCount-1; diode>=0;diode--) {
 
  int bright = brightness;
  do {
     if (bright<0) {
       bright = 0;
     }
     Tlc.set(outs[diode], bright);
     Tlc.update();

     delay(delayTime);
     bright = bright - brightStep;
  } while (bright>=0);
 }
 
 for (int diode = ledCount-1; diode>=0;diode--) {
   int bright = 0;
   while (bright<brightness) {
     bright = bright + brightStep1;
     if (bright>brightness) {
       bright = brightness;
     }
     
    Tlc.set(outs[diode], bright);
    Tlc.update();
    delay(delayTime);    
  }
 }
}
 
Odpowiedź
#2
Może gdzieś tu
Kod:
void setup()
{
Tlc.init();
for (int diode=0; diode<ledCount; diode++)
pinMode(downButtonPin, INPUT);
digitalWrite(downButtonPin, LOW);  
pinMode(upButtonPin, INPUT);    
digitalWrite(upButtonPin, LOW);  

brakuje Ci jakiś klamerek.
 
Odpowiedź
#3
Witam,
Dziękuje za podpowiedz (poprawiłem błąd) ale wina była w czymś innym,
udało mi się poradzić z tym.
Teraz po podłączeniu zasilania światła mrugną i czekają na sygnał z czujników optycznych.

Przesyłam poprawiony w pełni działający kod:
Pozdrawiam
Kod:
#include <Tlc5940.h>
const int downButtonPin = 6;     // włącznik dolny
const int upButtonPin = 7;     // włącznik górny
int downButtonState = 0;         // status
int upButtonState = 0;         //status
int ledCount = 16; //liczba aktywnych wyjść (światełek)
int brightness = 4095; //maksymalna jasność
int brightStep = 20; //krok przy rozjaśnianiu
int brightStep1 = 6; //krok przy ściemnianiu
int delayTime = 2; //szybkosc
int outs[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //wyjścia do których podpinane są taśmy
int outsState[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void setup()
{
Tlc.init();
{
for (int diode=0; diode<ledCount; diode++)
Tlc.set(outs[diode], brightness-outs[diode]);
}
{
pinMode(downButtonPin, INPUT);
digitalWrite(downButtonPin, LOW);  
pinMode(upButtonPin, INPUT);    
digitalWrite(upButtonPin, LOW);  
for (int diode = ledCount-1; diode>=0;diode--)
   Tlc.set(outsState[diode], brightness-outs[diode]);
Tlc.update();
}
}
void loop()
{
for (int diode = ledCount-1; diode>=0;diode--)
Tlc.set(outs[diode], brightness-outsState[diode]);
Tlc.update();

{

downButtonState = digitalRead(downButtonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:

if (downButtonState == LOW) {    
  downButton();
//  upButton();
}

upButtonState = digitalRead(upButtonPin);
if (upButtonState == LOW) {    
  upButton();
}
}
}
void downButton() {

for (int diode = 0; diode<ledCount;diode++) {

 int bright = brightness;
 do {
    if (bright<0) {
      bright = 0;
    }
    Tlc.set(outs[diode], bright);
    Tlc.update();

    delay(delayTime);
    bright = bright - brightStep;
 } while (bright>=0);
}

for (int diode = 0; diode<ledCount;diode++) {
  int bright = 0;
  while (bright<brightness) {
    bright = bright + brightStep1;
    if (bright>brightness) {
      bright = brightness;
    }

    Tlc.set(outs[diode], bright);
    Tlc.update();
    delay(delayTime);
  } ;
}

}

void upButton() {

for (int diode = ledCount-1; diode>=0;diode--) {

 int bright = brightness;
 do {
    if (bright<0) {
      bright = 0;
    }
    Tlc.set(outs[diode], bright);
    Tlc.update();

    delay(delayTime);
    bright = bright - brightStep;
 } while (bright>=0);
}

for (int diode = ledCount-1; diode>=0;diode--) {
  int bright = 0;
  while (bright<brightness) {
    bright = bright + brightStep1;
    if (bright>brightness) {
      bright = brightness;
    }
   
   Tlc.set(outs[diode], bright);
   Tlc.update();
   delay(delayTime);    
 }
}
}
 
Odpowiedź
#4
(10-03-2019, 10:38)Minek3 napisał(a): udało mi się poradzić z tym.
Teraz po podłączeniu zasilania światła mrugną i czekają na sygnał z czujników optycznych.
To "mrugnięcie" jest zamierzone?
- Kod z Delay i/lub bez WDT (WDG) to nie kod, to DEMO!
- Wielowątkowość to najczęściej konieczność w dobrym programie.
- Kod wymaga komentarzy!
- Nie pomagam leniwym analfabetom. Sprawdzanie pisowni jest w każdej dobrej przeglądarce WWW.


 
Odpowiedź
#5
Nie,
Ale ze względu iż tlc dostaje zasilanie zanim admega wgra program, nie ma możliwości tego usunięcia.
Chyba ze się mylę to proszę o komentarz.
Pozdrawiam
 
Odpowiedź
#6
Nie wiem jak masz to elektrycznie podłączone, Atmega może włączać zasilanie do części LED jakimś tranzystorem.
 
Odpowiedź
#7
(10-03-2019, 14:28)kaczakat napisał(a): Nie wiem jak masz to elektrycznie podłączone, Atmega może włączać zasilanie do części LED jakimś tranzystorem.
Po co tranzystor? Może jeszcze spawarki traktory i kultywatory?
Tlc5940 ma wejście BLANK.
- Kod z Delay i/lub bez WDT (WDG) to nie kod, to DEMO!
- Wielowątkowość to najczęściej konieczność w dobrym programie.
- Kod wymaga komentarzy!
- Nie pomagam leniwym analfabetom. Sprawdzanie pisowni jest w każdej dobrej przeglądarce WWW.


 
Odpowiedź
#8
   

Mam podpięte pod Blank w TLC z admegą pin 10 a mimo to  w ten sposób się uruchamia.
Oczywiście jeżeli jest możliwość wyeliminowania tego zjawiska proszę o poradęSmile
Być może brakuje mi coś w kodzie?
Pozdrawiam

Schemat płytki:
 
Odpowiedź
#9
(10-03-2019, 16:53)Minek3 napisał(a): Być może brakuje mi coś w kodzie?
Może w kodzie, może w sprzęcie?
Gdzie ustawiasz wyjście BLANK?
Jak masz ustawione fuses związane z czasem startu CPU po resecie?

(10-03-2019, 16:53)Minek3 napisał(a): Schemat płytki:
Chyba pierwszy raz widzę na tym forum prawdziwy schemat a nie malowanki.
- Kod z Delay i/lub bez WDT (WDG) to nie kod, to DEMO!
- Wielowątkowość to najczęściej konieczność w dobrym programie.
- Kod wymaga komentarzy!
- Nie pomagam leniwym analfabetom. Sprawdzanie pisowni jest w każdej dobrej przeglądarce WWW.


 
Odpowiedź
#10
Podłącz sobie rezystor podciągający do VCC, wartość sobie dobierze, między 1k a 10k powinno być OK, rezystor wymusza stan wysoki na BLANK, dzięki czemu wyjścia led są wyłączone, po wysterowaniu pinem 10 na 0 aktywujesz wyjścia.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości