El microcontrolador funciona en la placa de pruebas, pero no en la PCB (que se ha demostrado que es correcto)

Resumen : tengo dos circuitos: uno en tablero y otro en PCB. Tengo dos Microcontroladores: Uno comercial (preprogramado) y uno personal (con el que trato de recrear el comercial). El uC comercial funciona en ambos circuitos y mi recreado funciona solo en el protoboard. No entiendo cómo uno puede funcionar en ambos y el otro no.

Contexto

Descargo de responsabilidad : Todos los recursos como esquemas, imágenes, código, etc. se pueden encontrar a continuación. Intento ser lo más completo posible con esta pregunta.

Compré un circuito de dados eléctrico simple, que "tirará" un dado con solo presionar un botón. Esto usa LED y un uC para hacer y viene preprogramado (vea una imagen a continuación). Cuando se presiona el botón, los LED parpadearán y cuando se suelte, el número rodado permanecerá durante 3 segundos, hasta que los LED se apaguen. Esto es súper simple, consta solo de LED, resistencias, baterías, un botón y un uC que es ATTiny13 de Atmel.

Mi objetivo es recrear la programación del uC yo mismo y eventualmente construir circuitos similares yo mismo (comenzar poco a poco, ¿no?).

Ahora, tengo los esquemas del comercial (ver la primera imagen a continuación) y lo reconstruí todo en mi tablero (ver la segunda imagen a continuación). Validé este circuito tomando el ATTiny13 de la versión comercial (es extraíble debido a un enchufe) y lo puse en mi circuito hecho por mí mismo. Todo funciona perfectamente.

Luego comencé a programar mi primer ATTiny13. Hice algunas pruebas simples de parpadeo de LED y luego probé un script de dados de un sitio web para probarlo (vea el código a continuación). Todo esto funciona perfectamente bien en mi protoboard. También tirar los dados funcionará muy bien.

En el momento en que puse esto en el PCB comercial (con los mismos esquemas), nada funciona. Ni la secuencia de comandos parpadeante ni la secuencia de comandos de dados harán que ningún LED parpadee. Presionar el botón no cambiará nada.

Me vienen a la mente muchas cosas que podrían ser un problema, pero todo se reduce a un punto: "Cuando la placa de circuito impreso y el circuito en la placa de prueba son de hecho el mismo esquema y son similares, un uC que funciona en uno, funcionará en el otro". otro." Esto es cierto para el comercial, pero no para el mío. Estoy realmente desconcertado por esto y mi conocimiento limitado de electrónica ahora me está alcanzando. ¿Quizás los PCB se comportan de manera diferente después de todo? Revisé a fondo ambos circuitos y parecen ser exactamente como los esquemas.

Estoy muy feliz por cualquier ayuda o pista en la dirección correcta. Actualmente ni siquiera sé qué buscar. Creo que podría supervisar algo fundamental aquí.

Gracias por tomarse el tiempo de leer y responder, ¡muchas gracias!

Recursos

Información general

R1 - 5,6k ohmios
R2 - 10k ohmios
R3 R4 R6 - 15 ohmios
R5 - 120 ohmios

Vcc son tres pilas de 1,5V (4,5V)

Microcontrolador: ATTiny13 Hoja de datos

Para la programación, utilizo el IDE de Arduino y un Arduino Nano como ISP (seguí esta guía ). Programo el ATTiny con las siguientes configuraciones (aunque no sé casi nada sobre el significado de las mismas):

DBO: 4,3 V
EEPROM: EEPROM retenida
Reloj: 1,2 MHz, oscilador interno.
Temporización: Micros deshabilitados

Esquema del circuito

Esquema del circuito

Circuito de placa de pruebas

Circuito de placa de pruebas

Circuito PCB

Circuito PCB

Código

/* 
 *  The LEDs are arranged like this
 *  
 *  LED3      LED6
 *  LED2 LED7 LED5
 *  LED1      LED4
 *  
 *  
 *  
 *  AtTiny13 Pins
 *  ---------------------
 *          1_o___8 5V
 *  LED34   2_____7 LED25
 *  LED7    3_____6 LED16
 *  GND     4_____5 BTN
 *  -----------------------
 *  
 *  
 */

// The pins will be addressed using their PB Number (see above)
int pinLed16 = 1;
int pinLed25 = 2;
int pinLed34 = 3;
int pinLed7 = 4;
int pinButton = 0;
int buttonState;
long ran;
int time = 2000;

void setup ()
{
  pinMode (pinLed16, OUTPUT);
  pinMode (pinLed25, OUTPUT);
  pinMode (pinLed34, OUTPUT);
  pinMode (pinLed7, OUTPUT);
  pinMode (pinButton, INPUT);
  // This resulted in an error, so it is commented out for now.
  //randomSeed(analogRead(A3));
}

void loop()
{
  buttonState = digitalRead(pinButton);
  if (buttonState == HIGH){
    ran = random(1, 7);
    if (ran == 1){
      digitalWrite (pinLed7, HIGH);
      delay (time);
    }
    if (ran == 2){
      digitalWrite (pinLed16, HIGH);
      delay (time);
    }
    if (ran == 3){
      digitalWrite (pinLed34, HIGH);
      digitalWrite (pinLed7, HIGH);
      delay (time);
    }
    if (ran == 4){
      digitalWrite (pinLed16, HIGH);
      digitalWrite (pinLed34, HIGH);
      delay (time);
    }
    if (ran == 5){
      digitalWrite (pinLed16, HIGH);
      digitalWrite (pinLed34, HIGH);
      digitalWrite (pinLed7, HIGH);
      delay (time);
   }
   if (ran == 6){
      digitalWrite (pinLed16, HIGH);
      digitalWrite (pinLed25, HIGH);
      digitalWrite (pinLed34, HIGH);
      delay (time);
   }
  }
  digitalWrite (pinLed16, LOW);
  digitalWrite (pinLed25, LOW);
  digitalWrite (pinLed34, LOW);
  digitalWrite (pinLed7, LOW);
}
¿Ha medido con un multímetro cuál es el voltaje de suministro real en las baterías de la placa de prueba en comparación con lo que sea que esté alimentando la placa comercial?
Obviamente lo omitieron, pero intentaría agregar un condensador de derivación de 100 nF de Vcc a GND lo más cerca posible de µC.
Hola, gracias por la rápida respuesta. La tensión de alimentación es de 4,18 en el circuito pcb y de 4,57 en el circuito protoboard.
@Arsenal, ¿puede señalarme un buen recurso con respecto a los condensadores de derivación? No entiendo ese concepto todavía y necesito aprenderlo.
this y this podrían ayudarlo a comenzar; tenga en cuenta los enlaces allí también.
@DesperateCookie //semilla aleatoria(analogRead(A3)); esto debería ser: randomSeed(analogRead(3)); como se usa en ATtiny85?
Tenga en cuenta que los "breadbord" son muy "capacitivos". Entonces, ¿el comportamiento diferente?
Nunca coloque un microcontrolador en una placa sin un condensador de derivación conectado a su pin de alimentación. Incluso si cree que no es necesario, comience con él conectado y luego, si necesita ahorrar los 2 centavos adicionales, intente eliminarlo una vez que todo esté funcionando.

Respuestas (2)

El problema es el nivel de DBO (detector de caída de tensión) de 4,3 V combinado con baterías viejas.

El nivel de DBO de 4,3 V no tiene sentido ya que el microcontrolador se reiniciará si las baterías actualmente solo proporcionan 4,18 V.

Use un nivel de DBO más bajo.

El nivel de DBO de 2,7 V debería estar bien para empezar. Las baterías llenas pueden proporcionar 1,6 V por celda (4,8 V) y se consideran vacías con alrededor de 0,9 V por celda (2,7 V).

Esa es una buena pista. Y si también debe funcionar con 3x NiMH, también debe ser menor.
Parece que en "arduino", para ATTINY85, ¿esto está configurado en 2.7V? Para ATTINY13 ajustado a 4,3 V, confirmado. Se puede cambiar muy fácilmente.
¡Te podría dar un abrazo ahora mismo! Ya estaba mentalmente preparado para una solución larga y difícil, pero en realidad esto era lo único que necesitaba. ¡Funciona maravillosamente ahora! ¡Muchas gracias por tomarse el tiempo y dar esta respuesta!
Siempre es bueno confirmar el núcleo de estas discusiones. ¿Supongo que fue el MicroCore de MCUDude? No tiene ningún efecto a menos que realmente queme los fusibles, por lo que los valores predeterminados de fábrica también pueden ser importantes.
Sí exactamente. ¿Qué pasa con los núcleos? ¿Cuál es su propósito?

Suponiendo que haya agregado el capacitor de derivación faltante, intente esto:

Desenchufe la MCU y mida los voltajes en el zócalo en relación con 4; confirme que 8 y 1 son 5V. Confirme que 5 es 0V y se convierte en 5V cuando se presiona el interruptor.

Luego conecte una resistencia de 150 ohmios de 8 a cada uno de los 3, 2, 7 y 6 y confirme para cada uno que se enciendan los LED esperados.

Si todo sale bien, mueva el chip de la placa de pruebas a la PCB; parecen ser chips diferentes.

Hola, aunque el otro fue la solución, este es un consejo valioso para la depuración. Gracias, lo tendré en cuenta :)