Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

Der Ursprung dieses Forum reicht bis in das Jahr 2008 zurück


Schwellwert /Hysterese programmieren

#1 von BoomBoomMagic , 26.01.2019 19:07

Viele haben schon mal vor dem Problem gestanden , eine Hysterese bzw. einen Schwellwert auslesen zu müssen.

Das ist im Grunde nicht schwer und viele programmieren dies auf einfachste Weise wie z.B. :

Schleife :
If Wert_xyz >= Schwellwert then .....

If Wert_xyz < Schwellwert then .....
goto Schleife

grundsätzlich und für den Menschen logisch.

In den meisten Fällen funktioniert das auch , insbesondere wenn "nur" LED's zu schalten sind.
In Wahrheit kann dies aber zu ungewollten Effekten führen und für das ein oder andere Baueil sogar schädlich enden.


Wenn jetzt z.B. die Schleife durchlaufen wird, der Wert_xyz IST größer als der Schwellwert , .....
wird eine Ausführung je nach Code gemacht, da hier jetzt das then erfolgt.
Aber ...... wenn jetzt beim nächsten (Schleifen)-Durchgang der Wert_xyz sich nicht geändert hat und somit immer
noch >= dem Schwellwert ist , wird wieder das then zutreffen und es wird wieder die gleiche Ausführung wie zuvor erfolgen.


Wenn diese Ausführung z.B. das Wechseln von 2 LED Zuständen ist ( High/Low) , tut denen das nicht so "weh"
und wenn die Picaxe schnell genug ist , bekommt das menschliche Auge das auch nicht wirklich mit.
Ist es aber ein anderes Bauteil, was evtl. etwas empfindlich darauf reagiert , das ständig AN geschaltet wird , obwohl
es ja schon AN ist , ..... kann das unter Umständen solch Bauteil in Mitleidenschaft ziehen.

Darum sollte man die Hysterese etwas konkreter gestalten in dem man zwar wie gehabt fragt :

If Wert_xyz >= Schwellwert then .....

aber dann noch mal explizit nachfragt , ob eine zugehörige Ausführung schon erfolgt ist .
Denn dann muß diese nicht wiederholt erfolgen.


Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 

#rem
 
Pinbelegung
----
V+ -| |- GND
| |
Serin -| |- c.0/Serout
| |
ADC/c.4 -| |- c.1 LED rot
| |
c.3 -| |- c.2 LED grün
----
 

 

#endrem
 

#picaxe 08m2
 
let dirsc=%00000111
 
symbol Schwellwert = w0
symbol ADC_Messung = w1
symbol rot = b4
symbol gruen = b5
symbol aus = 0
symbol an = 1
 

Schwellwert=100
 
Do
 
readadc10 c.4,ADC_Messung ' Spannung am Poti messen
 

if ADC_Messung>=Schwellwert then ' wenn Spannung >= Schwellwertvorgabe ...
if rot=aus then ' wenn rote LED noch NICHT an ...
gosub schalte_rot ' Sprung zur Routine : schalte_rot
endif
endif
 
if ADC_Messung<Schwellwert then ' wenn Spannung < Schwellwertvorgabe ...
if gruen =aus then ' wenn grüne LED noch NICHT an ....
gosub schalte_gruen ' Sprung zur Routine : schalte_gruen
endif
endif

loop
end
 

schalte_rot:
rot=an ' merken das rote LED jetzt an ist
gruen=aus ' merken das grüne LED jetzt aus ist
high c.1 ' rote LED anschalten
low c.2 ' grüne LED ausschalten
return
 

schalte_gruen:
gruen=an ' merken das rote LED jetzt aus ist
rot=aus ' merken das grüne LED jetzt an ist
low c.1 ' rote LED ausschalten
high c.2 ' grüne LED anschalten
return
 
 



In diesem Codebeispiel wird erst dann ausgeführt wenn :
a) entsprechender Schwellwert erreicht
b) noch keine entsprechende Ausführung erfolgte

Das verschnellert zum Einen den Code und zum Anderen schützt es das(die) Bauteil(e)
die angeschlossen sind und geschaltet werden sollen.

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


   

Servo per ADC steuern
Zufallszahl richtig berechnen

Picaxe Editor 5.5.5 Download
Update auf Picaxe Editor 5.5.6 Download
Picaxe Editor 6.x.x.x Download
Manual1.pdf        -      Grundwissen Download
Manual2.pdf        -      Befehle Download
Manual3.pdf        -      Beispiele Download


Press [Backspace] for back to Menu


Counter
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz