&& Verküpfungen vereinfachen?

Gast #719892
Lesenswert?

Hallo zusammen,

ich bastele gerade ein wenig an einer Steuerung herum. Leider ist diese 
Steuerung sehr komplex und von vielen Faktoren abhängig.

Im Moment frage ich diese Reihe von Faktoren z.B. folgendermaßen ab:

if((Bedingung1 <= Wert) && (Bedingung2 >= Wert) && ((Bedingung3 < Wert))


Da im Programm sehr viele von diesen Abfragen existieren, geht der 
Speicher von meinem 8kB Controller ganz fix flöten. Kann ich diese 
Abfragen irgendwie anders schreiben; damit nicht soviel Speicher dafür 
benötigt wird?
Gast #719936
Lesenswert?

@Berti,

Danke für den Tip aber die if/else Geschichte verwende ich schon. Bei 
der Switch/Case gibt es leider das Problem, dass nur Ausdrücke und keine 
Bedingungen agefragt werden können.



@Niels

Hi Niels, das mit dem KV-Diagramm werd ich mir mal anschauen.


@All
Hab mal ne Funktion aus dem Code angehangen, vielleicht hat noch wer ne 
Idee..
Angehängte Dateien:
#719971
Lesenswert?

Kontrolliers noch mal.
Meiner Meinung nach müsste deine Funktion äquivalent sein
zu:
1
void motor(){
2

3

4
  if( PWM_data > 128 ) {
5
    if( PWM_value < 120 )
6
      PWM_value += 10;
7

8
    else if( PWM_value <= PWM_data - 7 && PWM_value < 249 )
9
      PWM_value += 7;
10
  }
11

12
  else if( PWM_data < 128 ) {
13

14
    if( PWM_value > 136 )
15
      PWM_value -= 10;
16

17
    else if( PWM_value >= (PWM_data + 7) &&  PWM_value > 6 )
18
      PWM_value -= 7:
19
  }
20

21
  else {
22
    if( PWM_value < 119 )
23
      PWM_value += 10;
24

25
    if( PWM_value > 137 )
26
      PWM_value -= 10;
27
  }
28
}
Gast #719990
Lesenswert?

Danke Karl Heinz,

funktioniert einwandfrei und spart knapp 1% Speicherplatz.


Dann werd ich die anderen Teile im Code auch mal auf diese Weise 
umschreiben und schauen was am Ende dabei heraus kommt.
#720060
Lesenswert?

Du willst, daß der eine Wert dem anderen verzögert nachläuft, bis er 
gleich ist.
Wozu dann die Sonderbehandlung für 128?

1
void motor( void )
2
{
3
  int diff = PWM_data - PWM_value;
4

5
  if( diff > 10 )
6
    diff = 10;
7

8
  if( diff < -10 )
9
    diff = -10;
10

11
  PWM_value += diff;
12
}


Peter
Gast #720087
Lesenswert?

Hi Peter,

die Sonderbehandlung nur weil es zwei verschiedene Fälle sind. Von 128 
bis 255 läuft der Motor vorwärts. Bei 127 bis 0 läuft der Motor 
rückwärts. Dabei ist 127-128 Stillstand und 0/255 die maximale Drehzahl 
in die jeweilige Richtung.

Dazu kommt noch das der Motor schneller abbremsen als beschleunigen 
soll.

Aber dein Ansatz gefällt mir. Werd ich mal ausprobieren.
#720112
Lesenswert?

Frank wrote:

> Dazu kommt noch das der Motor schneller abbremsen als beschleunigen
> soll.

Das würde ich garnicht über eine Steuerlogic machen. Da würde ich eine 
Beschleunigungstabelle mit jeweils 128 Einträge pro Richtung im 
Flashspeicher anlegen.

Für die 256Byte sollte doch locker Platz sein...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren