Forum: Mikrocontroller und Digitale Elektronik Berechnung mit "pow" --- C


von Stephan Schwarz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich frag mich gerade, warum mir die Funktion keine richtigen Werte
liefert.
Vielliecht hat  ja jemand einen Idee?
Wenn ich die Variable s_wait als int definiere und auch nur mit ganzen
Zahlen reche stimmt das Ergebnis. Aber alle Rechnungen mit double oder
float ergeben falsche Zahlen.

von Rufus T. Firefly (Gast)


Lesenswert?

Was magst Du vorhaben?

Was willst Du berechnen?

Glaubst Du, daß die Funktion delay_ms ein float-Argument hat?

von Stephan Schwarz (Gast)


Angehängte Dateien:

Lesenswert?

*****Was magst Du vorhaben?
*****Was willst Du berechnen?

Ich muss eine Rechtecksignal generieren das sich nach einer
Exponential-Funktion richtet. Start bei 10 Hz Ende bei 500 Hz.
Gesamt Laufzeit  = 340 Sek.
T = wait_s = 1/(10*2^(t/60)).
Ich will also einfach einen Pin aus bzw. einschalten und wait_s soll
aktuelle berechnet werden.
Bisher ist mir dafür keinen einfacherer Lösung eingefallen.


*****Glaubst Du, daß die Funktion delay_ms ein float-Argument hat?

Ich hab auf deine Frage hin mal in der delay_modi.h mal nachgesehen.
Dort ist die Funktion delay_ms definiert.
Es sieht mir so aus, alsob tatsächlich die Eingangsparameter als Int
definiert sind.    *****unsigned short ms;*******
Ich kann aber trotzdem ein Fliesskommazahl an die Funktion übergeben,
und erhalte dann auch Signal mit den Richtigen Impulsweiten.
Wie man im Code sieht, den ich zuvor schon gepostet habe.

von Dirk (Gast)


Lesenswert?

Hi,

wie mein Vorredner meinte es wird wohl an der Floatübergabe liegen.

>> delay_ms(0.5);

gibt es so auch nicht.

Die Delay Variante ist auch keine schoene Loesung. Besser waere es ein
Timer im Compare Autotoggle Output Pin Mode. Man schafft so auch
hoehrere Freq. am Ouputpin.


Mfg
Dirk

von Stephan Schwarz (Gast)


Lesenswert?

Bezüglich >> delay_ms(0.5);
OK - da scheint schon ein Widerspruch zu sein, aber es funktioniert.

Ich suche ja auch nach einer besseren Lösung.
Gibt es denn Beispiele-Source zu der
"Timer im Compare Autotoggle Output Pin Mode" Lösung?
Im Moment hört sich das für mich nach PWM an. right?

Also ich halte nun mal fest, dass nicht "pow" bei mir das Problem ist
sondern eher die Delayfunktion. Trotz dessen, dass Sie mit der
Parameterübergabe 0.5  funktioniert.

von Rufus T. Firefly (Gast)


Lesenswert?

Sie funktioniert nicht wirklich.

delay_ms(0.5) ist exakt das gleiche wie delay_ms(0) - beim Casting von
float nach int erfolgt keine Rundung, sondern ein Abschneiden der
Nachkommastellen.

von Stephan Schwarz (Gast)


Lesenswert?

Ok OK *g

Aber mein Osziloscop sagt mir was anderes *g
Ich werde es gleiche Morgen nochmal mit anderen Werten testen.
Mein Impuls ist wirklich exakt 500µS lang.

Aber egal. Ihr habt schon recht. Es muss da zu einem konflikt kommen
Da aber der Test mit einer beliebigen Kommazahl funktioniert hat, bin
ich davon ausgegangen das es mit allen funktioniert.

@ Rufus T. Firefly

weist du, was der Dirk mit
"Timer im Compare Autotoggle Output Pin Mode"
meint?          evtl.PWM?
hab davon noch nix gelesen.

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.