mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM3X8E und PWM


Autor: hol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinander,

ich möchte ein PWM mit dem AT91SAM3X8E (auf dem Arduino Due) erzeugen, 
aber komme momentan nicht weiter. Ich verwende den Pin PB16 (Arduino 
Due: DAC1), also PWML0.
//Clock Register -> CLKA, CLKB = MCK
REG_PWM_CLK |= (1<<0) | (1<<16);
//Enable PWM Channel 0
REG_PWM_ENA |= (1<<0);
//Comparison Value
REG_PWM_CMPV0 |= (1<<12);

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hol schrieb:
> ich möchte ein PWM mit dem AT91SAM3X8E (auf dem Arduino Due) erzeugen,
> aber komme momentan nicht weiter.
Wie weit bist du denn schon? Hast du die LED aus dem 
Beitrag "Arduino Due: LED ein- und ausschalten" schon unter Kontrolle?

Autor: hol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> hol schrieb:
>> ich möchte ein PWM mit dem AT91SAM3X8E (auf dem Arduino Due) erzeugen,
>> aber komme momentan nicht weiter.
> Wie weit bist du denn schon? Hast du die LED aus dem
> Beitrag "Arduino Due: LED ein- und ausschalten" schon unter Kontrolle?

Ja, das klappt nun. Bin auch beim PWM weitergekommen.
Ich weiß aber noch nicht, wie ich die PWM Clock aktiviere und ob mir 
sonst noch was fehlt
 
//Enable PIO control
REG_PIOB_PER |= (1<<16);
//Select Peripheral B function
REG_PIOB_ABSR |= (1<<16);
  
//Enable PWM Clock
  
  
//Clock Register -> CLKA, CLKB = MCK
REG_PWM_CLK |= (1<<0) | (1<<16);
//Enable PWM Channel 0
REG_PWM_ENA |= (1<<0);
//Comparison Value
REG_PWM_CMPV0 |= (1<<12);

Autor: Kaj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hol schrieb:
> Ich weiß aber noch nicht, wie ich die PWM Clock aktiviere
Warum schaust du nicht einfach mal ins Datenblatt, Kapitel 39?
Genauer Kapitel 39.7.1, Seite 1020, PWM Clock Register

Autor: hol (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Kaj schrieb:
> Genauer Kapitel 39.7.1, Seite 1020, PWM Clock Register

Kann es sein, dass du ein altes Datenblatt hast?

Ich arbeite mit diesem:
http://ww1.microchip.com/downloads/en/devicedoc/at...

Autor: hol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein Beispiel auf der fogenden Seite gefunden:
http://forum.arduino.cc/index.php?topic=420674.0

Dieses habe ich im AtmelStudio getestet und ein PWM an Pin PC7 messen 
können.
Allerdings erhalte ich nicht eine Frequenz von 1 Hz, sondern von 2,7 Hz.

Habt ihr eine Idee, woran das liegt. Bei diesem Controller kann ich 
unter Tools > Device Programming > Fuse Bits ja nicht die Taktquelle 
verändern (wie beim Atmega2560).
 
  // PWM Set-up on pin PC7 (Arduino Pin 39): see Datasheet chap. 38.5.1
  // Select Instance=PWM; Signal=PWMH2 (channel 2); I/O Line=PC7 (P7, Arduino pine 39, see pinout diagram) ; Peripheral=B

  PMC->PMC_PCER1 |= PMC_PCER1_PID36;                   // PWM on

  REG_PIOC_ABSR |= PIO_ABSR_P7;                        // Set PWM pin perhipheral type B

  REG_PIOC_PDR |= PIO_PDR_P7;                          // Set PWM pin to an output

  REG_PWM_ENA = PWM_ENA_CHID2;                         // Enable the PWM channel 2 (see datasheet page 973) 
 
  REG_PWM_CLK = PWM_CLK_PREA(0) | PWM_CLK_DIVA(42);    // Set the PWM clock rate to 2MHz (84MHz/42). Adjust DIVA for the resolution you are looking for
                                                      
  REG_PWM_CMR2 = PWM_CMR_CALG |PWM_CMR_CPRE_CLKA;      // The period is left aligned, clock source as CLKA on channel 2

  REG_PWM_CPRD2 = 1000000;                             // Channel 2 : Set the PWM frequency 2MHz/(2 * CPRD) = F ; 1< CPRD < 2exp24  -1 ; here CPRD = 10 exp 6

  REG_PWM_CDTY2 = 200000;                              // Channel 2: Set the PWM duty cycle to x%= (CDTY/ CPRD)  * 100 % , CDTY = 2 * 10 exp 5

 // Alternatively, you can use this format :  PWM->PWM_CH_NUM[2].PWM_CPRD = 1000000 ;                    
 // In this example, Frequency is 1 HZ with a DT of 20% so you can see it with an LED attached to pin 39 with a resistor  
 
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.