Hallo,

bin gerade dabei den Rasenmäher und die Software umzubauen, etwa in verbesserte Drehzahlregelung.
Da stellt sich die Frage wie sehr Interrupts den Kontroller auslasten, so dass das eigentliche Programm vielleicht nicht mehr richtig ausgeführt werden kann.
An Interrupts gibt es:
Motordrehzahl 1: 180 Impulse/s nur zählen
Motordrehzahl 2: 180 Impulse/s nur zählen
Motordrehzahl 3: 200 Impulse/s nur zählen
USART mit 9600Baud, FiFo Buffer, Buffer wird erst gestartet wenn Startzeichen erkannt wird
Timer mit 10ms, im Timer Interrupt regelmäßig PID Berechnung Motordrehzahlen

Mit diesem Timer werden wie Tasks rechenintensive Funktionen getriggert, zB 8x in der Sekunde PID Motordrehzahl 1 und 2 berechnen, 4x in der Sekunde PID Motordrehzahl 3. Ein neuer Task wird mit mindestens 10ms Abstand vergeben, lt Simu benötigt die längste Funktion 0.7ms.
zB Tasks timen:
Code:
tasktimer++;

    if (tasktimer>=TASKdauer_ms) {tasktimer=0;}
    if (tasktimer==TASK250ms) {taskflag=task250msflag;}
    
    if (tasktimer==TASKFunkdatenA) {taskflag=FunkdatentaskA;} 
    if (tasktimer==TASKFunkdatenB) {taskflag=FunkdatentaskB;} 
    if (tasktimer==TASKmessermotor)
        {
            drehtemp=(short)60*(short)odo_messer;
         .
         .
        }
Kann das ein Atmega mit 16Mhz schaffen?
Momentan gibt es nur Motordrehzahl 3 und PID Regelung im Interrupt, Motor 1 und 2 max 4 Impulse/s und UART durch polling.
Wenn noch das Erfassen der Motordrehzahlen 1 und 2 sowie USART als Interrupts dazukommen, geht das noch, oder kommt er aus den Interrupts gar nicht mehr raus?

LG!