... schön langsam denke ich eher in Richtung Hardware defekt da es nur die Steuerung der Fahrmotoren betrifft
Bei meinen Anfängen (Teillösungen zusammengeschnitten und auf einen Controller gebracht) hatte ich auch Probleme mit der Motorsteuerung.
Was half dann:
- Leitungstest Motorausgang vom Treiberbaustein zum Motoreingang auf Platine und Verdrahtung
- Leitungstest von Kurzschlüssen (Übersprechen) von einer Motorleitung zur andern
- GENAUE Inspektion der Schaltbefehle - also Testprogramm dass nacheinander für je 30 sec einen Motorpin nach dem andern schaltet - und das Ganze mit dem DMM nachverfolgen.
- Prüfung der PWM-Funktion statt Nur-Motorpinne-ein-aus
- GENAUE, aufmerksame (umständliche *gg*) Programmiererei, gut kommentierte Motoransteuerung, siehe Beispiel unten
- Zusammenbau der Grundfunktionen Motoransteuerung und NUR die in einem Test prüfen in der Art Mot1 vor, Mot1 zurück, Mot2 ...
- Die Motoren werden softwareseitig NUR über diese Funktionen geschaltet!!

Nur so, als (m)ein Beispiel - und das läuft und läuft. BTW: die Motoren werden softwareseitig NUR über diese Funktionen geschaltet!!
Code:
// ============================================================================= =
// Motoransteuerung mit RN VN2 MotorControl, hier werden die Drehrichtungen gesetzt
//   Anschlüsse am mega1284 auf MoCo4 (eigne Platine, Stand Anfang Sep14 ) :
//   Motor12 ist in Fahrtrichtung rechts, Rad rechts vom Motor
//   Motor34 ist in Fahrtrichtung links,  Rad links  vom Motor
//  Motorbefehle: Mxxxxvor => Rad bewegt Gefährt VORwärts etc.
//  A C H T U N G : Motoranschlüsse der VN haben (+) "innen" und GND/(-) "aussen"
//                  ###############              ##########          ############
//                      - - - - - - - - - -
//               XTAL1  PB6___9   20___VCC                              
//               XTAL2  PB7  10   19   PB5, SCK, _|-- 3,4 Guz           
//                      PD5  11   18   PB4, MISO                        
//  Mot12 _|-- 1,2  uz, PD6__12   17___PB3, MOSI, Reserve 2             
//  Mot12 _|-- 1,2 Guz, PD7  13   16   PB2, OC1B => PWM4 für Mot34      
//  Mot34 _|-- 3,4  uz, PB0  14   15   PB1, OC1A => PWM1 für Mot12      
//   -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
//      vgl. Erklärung von Hubert.G     (zu L293D)
// https://www.roboternetz.de/community/threads/59146
//-Wieso-benötigt-RN-Control-(1-4-)-für
//-integrierten-Motortreiber-gleich-3-freie-Ports?p=558716&viewfull=1#post558716
//      Zitat   Mit Setzen von Kanal 1 und 2 auf 0 ist der Motor im Freilauf
//              Werden beide Kanäle auf 1 gesetzt wird der Motor gebremst
//   -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
//                -----------------------
//  Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor
//             r r r r r r r Motor 1,2 = rechter Motor r r r r r r
// ============================================================================= =
  void Mrechtsvor (void)        // Recht Mot12 dreht rechts=Uhrzeiger=math-negativ
 {                              //   dann fährt recht. Rad "vorwärts" = Mrechtsvor
  TCCR1A |=  (1<<COM1A1);       // Clear/set OC1A on Cmp Match enabled         132
  PORTD  |=  (1<<M11);          // => 1; Setze M1-IN1 high
  PORTD  &= ~(1<<M12);          // => 0; Setze M1-IN2 low
  m12dir  =  1;                 // m12dir ist positiv, weil Antrieb VORWÄRTS
 }                              //
// ============================================================================= =
  void Mrechtszur (void)        // ReMot12 dreht links=Gegenuhrzeigersinn=math-pos
 {                              //   .. dann fährt rechtes Rad "rückwärts"
  TCCR1A |=  (1<<COM1A1);       // Clear/set OC1A on Cmp Match enabled         132
  PORTD  &= ~(1<<M11);          // => 0; Setze M1-IN1 low
  PORTD  |=  (1<<M12);          // => 1; Setze M1-IN2 high
  m12dir  = -1;                 // m12dir ist negativ, weils Antrieb RÜCKWÄRTS
 }                              //
// ============================================================================= =
  void Mrechtsaus (void)        // Motor 12 aus
 {                              //
  TCCR1A &= ~(1<<COM1A1);       // Disable clear/set OC0B on Compare Match
  OCR1A   =   0;                // PWM-Wert Mot12 auf Null setzen
  PORTD  &= ~(1<<M11);          // Setze M1-IN1 low 
  PORTD  &= ~(1<<M12);          // Setze M1-IN2 low => beide low => Freilauf
  m12dir  =  0;                 //
 }                              //
// ============================================================================= =
  void Mrechtsbrms (void)       // Motor 12 BREMSEN
 {                              //
  TCCR1A &= ~(1<<COM1A1);       // Disable clear/set OC0B on Compare Match
  OCR1A   =   0;                // PWM-Wert Mot12 auf Null setzen
  PORTD  |=  (1<<M11);          // Setze M1-IN1 high 
  PORTD  |=  (1<<M12);          // Setze M1-IN2 high => beide high => Bremsen
  m12dir  =  0;                 //
 }                              //
//                -----------------------
//  Drehrichtungsbefehle für Motor 3,4 = "linker" Motor
//             l l l l l l l Motor 3,4 = linker Motor l l l l l l
// ============================================================================= =
  void Mlinksvor (void)         // LiMot34 dreht im Gegenuhrzeigersinn = math. neg
 {                              //   dann fährt linkes Rad "vorwärts" = Mlinksvor
  TCCR1A |=  (1<<COM1B1);       // Enable clear/set OC0B on Compare Match
  PORTC  &= ~(1<<M41);          // => 0; Setze M4-IN1 low
  PORTC  |=  (1<<M42);          // => 1; Setze M4-IN2 high
  m34dir =  1;                  // m34dir ist positiv, weils Antrieb VORÄRTS
 }                              //
// ============================================================================= =
  void Mlinkszur (void)         // Linkr Mot34 dreht im Uhrzeig=math-pos.
 {                              //   .. dann fährt linkes Rad "rückwärts"
  TCCR1A |=  (1<<COM1B1);       // Enable clear/set OC0B on Compare Match
  PORTC  |=  (1<<M41);          // => 1; Setze M4-IN1 high
  PORTC  &= ~(1<<M42);          // => 0; Setze M4-IN2 low
  m34dir = -1;                  // m34dir ist negativ, weil Antrieb RÜCKWÄRTS
 }                              
// ============================================================================= =
  void Mlinksaus (void)         // Motor 34 aus
 {                              //
  TCCR1A &= ~(1<<COM1B1);       // Disable clear/set OC1B on Compare Match
  OCR1B        =   0;           // PWM-Wert Mot34 auf Null setzen
  PORTC  &= ~(1<<M41);          // => 0; Setze M4-IN1 low
  PORTC  &= ~(1<<M42);          // => 0; Setze M4-IN2 low
  m34dir  =  0;                 //
 }                              //
// ============================================================================= =
  void Mlinksbrms (void)        // Motor 34 BREMSEN
 {                              //
  TCCR1A &= ~(1<<COM1B1);       // Disable clear/set OC1B on Compare Match
  OCR1B   =   0;                // PWM-Wert Mot12 auf Null setzen
  PORTC  |=  (1<<M41);          // => 1; Setze M4-IN1 high 
  PORTC  |=  (1<<M42);          // => 1; Setze M4-IN2 high => beide high = Bremsen
  m34dir  =  0;                 //
 }                              //
// ============================================================================= =
//      Wahrheitstabelle für die Motoren gemäß VN2 und Drehsinn-Definitionen
// #define        M11     PD6     // M1-IN1 auf PD6     Motor 1 (12) weil er auf
// #define        M12     PD7     // M1-IN2 auf PD7       den Anschlüssen 12 liegt
// #define        M41     PC4     // M4-IN1 auf PC4     Motor 4 (34) weil er auf
// #define        M42     PC5     // M4-IN2 auf PC5       den Anschlüssen 34 liegt
// - - - - - - - - - - - - - - -
//  MoRe        "vor"  =:  Vorwärtsfahrt        "rechts"  =:  Drehsinn Mot
//  Beispiel    mot12 dreht mathematisch negativ bei Befehl "vor" = "rechts"
//              vor/re  zur/li  stop    brems   vor/zur = Rad-/Fortbewegung
//      M11=    1       0       0       1       re / li = Motordrehrichtung
//      M12=    0       1       0       1
// - - - - - - - - - - - - - - - -
//      MoLi    =:      Mot34, "vor/links" dreht Motor mathematisch positiv
//              vor/li  zur/re  stop    brems   vor/zur = Rad-/Fortbewegung
//      M41=    1       0       0       1       re / li = Motordrehrichtung
//      M42=    0       1       0       1
// - - - - - - - - - - - - - - -

// ============================================================================= =
// =====  ENDE    Subroutinen  ================================================= =
// ============================================================================= =