Laufzeitprobleme mit ATMega328 Stand-Alone auf Platine

Hallo,

wie ich in meinem letzten Beitrag geschrieben habe, bin ich dabei mein Projekt vom Steckbrett auf die Platine zu bringen. Das erste Problem konnte ich lösen. Nun bin ich auf das nächste Problem gestoßen. Über einen Wippschalter kann ich den DC Motor und L298 Motortreiber in beide Richtungen betreiben. Wenn ich dies mit den Schalter tue, dreht sich der Motor zwar, aber ruckelig und nicht flüssig. Wenn ich eine Led an den SchiftRegister-Pin, der zum Motortreiber geht, anstecke um die Ansteuerung zu sehen, flackert diese auch. Somit gehe ich davon aus, dass ich entweder irgendwelche Einbrüche habe oder Laufzeitprobleme vom Mega habe??? Die Spannung am Mega und dem Schiftregister sind konstant 5 V (am Mega ist auch ein Kondensator).

Wenn ich den Mega auf mein Uno stecke und den Motor über das Steckbrett betreibe habe ich das Ruckeln nicht mehr.

Habt ihr eine Idee, was das sein könnte?

wenn ich den Motor mit der Platine betreibe, sehe ich, dass die Spannung von meinem Netzteil um 1 V etwa steigt! Wie kann das sein, Induktivität vom Motor?

Schaltplan und Bilder vom Aufbau bitte.

Schaltplan, Gute Fotos von allen Seiten und Sketch. Grüße Uwe

Also ich habe es nochmal auf dem Steckbrett und auf der Platine mit den verkürzten Code probiert. Hier der Code:

#include <SPI.h>
#include <LiquidCrystal_SPI.h>
#include "DS3232RTC.h" //http://github.com/JChristensen/DS3232RTC
#include "Time.h" //http://playground.arduino.cc/Code/Time
#include "Wire.h"
#include "Streaming.h"
#include <Timer.h>

//ANALOG
#define MOTORCURRENT 0
#define MOTORSCHALTER_RIGHT 2
#define MOTORSCHALTER_LEFT 3

enum DCMotorControl
{
    DC_MOTOR_ZERO,
    DC_MOTOR_RIGHT,
    DC_MOTOR_LEFT
};

#define HC595_LATCH 3
//pin connected to clock pin11 (sh_cp) of 74hc595
#define HC595_CLOCK 5
//pin connected to data pin14 in (ds) of 74hc595
#define HC595_DATA 4
#define NUMBER_OF_74HC595 1 
#define numOfRegisterPins_74HC595 NUMBER_OF_74HC595 * 8
boolean ShiftRegisterArray[numOfRegisterPins_74HC595];
enum ShiftRegister_01
{
    SR01_PIN0 = 0,
    SR01_MOTOR_LEFT,
    SR01_MOTOR_RIGHT,
    SR01_LCD_BACKLIGHT,
    SR01_HEATER,
    SR01_SIGNALLAMP
};

byte byMotorControl = 0;

void setup() {
  
  Serial.begin(115200);
  
    //=> Shiftregister
    pinMode(HC595_LATCH, OUTPUT);
    pinMode(HC595_DATA, OUTPUT);
    pinMode(HC595_CLOCK, OUTPUT);
    //reset all register pins
    ClearRegisters();
    SetRegisterPin(SR01_LCD_BACKLIGHT, HIGH);
    WriteRegisters(); //MUST BE CALLED TO DISPLAY CHANGES  //Only call once after the values are set how you need
    //<= Shiftregister

}

void ClearRegisters(){
    for (int i = numOfRegisterPins_74HC595 - 1; i >= 0; --i)
    {
        ShiftRegisterArray[i] = LOW;
    }
}

void WriteRegisters()
{
    digitalWrite(HC595_LATCH, LOW);

    for (int i = numOfRegisterPins_74HC595 - 1; i >= 0; --i)
    {
        digitalWrite(HC595_CLOCK, LOW);

        int val = ShiftRegisterArray[i];

        digitalWrite(HC595_DATA, val);
        digitalWrite(HC595_CLOCK, HIGH);

    }
    digitalWrite(HC595_LATCH, HIGH);
}
//set an individual pin HIGH or LOW
void SetRegisterPin(const int index, const int value)
{
    ShiftRegisterArray[index] = value;
}

void loop() {
    if (analogRead(MOTORSCHALTER_RIGHT) == 0)
    {
        byMotorControl = DC_MOTOR_RIGHT; //up
    }
    else if (analogRead(MOTORSCHALTER_LEFT) == 0)
    {
        byMotorControl = DC_MOTOR_LEFT; //down
    }
    else
    {
        byMotorControl = DC_MOTOR_ZERO;
    }
    

    if (byMotorControl == DC_MOTOR_ZERO)
    {
        SetRegisterPin(SR01_MOTOR_RIGHT, LOW);
        SetRegisterPin(SR01_MOTOR_LEFT, LOW);
    }
    else if (byMotorControl == DC_MOTOR_RIGHT)
    {
        SetRegisterPin(SR01_MOTOR_RIGHT, HIGH);
        SetRegisterPin(SR01_MOTOR_LEFT, LOW);
    }
    else //left
    {
        SetRegisterPin(SR01_MOTOR_RIGHT, LOW);
        SetRegisterPin(SR01_MOTOR_LEFT, HIGH);
    }

    WriteRegisters();
}

Beim Steckbrett habe ich kein Anstieg der Versorgungsspannung und der Motor läuft auch flüssiger.

Im Anhang das Schaltbild. Leider ist das nicht so professionell und hoffe man kann trotzdem alles gut erkennen.
Wenn ich eine Idee hätte, wo ich auf der Platine genauer schauen könnte. Theoretisch sollten doch die Dioden sowas abfangen???

PS: Die Dioden habe ich durchgemessen, die sind in Ordnung

ich meine auch, dass der Motor fest stehen bleibt, wenn beide Eingänge (Pin10 und 12) high oder low sind, Aber ich bin in der Lage die Welle mit der Hand dann zu drehen. Oder habe ich das falsch in Erinnerung?

Ich sehe immer noch keinen Schaltung und allgemeine Bilder vom Aufbau. Dir kann man so überhaupt nicht weiterhelfen.

Des weiteren steht im Datenblatt doch eindeutig drin, was der Motor genau macht, bei Pin 10 und Pin 12.

C = Pin 10, D = Pin 12 Motor vorwärts : C High, D Low Motor rückwärts: C Low, D High Motor stopp: (C und D) Low oder (C und D) High