Tengo una idea muy clara: los motores causan tanto ruido en la fuente de alimentación de 5 V que el microcontrolador se reinicia continuamente.
El AVR tiene una detección de reducción de tensión que provoca un restablecimiento interno cuando la tensión de alimentación cae por debajo de un nivel preestablecido.
Elnivelesprogramable,consultelatabla28-4enla hoja de datos . No lo inhabilitaría, pero tal vez ajuste el nivel.
desacoplamiento !!
Desacople correctamente el controlador: eso es 100nF directamente en los pines 7 y 8. Con un ruido de + 5V puede agregar un 1 \ $ \ mu \ $ F y un 10nF, el más pequeño más cercano a los pines.
Desacople los motores, con 100 \ $ \ mu \ $ F a través de sus conexiones.
Entonces, nunca conecte su microcontrolador directamente a la misma fuente de alimentación que un motor. Aíslelos con diodos de su regulador de voltaje y coloque un capacitor de 100 \ $ \ mu \ $ F después del diodo del microcontrolador. Si no le gusta la caída de voltaje del diodo (le dará 4.3V en lugar de 5V), entonces agregue un diodo entre la conexión a tierra del regulador de voltaje y la conexión a tierra. Eso elevará el voltaje de salida a 5.7V, de modo que compensa la caída de voltaje en los otros diodos.
Tu circuito de reinicio también es inusual. No tienes control sobre la constante de tiempo. La mayoría de las veces, conectará un condensador del pin de reinicio a tierra y una resistencia a Vcc.
editar
Rocket surgeon y Nathan ya te informaron sobre las resistencias para los transistores. Por el momento solo existe la resistencia interna de los MOSFET de salida que limitan la corriente de base. Esta resistencia es solo de 25 \ $ \ Omega \ $, por lo que tendrá 170mA de cada salida. Eso es ciertamente daño a tu controlador. Añadir una resistencia de serie
\ $ R < \ dfrac {(5V - 0.7V) \ times 400} {I_C \ times 2} \ $
donde \ $ I_C \ $ es la corriente del motor, \ $ 400 \ $ la ganancia actual de los transistores y \ $ 2 \ $ un margen de seguridad.