mikrocontroller.net

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


Autor: Gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0,08 / 400 = 0,0002

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gert (Gast)
Datum:

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

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht auf's Ohr, sondern auf's Bett.

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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...?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gert (Gast)
Datum:

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

Hast das von 9live ;-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter Engelhardt (netdieter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9Live  :-))

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

Das hilft vielleicht.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Norgan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Juergen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich_eben (Gast)
Datum:

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

Autor: !Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: !Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: gast (Gast)
Datum:

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

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erklär' lieber das mit den Seerosen duckundwech

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gert (Gast)
Datum:

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

Autor: !Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... ;)

Autor: Gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist mit meinem Problem? <schluchtz>


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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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:

ISR (440Hz)
{
  differenz = (eingang - ausgang);
  if ( differenz > X ) differenz = X;
  else if ( differenz < X ) differenz = -X;
 
  ausgang = ausgang + differenz;

}

Autor: Gert (Gast)
Datum:

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


Meine Routine sieht quasi so aus:
ISR (440Hz)
{
  
  if ( ausgabe < eingabe ){ausgabe+=8/440}

}


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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.


>
> ISR (440Hz)
> {
> 
>   if ( ausgabe < eingabe ){ausgabe+=8/440}
> 
> }
> 
> 
>
> 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.