Berechnung mit "pow" --- C

Gast #130214
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.
Angehängte Dateien:
Gast #130216
*****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.
Angehängte Dateien:
Gast #130217
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
Gast #130218
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.
Gast #130219
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.
Gast #130220
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.