Forum: Mikrocontroller und Digitale Elektronik Wert soll um 8% pro Sekunde wachsen


von Gert (Gast)


Lesenswert?

Ein Interruptservice wird mir 400 Hz angesprochen. Nun soll ein Wert pro 
Sekunde um 8% wachsen. Also addier ich zu dem Wert pro 
Interrupt-Ereignis 8%/400Hz. Stimmt das ... ich glaub nicht. Steh aber 
gerade total auf'm Schlauch ... brauche hilfe!

Grüße

von Uhu U. (uhu)


Lesenswert?

0,08 / 400 = 0,0002

von was-willst-du (Gast)


Lesenswert?

Wie oft wird der Interrupt ausgelöst, mit 400 Hz, hab ich das richtig 
gelesen?

Pro Sekunde 8% sind wohl für einen Interrupt:  0,08 : 400

Kann man ja fast im Kopf ausrechnen.

von Gert (Gast)


Lesenswert?

Klar! Danke euch. Ich glaub ich sollte mich mal auf's Ohr legen! ;-)

von was-willst-du (Gast)


Lesenswert?

Nicht auf's Ohr, sondern auf's Bett.

von Roland P. (pram)


Lesenswert?

Ich hau mich auch gleich aufs Ohr, aber meiner Meinung nach falsch:

nach 400x ist der Wert um 8,3% gewachsen: 1,0002^400 = 1,0833 
(Stichwort: Zinseszins)

Was du willst ist 1,08^(1/400) = 1,0001924211134082521262781155983

Wobei ich bezweifle, dass der AVR das so genau rechnen kann, 
insbesondere könnte es sein dass sich durch so oftmaliges Anwenden einer 
Float-Operation irgendwelche Rundungsfehler hochschaukeln.

Gruß
Roland

von was-willst-du (Gast)


Lesenswert?

Die Zinseszins-Rechnung greift nur, wenn man jedes Mal, also bei jedem 
Interrupt berechnet:

neuer Wert = alterWert*0,08/400


Wenn aber von einem Startwert ausgegangen wird, so ergibt sich:

neuerWert = Startwert*0,08/400 + alterWert


Die Frage ist nur, welche Aufgabenstellung ist korrekt? Das kann nur 
Gert klären.

von Gert (Gast)


Lesenswert?

Also angenommen ich Starte bei Null. Dann soll der Wert mit 8% pro 
Sekunde steigen. Bei 400Hz sollte er ja dann nach 12.5 Perioden bei 100% 
sein:
(0.08/400)*400)*12.5=1

Aber irgendwas mach ich glaube ich noch falsch ...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Bei 400Hz sollte er ja dann nach 12.5 Perioden bei 100%sein:
Das hat mit 400Hz noch gar nichts zu tun: (100%)/(8%/s) = 12,5s

> Aber irgendwas mach ich glaube ich noch falsch ...
Ja, warum? Was stimmt nicht?
Wo ist der Wert nach 12,5 Sekunden?
Mit welchen Zahlen rechnest du (integer oder float)?

von Route_66 (Gast)


Lesenswert?

Wenn bei Null gestartet wird, ist auch nach 12,5 s der Wert immer noch 
Null. 8% von  Null sind Null. Mir fallen sofort 'zig 
Prozentrechnungswitze ein, viele über Blondinen.

von Matthias L. (Gast)


Lesenswert?

Was solls denn werden? Eine Art Anstiegsbegrenzung? Oder eine Rampe oder 
was?

Gib mal paar mehr Infos und vielleicht ein zwei Beispiele. Wo kommen 
Werte her, die 8% je Sekunde steigen sollen...?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 8% von  Null sind Null.
>>> Bei 400Hz sollte er ja dann nach 12.5 Perioden bei 100% sein
Es soll offenbar einfach bei jedem Timertic ein Wert dazuaddiert werden, 
bis nach 12,5 sec der Wert 1 erreicht ist.

Manche verwechseln das mit Prozentrechnen ;-)

Das ist wie mit der einen Frage:
Auf einem Teich mit einer Oberfläche von 0,8765km² wachsen Seerosen mit 
einer Oberfläche von 17,6789dm². Jeden Tag verdoppelt sich die Anzahl 
der Seerosen. Schon nach 22 Tagen ist die gesamte Teichfläche mit 
Seerosen bedeckt. Frage: wann war der Teich zur Hälfte bedeckt?

Wer die Antwort weiß:
bitte noch ein wenig warten, dass auch andere ihren Spass haben ;-)

von Gert (Gast)


Lesenswert?

Genau, eine Rampe soll das werden um ein sprunghaftes Eingangssignal 
linear zu verzögern. Wenn z.B. das Eingangssignal von Null auf 50% des 
max. Wertes springt, soll der Wert nur mit 8% pro Sekunde steigern. 
Vielleicht drücke ich mich mit den %_Wert auch falsch aus ... bin gerade 
total verwirrt

von Gert (Gast)


Lesenswert?

Also das mit den Seerosen weiß ich (hoff ich doch). Das ja mal ein gutes 
Zeichen ;-)

Hast das von 9live ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Hast das von 9live ;-)
Nein, auswendig gelernt ;-)
Es ist erstaunlich, wie oft man mit solchen simplen Aufgaben eine 
Stammtischrunde zu lang anhaltenden Diskussionen anregen kann.

von Dieter E. (netdieter) Benutzerseite


Lesenswert?

9Live  :-))

Versuch doch mal Dein Problem in eine einfache Geradengleichung zu 
packen.
y= mx +b

Das hilft vielleicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>>> Hast das von 9live ;-)
>> Nein, auswendig gelernt ;-)
> 9Live  :-))
Mann, ich wusste gar nicht, dass es sowas wie 9live gibt (zu dieser 
Bildunglücke stehe ich und ich werde die auch nicht weiter ausmerzen).
So ein Pech, das ist echt miserables Timing, dass die dort irgendwo auch 
gerade diese Frage gestellt haben :-/

Also eine andere:
Ich habe zwei halbvolle Weingläser, eines enthält Weißwein, das andere 
Rotwein (100ml). Jetzt nehme ich jetzt einen Teelöffel (z.B. 5ml) 
Weißwein heraus, schütte den in den Rotwein, rühre den dann um, und 
nehme danach einen Teelöffel dieses Gemischs heraus un schütte den 
zurück in den Weißwein.
Habe ich jetzt mehr Weißwein im Rotwein oder umgekehrt oder was?

von Norgan (Gast)


Lesenswert?

> Genau, eine Rampe soll das werden um ein sprunghaftes Eingangssignal
> linear zu verzögern. Wenn z.B. das Eingangssignal von Null auf 50% des
> max. Wertes springt, soll der Wert nur mit 8% pro Sekunde steigern.
> Vielleicht drücke ich mich mit den %_Wert auch falsch aus ... bin gerade
> total verwirrt

Das wird nie eine Rampe, wenn du einmal pro Sekunden einen Wert um einen 
Prozentsatz erhöhst.

Das wird bestenfalls eine Art Treppe.

Aber nur dann eine Art Treppe, wenn du dich erst mal einigst WOVON die 
verfl*chten 8% genommen werden sollen. Von einem festen Startwert, vom 
gewünschten Endwert, oder von dem gerade eingestellten Wert? In allen 
Fällen ist 0 dabei ein sehr ungünstiger Wert.

Prozentangaben sind RELATIVE Angaben. Solange du dich nicht darauf 
einigst "relativ wozu" kommt halt irgendein Mist raus.

So, und wenn das eine Rampe werden soll, willkommen im Land des 
Abtasttheorems. Zu beantworten ist die Frage, was für eine 
Abtastfrequenz man mindestens braucht, um aus (künstlich erzeugten) 
Daten ein vorgegebenes Signal (Anstieg mit einer vorgegebenen Steilheit) 
(re)konstruieren zu können. Dazu wiederum die Frage, bis zur welcher 
Oberwelle, also wie genau,  man besagtes Signal konstruieren möchte.

Nicht von dem Begriff Abtastfrequenz verwirren lassen. Hier wird nicht 
abgetastet, doch es die gleiche Frequenz, mit der man die Ausgangswerte 
ändert (ändern muss) um ein vorgegebenes Signal zu erreichen.

Viel Spaß beim rechnen.

von Matthias L. (Gast)


Lesenswert?

>Habe ich jetzt mehr Weißwein im Rotwein oder umgekehrt oder was?

Es ist genauso viel Rotwein im Weißwein, wie Weißwein im Rotwein.

Ich habe es damals selbst nicht geglaubt, bis ich nachgerechnet habe...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matthias Lipinsky wrote:
>>>Habe ich jetzt mehr Weißwein im Rotwein oder umgekehrt oder was?
>> Es ist genauso viel Rotwein im Weißwein, wie Weißwein im Rotwein.
> Ich habe es damals selbst nicht geglaubt, bis ich nachgerechnet habe...
Ja, denn ich könnte z.B. einen Teelöffel nehmen, der genau 100ml fasst.
Dann gehts einfacher mit dem Rechnen ;-)

von Juergen (Gast)


Lesenswert?

> Ich habe es damals selbst nicht geglaubt, bis ich nachgerechnet habe...

Hab ich auch mal gemacht, ist aber nicht noetig. Hinterher ist in beiden 
Glaesern gleichviel drin, da kann das garnicht unterschiedlich sein.

von ich_eben (Gast)


Lesenswert?

Kannst du mir erklären, warum es genauso viel Rotwein im Weißwein, wie 
Weißwein im Rotwein ist???
verstehs ned :-(

von !Klaus (Gast)


Lesenswert?

Dito.
Wenn ich eine bestimmte Anzahl an 'Weißweinteilchen' in den Rotwein gebe 
und nehme anschließend ein Gemisch aus 'Weißweinteilchen' + 
'Rotweinteilchen' mit der Bedingung dass die Summe der Teilchen Konstant 
sein muss, dann muss ich weniger 'Rotweinteilchen' als 
'Weißweinteilchen' haben  (wenn gilt: Weißweinteilchen != 0)

von !Klaus (Gast)


Lesenswert?

ups... war noch nicht fertig.

...weniger Rotweinteilchen im Gemisch natürlich.
Wenn ich jetzt die wenigeren Rotweinteilchen in den Weiswein gebe habe 
ich weniger Rotweinteilchen im Weißwein als andersrum...

verstehs auch nicht...

von gast (Gast)


Lesenswert?

lippy hat Recht!
Also rechne es doch bitte nach! Dreisatz wirst du ja wohl noch können.

von Dominique G. (dgoersch)


Lesenswert?

Becher A                 |     Becher B
------------------------------------------------
 1000 Einheiten Rotwein  | 1000 Einheiten Weißwein
              << 100 Einheiten
 1000 Einheiten Rotwein  |  900 Einheiten weißwein
+ 100 Einheiten Weißwein |
              100 Einheiten Gemisch >>
  910 Einheiten Rotwein  |  910 Einheiten Weißwein
+  90 Einheiten Weißwein | + 90 Einheiten Rotwein

von Axel R. (Gast)


Lesenswert?

Erklär' lieber das mit den Seerosen duckundwech

von Dominique G. (dgoersch)


Lesenswert?

Wobei mir meine Rechnung nicht so gefällt. Denn 100 Einheiten eines 
Gemisches 10:1 besteht nicht aus 90+10 Einheiten, das wäre 9:1... *denkz

von Gert (Gast)


Lesenswert?

mhhh...
Also was ich vor habe: Ich starte bei 0. Der Wert soll um 8 Einheiten 
pro Sekunde zunehmen.Endwert ist 100. Getaktet werden soll der Zuwachs 
von dem 400 Hz Signal. Dann wäre doch der Zuwachs pro Interrupt-Wreignis 
8/400. Das wäre dann doch die Steigung der Rampe, oder?

von gast (Gast)


Lesenswert?

@dgoersch:
Fast richtig.
In den Gläsern befinden sich nachher

  909,090909... Einheiten Rotwein  |  909,090909... Einheiten Weißwein
+  90,909090... Einheiten Weißwein | + 90,909090... Einheiten Rotwein

von Klaus (Gast)


Lesenswert?

Becher A                 |     Becher B
------------------------------------------------
 1000 Einheiten Rotwein  | 1000 Einheiten Weißwein
              << 100 Einheiten
 1000 Einheiten Rotwein  |  900 Einheiten weißwein
+ 100 Einheiten Weißwein |
^^^^^^^^^^^^^^^^^
Verhältniss 10:1

              100 Einheiten Gemisch >>
  910 Einheiten Rotwein  |  910 Einheiten Weißwein
+  90 Einheiten Weißwein | + 90 Einheiten Rotwein
^^^^^^^^^^^^^^^^
Verhältniss 9:1  <= Fehler !

Besser:
  909,09... Einheiten Rotwein  |  909,09... Einheiten Weißwein
+  90,90... Einheiten Weißwein | + 90,90... Einheiten Rotwein

Gruß,
Klaus

von Gert (Gast)


Lesenswert?

Seerose verdoppel sich. Also war der See am Tag bevor er ganz bedeckt 
war, halb bedeckt!?

von !Klaus (Gast)


Lesenswert?

O.k. ich habs auch nachgerechnet - stimmt schon. ....

Becher A                 |     Becher B
------------------------------------------------
 1000 Einheiten Rotwein  | 1000 Einheiten Weißwein
              << 100 Einheiten
 1000 Einheiten Rotwein  |  900 Einheiten weißwein
+ 100 Einheiten Weißwein |
              100 Einheiten Gemisch >>
  909,09... Einheiten Rotwein  |  909,09...Einheiten Weißwein
+  90,90.. Einheiten Weißwein | + 90,90.. Einheiten Rotwein

*Gemisch besteht aus: 90,90.. Einheiten (R) und 9,09.. Einheiten (W)

@Axel Rühl
Auf die Seerosen kommt man schnell, wenn man sich überlegt, dass sie 
sich jeden Tag verdoppeln... na kleiner Tip jeden Tag VERDOPPELN... ;)

von Gert (Gast)


Lesenswert?

Was ist mit meinem Problem? <schluchtz>


... naja, Spaß MUSS ja auch sein. Also nur weiter mit euren Rätseln! :-)

von Karl H. (kbuchegg)


Lesenswert?

Gert wrote:
> mhhh...
> Also was ich vor habe: Ich starte bei 0. Der Wert soll um 8 Einheiten
> pro Sekunde zunehmen.Endwert ist 100. Getaktet werden soll der Zuwachs
> von dem 400 Hz Signal. Dann wäre doch der Zuwachs pro Interrupt-Wreignis
> 8/400. Das wäre dann doch die Steigung der Rampe, oder?

Ganz genau.
Das hat aber nichts mit Prozent zu tun.
Bei jedem Interrupt wird dein bisheriger Wert um einen 'konstantes' 
Delta erhöht.

von Matthias L. (Gast)


Lesenswert?

>Das hat aber nichts mit Prozent zu tun.
>Bei jedem Interrupt wird dein bisheriger Wert um einen 'konstantes'
>Delta erhöht.

Also sieht deine 440Hz-Routine etw so aus:

pseudocode:
1
ISR (440Hz)
2
{
3
  differenz = (eingang - ausgang);
4
  if ( differenz > X ) differenz = X;
5
  else if ( differenz < X ) differenz = -X;
6
 
7
  ausgang = ausgang + differenz;
8
9
}

von Gert (Gast)


Lesenswert?

... und wenn die Augangswert 0..100 % sind. Ist dann 8% pro Sekunde 
richtig ausgedrückt?


Meine Routine sieht quasi so aus:
1
ISR (440Hz)
2
{
3
  
4
  if ( ausgabe < eingabe ){ausgabe+=8/440}
5
6
}

Der Wert wächst aber ca. doppelt so schnell an wie erwartet

von Karl H. (kbuchegg)


Lesenswert?

Gert wrote:
> ... und wenn die Augangswert 0..100 % sind.

Sind auch nur Zahlen.
Dein Wert soll dann in einer bestimmten Zeit von 0 bis 100 rauffahren.

Ob das Prozent oder Äpfel oder Schrittmotorpulse sind, ist unerheblich. 
Du musst in einer bestimmten Zeit eine Variable vom Startwert zum 
Endwert interpolieren.


>
1
> ISR (440Hz)
2
> {
3
> 
4
>   if ( ausgabe < eingabe ){ausgabe+=8/440}
5
> 
6
> }
7
> 
8
>
>
> Der Wert wächst aber ca. doppelt so schnell an wie erwartet

Dann sieh dir mal die Timerwerte an.
Obiges (offensichtliche Problem mal beiseite gelassen), erhöht ausgabe 
in 1 Sekunde um den Wert 8. Aber nur dann, wenn die ISR wirklich 440 mal 
in der Sekunde aufgerufen wird.

von Karl H. (kbuchegg)


Lesenswert?

Mal mit konkreten Zahl.

Angenommen du hast eine Variable X.
Die soll alle Werte von 129 bis 546 durchlaufen.
Und zwar in 12 Sekunden.


Die Frage ist daher, um welchen Wert muss x jeweils erhöht werden?
In 12 Sekunden, wird die ISR 12 * 440 = 5280 mal aufgerufen.

x soll einen Bereich von 546 - 129 = 417 durchlaufen.
Also muss x bei jedem ISR Aufruf um 417 / 5280 = 0.07897 erhöht werden.


Die 0.07897 sind im Grunde nichts anderes als die Steigung der Geraden, 
die du durch die Punkte   0/129 und 12/546  gelegt hast

Jetzt kannst du den Spiess aber auch Umdrehen. Du willst x wieder alle 
Werte durchlaufen lassen, von 129 bis 546. Und zwar soll x in 1 Sekunde 
um 8% von (546-129) zunehmen.
546 - 129 = 417. 8% davon sind 33.36

In 1 Sekunde muss x also um 33.26 größer werden. (Daraus folgt sofort, 
dass
x für den kompletten Ablauf 12.5 Sekunden brauchen wird, den 417 / 33.36 
sind 12.5)

Wenn x in 1 Sekunde um 33.26 zunehmen soll, dann muss es daher in einem 
ISR Aufruf (der ja 440 mal in der Sekunde erfolgt) um 33.26/440 = 
0.07559 zunehmen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.