Hi,
sag doch mal welche Werte da für Zeit vorkommen.
MfG Alex
Hallo,
ich bastel immer noch an meinem sound Problem.
Dafür brauch ich eine Rechnung:
Impulsanz_L = (2 * Ton * Zeit) / 1000;
Dabei habe ich Impulsanz_L als unsigned long definiert.
Ton hat in etwas einen Wert von 500 und Zeit 2000
Die Zeit wird in ms gemessen (und an die Funktion übergeben. Deswegen kann ich nicht direkt kürzen.
Wenn ich in s rechne (also der Faktor 1000 wegfällt) funktioniert meine Funktion.
Hat jemand eine Idee?
Gruß
Stefan
Hi,
sag doch mal welche Werte da für Zeit vorkommen.
MfG Alex
"LONG" ist ein ganzzahliger Datentyp und verträgt sich nicht besonders gut mit mit deiner Division durch 1000.Dafür brauch ich eine Rechnung:
Impulsanz_L = (2 * Ton * Zeit) / 1000;
Dabei habe ich Impulsanz_L als unsigned long definier
Bei der Umwandlung in einen ganzzahligen Datentypen werden normalerweise alle Nachkommastellen einfach abgeschnitten und das Ergebnis dementsprechend ungenau.
Ja aber die Nachkommastellen sind für die Tonlänge ziemlich gleichgültig.
ich nehme für den Ton 500 (Hz also Frequenz) und für die Zeit 2000 (Millisekekunden also 2 Sekunden) Das Ergebnis sollte doch 2000 sein?
Gruß
Stefan
Hi,
Ja da sollte 2000 herauskommen.
Vielleicht hilft es wenn dumachst.Code:Impulsanz_L = (2L * Ton * Zeit) / 1000L;
Und beim AVR sollte man diese int32_t bzw uint32_t statt long benutzen.
Ton und Zeit müssen natürlich auch diesen typ haben. Wenn nicht musst dumachen.Code:Impulsanz_L = (2L * (int32_t)Ton * (int32_t)Zeit) / 1000L;
PS: und meine Erfahrung sagt: es liegt immer an dem, was man nicht vermutet
MfG Alex
Hallo
PasstScho hat die Lösung gefunden. Die Lösung war
Impulsanz_L = (2L * Ton * Zeit) / 1000L; und uint32_t als Definition für Impulsanz_L hat geholfen.
Vielen Dank
Gruß
Stefan
Lesezeichen