- 12V Akku mit 280 Ah bauen         
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

    LiFePo4 Akku selber bauen - Video
    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
    61
    Beiträge
    5.799
    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.
    Bild hier  
    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 10: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, 13:05
  2. Erklärung Ports...
    Von oratus sum im Forum Robby CCRP5
    Antworten: 16
    Letzter Beitrag: 25.01.2007, 19:39
  3. Erklärung Microcontroller
    Von bjacke im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 25.03.2006, 22:01
  4. PIN ERKLÄRUNG!!!!!!
    Von Sodawasser im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 14.10.2004, 07:50
  5. erklärung der beispielprogramme
    Von xandl33 im Forum Robby CCRP5
    Antworten: 6
    Letzter Beitrag: 03.05.2004, 01:51

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress