-         

Ergebnis 1 bis 7 von 7

Thema: Sound() - Erklärung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2011
    Beiträge
    10

    Sound() - Erklärung

    Anzeige

    Ich möchte für mein Projekt diesen Befehl für mein Projekt verwenden.

    void Sound (
    uint16_t freq,
    uint16_t duration_msec,
    uint8_t amplitude)
    {
    uint16_t wait_tics;
    uint32_t n,k,period_usec,dauer_usec;

    period_usec = 1000000L / freq;
    dauer_usec = 1000 * (uint32_t) duration_msec;
    k = dauer_usec / period_usec;

    //IR Interuptfreq=36KHz
    //Wavefreq=18KHz

    wait_tics = 18000 / freq;

    MotorSpeed (amplitude, amplitude);

    for (n = 0; n < k; n++)
    {
    MotorDir (FWD, FWD);
    Sleep (wait_tics);
    MotorDir (RWD, RWD);
    Sleep (wait_tics);
    }
    MotorSpeed (0, 0);
    }
    Vom Prinzip her versteh ich es aber den Teil kapier ich nicht ganz.

    period_usec = 1000000L / freq;
    dauer_usec = 1000 * (uint32_t) duration_msec;
    k = dauer_usec / period_usec;

    //IR Interuptfreq=36KHz
    //Wavefreq=18KHz

    wait_tics = 18000 / freq;
    was ist z.B. 1000000L
    ist dauer_usec : 1000 "mal" duration_msec, und warum (uint32_t)

    woher kommen die: IR Interuptfreq=36KHz
    Wavefreq=18KHz


    Hoffe man kann mir helfen.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    was ist z.B. 1000000L
    1 Periode = 1 Sekunde = 1.000.000 µSekunden

    ist dauer_usec : 1000 "mal" duration_msec, und warum (uint32_t)
    "duration_msec" ist vom Typ "uint16_t" und muss auf "uint32_t" gecastet werden um es zusammen addieren zu können. Sonst würde es ne Warnung vom Compiler (oder schlimmeres) geben.

    //IR Interuptfreq=36KHz
    //Wavefreq=18KHz
    Sind weiter nicht von Interesse, da auskommentiert.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2011
    Beiträge
    10
    die zahl steht also für die mikrosekunden, aber warum steht da das "L"?


    "duration_msec" ist vom Typ "uint16_t" und muss auf "uint32_t" gecastet werden um es zusammen addieren zu können. Sonst würde es ne Warnung vom Compiler (oder schlimmeres) geben.
    ist * = addieren? ich dachte das wäre multipizieren.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    die zahl steht also für die mikrosekunden, aber warum steht da das "L"?
    Das "L" steht für "long".

    ist * = addieren? ich dachte das wäre multipizieren.
    Ich meinte natürlich multiplizieren.

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    woher kommen die: IR Interuptfreq=36KHz
    Wavefreq=18KHz

    wait_tics = 18000 / freq;
    Die kommen von der Trägerfrequenz für die IR-Kommunikation. In der Library des asuro wird diese Frequenz mit dem Timer2 erzeugt.

    Zusätzlich ist es auch die Zeitbasis für die Sleep()-Funktion. In der orginalen CD-Version der Library war es allerdings ein 72kHz-Takt, deshalb muss man die Werte anpassen (verdoppeln), wenn man mit der orginalen Lib arbeitet. Sleep(1) dauert 1/36000 bzw. 1/72000 Sekunde. Sleep(36) bzw. Sleep(72) dauert eine Millisekunde.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2011
    Beiträge
    10
    warum muss da das L stehen?
    würde die zahl nicht schon reichen?kann man das weglassen?
    Oder muss man bei so großen Zahlen immer L hinschreiben?
    Geändert von HiroakiShi (05.06.2011 um 11:20 Uhr)

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    Ja, das L wird unbedingt benötigt. Du kannst ja mal ausprobieren, was passiert, wenn du's weglässt, der Compiler wird dir eine Fehlermeldung ausgeben. Zahlen werden standardmäßig als uint16 interpretiert, d.h. bis maximal 2^16 - 1 = 65535, größere müssen durch das L als uint32 gekennzeichnet werden.
    Gruß
    ASUR0

Ähnliche Themen

  1. pwm erklärung
    Von Che Guevara im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 04.01.2008, 14:05
  2. Erklärung Ports...
    Von oratus sum im Forum Robby CCRP5
    Antworten: 16
    Letzter Beitrag: 25.01.2007, 20:39
  3. Erklärung Microcontroller
    Von bjacke im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 25.03.2006, 23:01
  4. PIN ERKLÄRUNG!!!!!!
    Von Sodawasser im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 14.10.2004, 08:50
  5. erklärung der beispielprogramme
    Von xandl33 im Forum Robby CCRP5
    Antworten: 6
    Letzter Beitrag: 03.05.2004, 02:51

Berechtigungen

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