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.
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!
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
/*
* 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);
}
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).
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.
Sólo yo
Arsenal
galleta desesperada
galleta desesperada
Arsenal
antonio51
antonio51
usuario1850479