Dimeando los leds, parpadean

Tema en 'Programación' iniciado por manolete, 5 Nov 2013.

  1. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Lo tengo montado de la siguiente forma.

    Para la alimentación uso un fuente de alimentación de ordenador, con eso alimento todo, para el diméo uso mosfets, el irf 540 y irf 3710.

    Los Led son de 10W y 1 A

    Del 540 tengo dos mosfets, uno para un led azul y otro para el rojo.

    Del 3710 tengo dos mosfets, uno con tres Led y el otro con cuatro.

    En total tengo 9 Led.

    El problema:

    Si pongo esto " for(int fadeValue = 0 ; fadeValue <= 5; fadeValue +=1)" es cuando parpadea, pero si pongo esto otro "for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1)" no, ya no se si es por los mosfet o por la forma de hacer el dimeo, no pongo el código entero por no llenar esto de texto pero lo puedo subir como archivo si lo queréis ver entero, fadeValue <= 5; o el valor que sea parpadea, solo va bien si esta a 255

    El código que uso para hacer el dimeo es:

    Insertar CODE, HTML o PHP:
    void luces()
    {
    
    /* 
    
    LA JORNADA ESTA DIVIDIDA EN TRAMOS FASES, SI SE FUESE LA LUZ NO HACE TODO EL PROCESO, SOLO EL TRAMO
    HORARIO EN EL QUE SE ENCUENTRA    
          
     */ 
     
    
          if ((hour == 7) && (minute < 30)&& (faseluz <1)){// TRAMO DE LAS 07  A 07:30  EN ESTE TRAMOS SIEMPRE AUMENTA LUZ
                 
                 ledvon();
                 for(int fadeValue = 0 ; fadeValue <= 5; fadeValue +=1)
                 {     
                 analogWrite(lblanco, fadeValue);         
                 analogWrite(lblanco2, fadeValue);    
                 analogWrite(lrojo, fadeValue);
                 analogWrite(lazul, fadeValue);
                 delay(500);
                 }
                 ledvoff();
                 faseluz = 1;
                 setCur(13, 3); Serial.print("fase 1");
                 }
                 
             else if((hour == 7) && (minute >= 30) && (hour < 8)&& (faseluz <2)){
                 
                 ledvon();
                 for(int fadeValue = 5 ; fadeValue <= 51; fadeValue +=1)
                 {     
                 analogWrite(lblanco, fadeValue);         
                 analogWrite(lblanco2, fadeValue);    
                 analogWrite(lrojo, fadeValue);
                 analogWrite(lazul, fadeValue);
                 delay(500);
                 }
                 ledvoff();
                 faseluz = 2;
                 setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 2");    
                 }
                 
             else if((hour == 8) && (minute < 30)&& (faseluz <3)){
                 
                  ledvon();
                  for(int fadeValue = 51 ; fadeValue <= 102; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 3;
                  setCur(13, 3); Serial.print("      ");
                  setCur(13, 3); Serial.print("fase 3");
                  }
                 
             else if((hour == 8) && (minute >= 30) && (hour < 9)&& (faseluz <4)){
                 
                  ledvon();
                  for(int fadeValue = 102 ; fadeValue <= 153; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 4;
                  setCur(13, 3); Serial.print("      ");
                  setCur(13, 3); Serial.print("fase 4");
                  }
                 
             else if((hour == 9) && (minute < 30)&& (faseluz <5)){
               
                  ledvon();
                  for(int fadeValue = 153 ; fadeValue <= 204; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 5;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 5");
                 }
                 
           else if((hour == 9) && (minute >= 30) && (hour < 20)&& (faseluz <6)){
               
                  ledvon();
                  for(int fadeValue = 204 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 6;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 6");
                  }
            else if((hour == 10) && (minute < 30)&& (faseluz <7)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 7;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 7");
                 }
                 
           else if((hour == 10) && (minute >= 30) && (hour < 11)&& (faseluz <8)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 8;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 8");
                  } 
             else if((hour == 11) && (minute < 30)&& (faseluz <9)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 9;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 9");
                 }
                 
           else if((hour == 11) && (minute >= 30) && (hour < 12)&& (faseluz <10)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 10;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 10");
                  }  
             else if((hour == 12) && (minute < 30)&& (faseluz <11)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 11;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 11");
                 }
                 
           else if((hour == 12) && (minute >= 30) && (hour < 13)&& (faseluz <12)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 12;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 12");
                  }
            else if((hour == 13) && (minute < 30)&& (faseluz <13)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 13;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 13");
                 }
                 
           else if((hour == 13) && (minute >= 30) && (hour < 14)&& (faseluz <14)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 14;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 14");
                  }
             else if((hour == 14) && (minute < 30)&& (faseluz <15)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 15;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 15");
                 }
                 
             else if((hour == 14) && (minute >= 30) && (hour < 15)&& (faseluz <16)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 16;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 16");
                  }
             else if((hour == 15) && (minute < 30)&& (faseluz <17)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 17;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 17");
                 }
                 
            else if((hour == 15) && (minute >= 30) && (hour < 16)&& (faseluz <18)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 18;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 18");
                  } 
             else if((hour == 16) && (minute < 30)&& (faseluz <19)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 19;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 19");
                 }
                 
            else if((hour == 16) && (minute >= 30) && (hour < 17)&& (faseluz <20)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 20;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 20");
                  } 
             else if((hour == 17) && (minute < 30)&& (faseluz <21)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 21;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 21");
                 }
                 
             else if((hour == 17) && (minute >= 30) && (hour < 18)&& (faseluz <22)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 22;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 22");
                  }  
             else if((hour == 18) && (minute < 30)&& (faseluz <23)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 23;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 23");
                 }
                 
             else if((hour == 18) && (minute >= 30) && (hour < 19)&& (faseluz <24)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 24;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 24");
                  }  
             else if((hour == 19) && (minute < 30)&& (faseluz <25)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 25;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 25");
                 }
                 
             else if((hour == 19) && (minute >= 30) && (hour < 20)&& (faseluz <26)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 26;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 26");
                  }          
                             
             else if((hour == 20) && (minute < 30)&& (faseluz <27)){
               
                  ledvon();
                  for(int fadeValue = 255 ; fadeValue >= 204; fadeValue -=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 27;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 27");
                  }
                 
             else if((hour == 20) && (minute >= 30) && (hour < 21)&& (faseluz <28)){
               
                  ledvon();
                  for(int fadeValue = 204 ; fadeValue >= 153; fadeValue -=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 28;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 28");
                  }
                 
             else if((hour == 21) && (minute < 30)&& (faseluz <29)){
               
                   ledvon();
                   for(int fadeValue = 153 ; fadeValue >= 102; fadeValue -=1)
                   {     
                   analogWrite(lblanco, fadeValue);         
                   analogWrite(lblanco2, fadeValue);    
                   analogWrite(lrojo, fadeValue);
                   analogWrite(lazul, fadeValue);
                   delay(500);
                   }
                   ledvoff();
                   faseluz = 29;
                   setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 29");
                   }
                 
            else if((hour == 21) && (minute >= 30) && (hour < 22)&& (faseluz <30)){
               
                  ledvon();
                  for(int fadeValue = 102 ; fadeValue >= 51; fadeValue -=1)
                  {     
                  analogWrite(lblanco, fadeValue);         
                  analogWrite(lblanco2, fadeValue);    
                  analogWrite(lrojo, fadeValue);
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 30;
                  setCur(13, 3); Serial.print("      ");
                  setCur(13, 3); Serial.print("fase 30");
                  }
                 
            else if((hour == 22) && (minute < 30) && (faseluz <31)){
            
                 ledvon();
                 for(int fadeValue = 102 ; fadeValue >= 51; fadeValue =0)
                 {
                 analogWrite(lazul, fadeValue);
                 }
                 for(int fadeValue = 51 ; fadeValue >= 5; fadeValue -=1)
                 {     
                 analogWrite(lblanco, fadeValue);         
                 analogWrite(lblanco2, fadeValue);    
                 analogWrite(lrojo, fadeValue);
                 delay(500);
                 } 
                 ledvoff();
                 faseluz = 31;
                 setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 31");
                 setCur(10,2);
                 Serial.print("     "); 
                 }
                 
            else if((hour == 22) && (minute >= 30) && (hour < 23)&& (faseluz <32)){
               
                  ledvon();
                 for(int fadeValue = 102 ; fadeValue >= 51; fadeValue =0)
                 {
                 analogWrite(lazul, fadeValue);
                 }
                 for(int fadeValue = 5 ; fadeValue >= 0; fadeValue -=1)
                 {     
                 analogWrite(lblanco, fadeValue);         
                 analogWrite(lblanco2, fadeValue);    
                 analogWrite(lrojo, fadeValue);
                 delay(500);
                 } 
                 ledvoff();
                 faseluz = 32;
                 setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 32");
                 }
                  
                 
                 
            else if((hour == 23) && (minute < 30)&& (faseluz <33)){
               
                 ledvon();
                  for(int fadeValue = 51 ; fadeValue >= 12; fadeValue -=1)
                  {     
                  analogWrite(lazul, fadeValue);
                  delay(500);
                  }
                  ledvoff();
                  faseluz = 33;
                  setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 33");
                  }     
                 
            else if((hour == 23) && (minute >= 30) && (hour < 24)&& (faseluz <34)){
               
                 
                 ledvon();
                 for(int fadeValue = 12 ; fadeValue >= 0; fadeValue -=1)
                 {     
                 analogWrite(lazul, fadeValue);
                 delay(500);
                 }
                 ledvoff();
                 faseluz = 34;
                 setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 34");
                 }
                
             else if((hour == 00) && (hour < 7) && (faseluz < 35)){ // CUANDO EL RELOJ ALCANZA EL 24, EL CONTADOR SE PONE A CERO
                                                                    //PARA QUE SIGA CONTANDO LA HORA TIENE QUE SER "00"
               
                 faseluz = 0;
                 setCur(13, 3); Serial.print("      ");
                 setCur(13, 3); Serial.print("fase 0");
                 }
              
              } 


    Ya no se por donde meterle mano, alguno le sonara el código, esta hecho a trozos de varios de vosotros.

    A ver si podéis echarme una mano y consigo quitar el parpadeo de los Led.

    Si faltan datos pedírmelos.

    Gracias

    Saludos
     
  2. Kaly

    Kaly

    Mensajes:
    6.307
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    Las fuentes de ordenador son fuente switcheada y posiblemente no sea compatible con PWM. No todas las fuentes son compatibles con PWM. Asegurate que se pueda, o si tienes posibilidad utiliza otra fuente para probar
     
  3. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Gracias por la respuesta, mientras busco otro tipo de fuente para hacer las pruebas, he visto que usáis para dimear el tip, yo uso mosfet, son lo mismo o funcionan de forma distinta?

    Podría ser parte del problema?

    Saludos
     
  4. Kaly

    Kaly

    Mensajes:
    6.307
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    Un tip es un tipo de transistor mosfet
     
  5. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Kaly , gracias por la aclaración.

    Haciendo unas pruebas con el código, he conseguido que no lo haga.

    Yo pongo esto para hacerlo:

    ledvon();
    for(int fadeValue = 0 ; fadeValue <= 5; fadeValue +=1)
    {
    analogWrite(lblanco, fadeValue);
    analogWrite(lblanco2, fadeValue);
    analogWrite(lrojo, fadeValue);
    analogWrite(lazul, fadeValue);
    delay(500);
    }
    ledvoff();
    faseluz = 1;
    setCur(13, 3); Serial.print("fase 1");
    }
    Si solo dejo "analogWrite(lblanco, fadeValue);" ya no lo hace, pero da igual el que deje, es como si todas las salidas pwm funcionasen como una, si pongo "analogWrite(lblanco2, fadeValue);" tambien funciona y con solo "analogWrite(lrojo, fadeValue);" tambíen, no se si me explico, así que tengo que repasar las conexiones a ver si algo se cruza por alguna parte, lo he comprobado un montón de veces pero....

    Pongo tambíen todo el cdigo por si alguien se arma de paciencia y lo quiere mirar, la otra posibilidad que pienso es que haciendo el dimeado de esa forma todas las salidas pwm se comporten igual, pero eso tendra que decirlo alguien que sepa.
     

    Adjuntos:

  6. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Kaly al decir que el tip es un tipo de mosfet, los dos se conectan igual?

    Bueno antes de seguir, yo no tengo ni idea de electrónica ni de programación, todo lo hago con pruebas y ayuda de amigos de los foros, lo comento por si pregunto cosas que son básicas y os extraña que no las sepa.

    Al repasar las conexiones y mirar como conectáis el tip yo no lo tengo exactamente de la misma forma, entre la pata de la derecha y la de la izquierda tengo otra resistencia uniéndolas, me explicaron si no recuerdo mal que es para eliminar corriente residual y que no sufra tanto el mosfet o algo parecido.

    Gracias

    Saludos
     
  7. sukubo

    sukubo

    Mensajes:
    231
    Registrado:
    9 May 2012
    Ubicación:
    Jaén
    Hola Manolete,

    Te comento, esto for(int fadeValue = 255 ; fadeValue <= 255; fadeValue +=1) y nada es exactamente lo mismo, puedes eliminar el for dejando solo lo que tienes dentro dado que solo va a entrar una sola vez y es lo mismo que no ponerlo dentro de un for.
    Me he bajado el codigo pero lo tienes dividido y asi no se que tienes realmente cargado es jodido saber si todo lo tienes y no voy a estar abriendo 6 ficheros para ver donde cambias cada cosa, tambien te recomendaria que te actualizaras el arduino, que te vas a evitar mas de un problemilla. Y si quieres estar seguro de que valor estas metiendo en cada cosa para testeo te ayudaria que pusieras un serial.print para mostrar el pin donde estas escribiendo y otro para poner el valor a ver si con eso te aclaras mejor.

    Por otro lado, lo de que te dices que parpadea... si haces un for de 5 pasos o de 255 mmm no puedo saberlo porque no estoy viendo como lo tienes todo, pero si el dimeo lo haces del tiron en un for, eso es rapidisimo si pasas de 0 a 255 en un for sin delays y sin parones entre cada subida jamas vas a dimear, vas a ver como en cosa de 1 segundo pasa de 0 a 100, por otro lado si el dimeo lo haces de 0 a 5 en un for y tambien sin delays estas subiendo mas rapidamente...

    Lo suyo por ejemplo es que te bases en la hora que registras y aumentes 1 el valor cada minuto por ejemplo o cada 5....

    Un saludo... en cuanto a la parte del hardware no puedo ayudarte pues no he usado este tipo de mosfet todo lo que tengo es a base de 15 tip
     
  8. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Hola sukubo.

    Gracias por la respuesta, ya se que es complicado mirar un código de alguien y entender lo que hace o pretende hacer, si quieres seguir la secuencia de ejecución de las luces, comienza todo en el loop, con "ctemp();" entra en la parte de temperatura y tras comprobar que no existe ninguna alarma de temperaturas ejecuta "luces();" con lo que empieza con el programa de luces, esta comprobación esta al final de la pestaña temperaturas, así si hay un recalentamiento por cualquier cosa o se enciende un ventilador o desciende la intensidad o los apaga.

    Si al entrar aquí todo esta bien es cuando empieza con las luces, en la pestaña luces esta todo dividido en horarios y fases.

    if ((hour == 7) && (minute < 30)&& (faseluz <1)){// TRAMO DE LAS 07 A 07:30 EN ESTE TRAMOS SIEMPRE AUMENTA LUZ

    ledvon();
    for(int fadeValue = 0 ; fadeValue <= 5; fadeValue +=1)
    {
    analogWrite(lblanco, fadeValue);
    analogWrite(lblanco2, fadeValue);
    analogWrite(lrojo, fadeValue);
    analogWrite(lazul, fadeValue);
    delay(500);
    }
    ledvoff();
    faseluz = 1;
    setCur(13, 3); Serial.print("fase 1");
    }

    Este es el rimero que se ejecuta a las 07:30 AM, pone los led a 5 en saltos de 1 y con un delay de 500, para que no sea de golpe, esto supongo que tendré que afinarlo cuando funcione para que sea los mas suave posible y no de fogonazos, luego, lo de las fases es para que no este continuamente ejecutándolo, en este caso, comienza faseluz de 0 al ser menor que faseluz 1 lo hace, pero al terminar faseluz lo pone a 1, de esta forma ya no entra aquí otra vez, esto funciona bien.

    Lo de actualizar el arduino lo tengo pendiente, ya que si cargo el código en una versión actualizada da un montón de problemas con las librerías, lo quiero actualizar, pero después de terminarlo ya que supongo que me llevara mucho tiempo conseguir que todo se compile en el nuevo.

    Con respecto al parpadeo creo que se lo que pasa, pero necesito que alguien me lo confirme, como puse el el post anterior, según ponéis los tip yo tengo unida la patilla izquierda, donde esta el pin del arduino con su resistencia con la patilla derecha que es el gnd con una resistencia, lo que sospecho es que con esa unión yo conecto todos los pines de control pwm entre sí por medio del negativo, seguramente quitando esa resistencia se solucione el problema pero necesitaría que alguien me diga algo para no fundir los led, aunque si no me los he cargado ya no creo que pase nada por probar otra cosa una vez mas a ver que pasa.

    Esto es la placa de los mosfet donde se ve la resistencia de la que sospecho.


    [​IMG]
     
  9. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Solucionado, ya no parpadean.

    Saludos
     
  10. ellaerestu

    ellaerestu

    Mensajes:
    541
    Registrado:
    12 Ago 2013
    Ubicación:
    Madrid
  11. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Los mosfet por detrás son metálicos, el soucer esta comunicado con la parte trasera, al ser el disipador de una pieza, todo hacia contacto con todo, cortándolo en cuatro solucionado.

    Saludos