ATTINY85 con carga no arranca

Hola,
Soy nuevo aqui, por tanto puede que no publique en el sitio o modo correcto.
La cuestion es mi primer programa cargado en ATTINY85 via arduino y luego ejecutado en una plaquita que se alimenta via usb, no arranca correctamente.
Me explico, este se encarga de hacer flashear unos leds.
Si arranco el ATTINY85 sin ninguna carga conectada este pasa un tiempo de arranque y funciona perfectamente. Luego conecto la carga (los leds) y todo ok.
El problema es que si lo conecto al usb con los led conectados se queda "colgado" indefinidamente.
Pueden ir los tiros por un micro pico en el momento de conectar?
Gracias a todos.

Danos mas detalles sobre como has conectado el led.
A que pin, que Resistencia usas (espero no digas que no tiene resitencia).
Dices que el codigo funciona pero postealo segun las normas para tener una idea.
Tal vez un simple blink.ino entonces dilo y será suficiente.

Gracias por tu rapida respuesta.
Antes de seguir, dices: postealo segun las normas.
Repito, soy novato. No he encontrado "las normas" o me las han mostrado y las he pasado por alto.
Lo inserto como un texto?
Gracias.
Resistencias de 100ohm, para Vdc:5v ;Vled:3.5v;Iled:20mA, creo que va sobrada.

El primer hilo de cada sección contiene las Normas del foro.

Puedes mirar otros hilos y comprobar como se opera en este foro y leer las normas.

Selecciona tu código lo copias, haces click en </>, lo pegas y listo


Debe lucir como todos los que acompañan tu hilo en esta sección, que te invito a leer.

Que PIN usas, no has respondido.?

EDITO:

Perdon, parezco ignorante total...
El codigo no es mio.
Aclaro que, tanto la seccion de la lectura del servo, como Landing light no las uso.
Gracias por tus aclaraciones.

/**
 * RC LED Light Controller
 * 
 * Designed for an ATTiny85, but should run on any arduino. Default pin numbers are for an ATTiny85
 * 
 * Features:
 * Landing light controlled via an RC channel (can use a Y-harness on flaps or landing gear channel)
 * 2 fading anti-collision beacons
 * Double flash strobe
 * 
 * @author Harold Asbridge
 * @version 0.3
 * @date 2014-06-12
 * 
 */

// Landing light settings
//#define LL_IRQ_NUMBER 0 // Número de interrupción a utilizar (0 = pin 2 en la mayoría de las placas)
#define LL_PIN_SERVO 5 // Número de pin de entrada del servo - debe coincidir con la interrupción utilizada
#define LL_PIN_LIGHT 3 // Número de pin de salida de la luz de aterrizaje
//#define LL_PIN_LIGHT 5 // Número de pin de salida de la luz de aterrizaje
#define LL_SERVO_THRESHOLD 1500 // Umbral de la señal del servo para encender/apagar la luz de aterrizaje (ancho de pulso en microsegundos, 1000 a 2000)
#define LL_SERVO_DEAD_ZONE 100 // Tamaño de la zona muerta de la señal del servo, elimina el parpadeo
#define LL_SERVO_REVERSED true   // Si el canal del servo está invertido o no

// Strobe settings
#define STB_PIN_LIGHT 4 // Número de pin para la salida de la luz estroboscópica
#define STB_PIN_LIGHT2 2 // Pin number for strobe2 light output
#define STB_BLINK_INTERVAL 2000000 // Intervalo de parpadeo de la luz estroboscópica en microsegundos

// Anti-collision beacon settings
#define ACB1_PIN_LIGHT 0 // Pin number for anti-collision beacon 1
#define ACB2_PIN_LIGHT 1 // Pin number for anti-collision beacon 2
#define ACB_FADE_MIN 10 // Minimum fade level for beacon (0-255)
#define ACB_FADE_MAX 50 // Maximum fade level for beacon (0-255)
#define ACB_FADE_INTERVAL 30000 // Intervalo de paso de desvanecimiento, en microsegundos (números más bajos = desvanecimiento más rápido)


// Var declarations
volatile unsigned long servoPulseStartTime;
volatile int servoPulseWidth = 0;
boolean curLandingLight = false;

unsigned long lastFadeTime = 0;
unsigned long lastStrobeTime = 0;
int currentFade = ACB_FADE_MIN;
int fadeDirection = 1;

// Called on power on or reset
void setup()
{
  // Set up interrupt handler
//  attachInterrupt(LL_IRQ_NUMBER, measureServoSignal, CHANGE);
  delay(1500);
  // Declare output pins
  pinMode(LL_PIN_LIGHT, OUTPUT);
  pinMode(STB_PIN_LIGHT, OUTPUT);
  pinMode(STB_PIN_LIGHT2, OUTPUT);  
  pinMode(ACB1_PIN_LIGHT, OUTPUT);
  pinMode(ACB2_PIN_LIGHT, OUTPUT);
}

// Called continuouly
void loop()
{
  unsigned long currentTime = micros();

  // Check if the landing light should be turned on
  checkLandingLight();
  
  // Check if it's time to fade the anti-collision lights
  if ((currentTime - lastFadeTime) > ACB_FADE_INTERVAL) {
    doFade();
    lastFadeTime = currentTime;
  }

  // Check if it's time to blink the strobes
  if ((currentTime - lastStrobeTime) > STB_BLINK_INTERVAL) {
    doStrobe();
    doStrobe2();    
    lastStrobeTime = currentTime; 
  }
}

// Check servo signal, and decide to turn on/off the landing light
void checkLandingLight()
{
  // Modify threshold to prevent flicker
  int threshold = LL_SERVO_THRESHOLD;
  if (!curLandingLight) {
    // Light is not on, adjust threshold up
    threshold += LL_SERVO_DEAD_ZONE;
  } else {
    // Light is on, adjust threshold down
    threshold -= LL_SERVO_DEAD_ZONE;
  }

  // Check servo position
  if (servoPulseWidth >= threshold) {
    setLandingLight(true);
  } else {
    setLandingLight(false);
  }
}

// Turn on or off landing light
void setLandingLight(boolean state)
{
  float i;
  if (state && !curLandingLight) {
    digitalWrite(LL_PIN_LIGHT, HIGH);
  } else if (!state && curLandingLight) {
    digitalWrite(LL_PIN_LIGHT, LOW);
  }
  curLandingLight = state;
}

// Fade anti-collision LEDs
void doFade()
{
  currentFade += fadeDirection;
  if (currentFade == ACB_FADE_MAX || currentFade == ACB_FADE_MIN) {
    // If we hit the fade limit, flash the high beacon, and flip the fade direction
    if (fadeDirection == 1) {
      analogWrite(ACB1_PIN_LIGHT, 255);

    } else {
      analogWrite(ACB2_PIN_LIGHT, 255);
    }
    delay(50); 
    fadeDirection *= -1; 
  }

  analogWrite(ACB1_PIN_LIGHT, currentFade);
  analogWrite(ACB2_PIN_LIGHT, ACB_FADE_MAX - currentFade + ACB_FADE_MIN);
}

// Strobe double-blink
void doStrobe()
{
  digitalWrite(STB_PIN_LIGHT, HIGH);
  delay(50);
  digitalWrite(STB_PIN_LIGHT, LOW);
  delay(50);
  digitalWrite(STB_PIN_LIGHT, HIGH);
  delay(50);
  digitalWrite(STB_PIN_LIGHT, LOW);
}

// Strobe tres-blink
void doStrobe2()
{
  digitalWrite(STB_PIN_LIGHT2, HIGH);
  delay(50);
  digitalWrite(STB_PIN_LIGHT2, LOW);
  delay(50);
  digitalWrite(STB_PIN_LIGHT2, HIGH);
  delay(50);
  digitalWrite(STB_PIN_LIGHT2, LOW);
  delay(50);
  digitalWrite(STB_PIN_LIGHT2, HIGH);
  delay(50);
  digitalWrite(STB_PIN_LIGHT2, LOW);
}

// Measure servo PWM signal
void measureServoSignal()
{
  int pinState = digitalRead(LL_PIN_SERVO);
  if(pinState == HIGH) { 
    // Comienzo del pulso PWM, marca el tiempo
    servoPulseStartTime = micros();
  } else {
    // Fin del pulso PWM, calcular la duración del pulso en mcs
    servoPulseWidth = (int)(micros() - servoPulseStartTime);

    // Si el canal del servo está invertido, utilice el inverso
    if (LL_SERVO_REVERSED) {
      servoPulseWidth = (1000 - (servoPulseWidth - 1000)) + 1000;
    }
  }
}

Ahh vaya, no esperaba semejante código.
Ahora si necesitamos un esquema. Tienes algo para proporcionarnos?
Servo, leds no 1 sino varios.. veamos. Que alimenta todo?
Debes mejorar la información.
No te guardes nada.

Cuando dices : le pongo la carga y deja de funcionar, uno debe tener claro a que carga te refieres, un solo LED, o algo mas.

Gracias.
Ahora (hoy) ya no me da tiempo de preparar documentacion y detalle.
Mañana lo hago.
Pero resumiendo, repito, no hay servo ni señal del mismo. No hago caso a esa seccion, aunque al final de codigo "void measureServoSignal()" no esta comentado.
Si esta definido: #define LL_PIN_SERVO 5, pero no conectado.
Solo uso los dos Strobe y los dos Fade. Para que funcionen al alimentar el circuito.
Obviamente, cuando digo carga, me refiero a todos los leds, es decir corto GND comun a todas salidas.
Repito gracias, mañana incluyo mas detalles.
¿Se pueden adjuntar .jpg o vinculo dropbox?

// Strobe settings
#define STB_PIN_LIGHT 4 // Número de pin para la salida de la luz estroboscópica
#define STB_PIN_LIGHT2 2 // Pin number for strobe2 light output
#define STB_BLINK_INTERVAL 2000000 // Intervalo de parpadeo de la luz estroboscópica en microsegundos

// Anti-collision beacon settings
#define ACB1_PIN_LIGHT 0 // Pin number for anti-collision beacon 1
#define ACB2_PIN_LIGHT 1 // Pin number for anti-collision beacon 2

Si mal no recuerdo, el pin 5 (donde está conectado el servo) por defecto tiene asignada la funcionalidad de pin de reset.
Si hay algo conectado puede ser por eso que no inicia, queda "clavado" en reset

Edito: Se cruzaron los posts, ya leí que no lo usas, olvídalo. :wink:

Pin 5 al aire.
Gracias. Mañana incluyo mas detalles.
Se pueden fotos o vinculos?

Un saludo
Juan

Se pueden subir fotos y vinculos pero preferiblemente sube todo aquí.

Solo arrastra las imagenes. O copia y pega.

Unas preguntas, ¿con qué alimentas el usb del attiny?
¿desde el ordenador o desde una fuente?
si es desde el ordenador, ¿usas un cable usb de 4 hilos o de 2?
¿puedes postear qué placa exactamente o esquema attiny tienes montado (me refiero a esa "plaquita" que dices que tienes montada)?
Saludos.

Hola, intentare aportar todo lo que pueda.

Lo alimento desde USB del pc con un cable de 4 hilos, ya que lo uso para transferencia de datos y cargar el programa desde Arduino, según imagen adjunta.

Vosotros direis.
¿Necesitais mas datos?

Tengo fuente decente de 5v.

Puedo cortar un cable USB y probar, si pensáis que pueda ser debido a que el PC sea insuficiente. Pero aunque los 4 leds que uso estuviesen a la vez al máximo serian 80mA como mucho mas el IC que según el datasheet, si no me equivoco, como mucho serian 8mA.

Aun asi los 2 led flash tienen tiempos cortos y nunca a la vez y los Beacon tienen "ACB_FADE_MAX 50" y luego un corto flash.

Gracias por vuestra atención.

Juan

Porque no aumentas las R a 220 solo para probar o ve quitando de a un led como para verificar lo mismo

Es decir, vamos a probar bajando la carga que ha de soportar el 85, si no entiendo mal.

Exacto, es solo una prueba a ver si lo tantos van por ahi.

En este tutorial usan 330 ohms pero esa esa la unica diferencia visible.
Viendo esto me sorprende que el tuyo no funcione.

Sé que no es lo mismo, pero por simplicidad voy a poner una R en el GND común a todas las salidas.
Que os parece?

No. Nunca uses una común a todas. Si todas esta activas esa R tien 5 corrientes, asi que debe tolerar esa disipación, En tu caso no será grande pero.. a ver 5x20= 100mA
P = I^2*R = 0.1^2x100= 1Watt
tienes que poner una R de 100 ohms 1W o la quemas.
Te das cuenta. No se si el código activa los leds de modo alternado o todas juntos.
Prueba con 330 a ver que resulta.

Gracias,

He visto ese esquema y su código. En el solo hay un led al mismo tiempo. OK.

Si has leído mi post #14, explicaba que rara vez puede darse un sobreconsumo.

Aun así, y como indicaba que se que no es lo mismo, quitare pereza que tampoco es tanto y voy a aplicar ese esquema, o valor de R, al mío.

De hecho voy a utilizar otro IC desde el principio pues, como este ha sido el primero con el que he trasteado, no sea que no esté completamente ok.

Lo dicho, cambio las R a 330 y elimino el código sobrante.

Gracias por vuestro apoyo.

Os cuento…