-         

Ergebnis 1 bis 6 von 6

Thema: Problem mit Rechnung

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214

    Problem mit Rechnung

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    Hi,
    sag doch mal welche Werte da für Zeit vorkommen.
    MfG Alex

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Dafür brauch ich eine Rechnung:
    Impulsanz_L = (2 * Ton * Zeit) / 1000;
    Dabei habe ich Impulsanz_L als unsigned long definier
    "LONG" ist ein ganzzahliger Datentyp und verträgt sich nicht besonders gut mit mit deiner Division durch 1000.
    Bei der Umwandlung in einen ganzzahligen Datentypen werden normalerweise alle Nachkommastellen einfach abgeschnitten und das Ergebnis dementsprechend ungenau.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214
    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

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    30
    Beiträge
    447
    Hi,
    Ja da sollte 2000 herauskommen.
    Vielleicht hilft es wenn du
    Code:
    Impulsanz_L = (2L * Ton * Zeit) / 1000L;
    machst.
    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 du
    Code:
    Impulsanz_L = (2L * (int32_t)Ton * (int32_t)Zeit) / 1000L;
    machen.

    PS: und meine Erfahrung sagt: es liegt immer an dem, was man nicht vermutet

    MfG Alex

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •