18 votos

El microcontrolador funciona en la protoboard, pero no en la PCB (lo que se ha demostrado que es correcto)

Resumen : Tengo dos circuitos: Uno en breaboard y otro en PCB. Tengo dos microcontroladores: Uno comercial (preprogramado) y uno personal (con el que intento recrear el comercial). El uC comercial funciona en ambos circuitos y mi recreado funciona solo en el breadboard. No entiendo como 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. Trato de ser lo más exhaustivo posible con esta pregunta.

He comprado un sencillo circuito de dados eléctricos, que "tirará" un dado con sólo pulsar un botón. Esto utiliza LEDs y un uC para hacer y vino preprogramado (ver abajo para una imagen). Cuando se pulsa el botón, los LED parpadearán y cuando se suelta, el número tirado se mantendrá durante 3 segundos, hasta que los LED se apagan. Esto es super simple, que consiste sólo en LEDs, resistencias, baterías, un botón, y un uC que es ATTiny13 por Atmel.

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

Ahora, tengo los esquemas de la comercial (ver primera imagen de abajo) y reconstruido todo en mi protoboard (ver segunda imagen de abajo). He validado este circuito tomando el ATTiny13 de la versión comercial (es extraíble debido a un zócalo) y lo puso en mi circuito hecho a sí mismo. Todo funciona perfectamente.

Entonces empecé a programar mi primer ATTiny13. Hice algunas pruebas sencillas de parpadeo de LEDs y luego probé un script de dados de una página web para probarlo (ver código más abajo). Todo esto funciona perfectamente en mi protoboard. También rodar los dados funciona muy bien.

En el momento, pongo esto en el PCB comercial (con los mismos esquemas), nada funciona. Ni el script del parpadeo ni el de los dados hacen que parpadee ningún LED. Pulsando el botón no cambia nada.

Se me ocurren muchas cosas que podrían ser un problema, pero todo se reduce a un punto: "Cuando la placa de circuito impreso y el circuito de la protoboard tienen el mismo esquema y son similares, un uC que funcione en uno, funcionará en el otro". Esto es cierto para el comercial, pero no para el mío. Estoy realmente desconcertado por esto y mis limitados conocimientos de electrónica me están alcanzando ahora. ¿Tal vez los PCBs se comportan de manera diferente después de todo? He comprobado a fondo ambos circuitos y parecen ser exactamente iguales a 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 descuidar algo fundamental aquí.

Gracias por tomarte el tiempo de leer y responder, ¡te lo agradezco mucho!

Recursos

Información general

R1 - 5.6k Ohm
R2 - 10k Ohm
R3 R4 R6 - 15 Ohm
R5 - 120 ohmios

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

Microcontrolador: ATTiny13 Ficha de datos

Para la programación, utilizo el IDE Arduino y un Arduino Nano como ISP (he seguido esta guía ). Programo el ATTiny con los siguientes ajustes (aunque apenas sé nada sobre el significado de los mismos):

BOD: 4.3V
EEPROM: EEPROM retenida
Reloj: 1,2 MHz, osc. interno
Horario: Micros desactivados

Esquema del circuito

Circuit Schematic

Circuito Breadboard

Breadboard Circuit

Circuito PCB

PCB Circuit

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);
}

26voto

Justme Puntos 201

El problema es el nivel de 4,3V BOD (brown-out detector) combinado con pilas viejas.

El nivel de DBO de 4.3V no tiene sentido ya que el microcontrolador estará en reset si las baterías actualmente sólo proporcionan 4.18V.

Utilice un nivel de DBO más bajo.

2.7V nivel de DBO 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 a unos 0,9 V por celda (2,7 V).

11voto

Spehro Pefhany Puntos 90994

Suponiendo que has añadido el condensador de bypass que faltaba, prueba esto:

Desenchufa la MCU y mide los voltajes en el zócalo con respecto a 4- confirma que 8 y 1 son 5V. Confirme que 5 es 0V y se convierte en 5V cuando se pulsa el interruptor.

A continuación, puentee una resistencia de 150 ohmios de 8 a cada uno de 3, 2, 7 y 6 y confirme para cada uno que los LEDs esperados se encienden.

Si todo es correcto, traslada el chip de la protoboard a la placa de circuito impreso, parece que son chips diferentes.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X