-
        

Ergebnis 1 bis 3 von 3

Thema: PWM Zählerstand? (gelöst)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.11.2005
    Beiträge
    58

    PWM Zählerstand? (gelöst)

    Anzeige

    Hallo,

    ich benutze dieses PWM-Signal:

    Code:
    void init_timer1(void)	//Initialisierung des Timers für Erzeugung des PWM-Signals
    {
       /* normale 8-bit PWM aktivieren (nicht invertiert),
       Das Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet */
       TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);
    
       /* Einstellen der PWM-Frequenz auf 14 kHz ( Prescaler = 1 ) */
       TCCR1B = (1<<CS10);
    
       /* Interrupts für Timer1 deaktivieren
       Achtung : Auch die Interrupts für die anderen Timer stehen in diesem Register */
       TIMSK &= ~0x3c;
    }
    (stammt aus dem Beispiel Programm für das RN-Control)


    Ich würde gerne den Zählerstand auslesen (in welchem Register?), da ich eine halbwegs exakte Zeit brauche (Zeitspanne von 3 Sekunden).

    Wie errechnet sich die PWM-Frequenz
    Fpwm = Fclock(16MHz) : Prescaler(1) : (?)

    Ist die PWM eigentlich auch konstant, wenn ich andere Intrrupts und Timer verwende?

    MfG
    Palmer

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.05.2006
    Ort
    Pfalz
    Beiträge
    154
    Der Zählerstand des Timers ist im Register TCNT1

    So wie ich das aus dem Datenblatt lese zählt der Timer von 0 bis 256 und dann zurück.
    Also wird nach 256 Taktzyklen das PWM Signal einmal gewechselt. Ein vollständiges Signal ist also nach 2x 256 Taktzyklen komplett.

    Frequenz = FClock / (Prescaler) / 256 / 2 = 31250Hz

    Die PWM wird Hardwaremäßig generiert und ist unabhängig von sonstigen aktivitäten des Prozessors.
    Mann kann sogar die Interrupts des Timer1 nutzen ohne die PWM zu stören.

    Falls Du eine exakte Zeit von 3s brauchst kannst Du dir die auch mit einem anderen Timer bauen oder nimmst den TOV1 Interrupt und zählst 3*31250 Hz ab.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.11.2005
    Beiträge
    58
    Hi,

    danke hat alles geklappt und so wie ich es wollte. Hab dann doch den Interrupt vom Timer1 genommen, da ich den Zähler nicht genau abfragen konnte (mein Programm ist etwas umfangreich und eine Abfrage des Zählers würde nicht immer jeden Zählerwechsel mit bekommen)!

    MfG
    Palmer

Berechtigungen

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