mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR32 EVK1100 PWM Beispiel


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich arbeite bin mit einem EVK1100 Bord und AVR32 Studio Ver. 2,5
Ich möchte ein PWM-Signal mit einer Frequenz von 66 MHz erzeugen. Ich 
habe
bereits versucht, mit Hilfe der eingebauten Programm Beispiel in AVR32 
Studio dh EVK1100-Driver-PWM Example.
Es funktioniert prima, und ich bin in der Lage, das empfangene Signal 
mit
Änderung des Wertes der Channel Prescaler und der Channel Period in
Haupt-C-Programm. Aber der Minimalwert der Vorteiler, das ich beantragen 
kann, ist AVR32_PWM_CPRE_MCK. Auch die Werte der Period und duty cycle 
sind 2 & 1 bzw. (angeschlossen haben einen Screenshot der
gleich). Ich beobachte die Ausgabe auf LED 7. Die max freq, die ich 
erreiche, ist 56 kHz. Ist es möglich, einen PWM-Signal des 66Mhz mit 
dieser Konfiguration erhalten? Ist einem externen Taktsignal für den 
gleichen Bedarf? Was kann ich weiter in das Programm zu modifizieren?
Bitte helfen Sie ...

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine einzinge Antwort...! Könnte niemand zu meiner Rettung kommen?? Das 
ist eine dringende Bitte...

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

66Mhz ist nicht möglich ;).

Wenn du 66Mhz als ausgang an einem Pin haben willst schau dir mal die 
Generic Clock an:

13.6.9 Generic Clock Control

Wenn es umbedingt pulsweiten gesteuert sein muss, dann programmier mal 
die PWM lib selber. Aber 66Mhz wirst du nicht hinbekommen.

Gruß
Zippi

Autor: Jack Jill (jackjill)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Phil S. schrieb:
> Hi,
>
> 66Mhz ist nicht möglich ;).
>
> Wenn du 66Mhz als ausgang an einem Pin haben willst schau dir mal die
> Generic Clock an:
>
> 13.6.9 Generic Clock Control
>
> Wenn es umbedingt pulsweiten gesteuert sein muss, dann programmier mal
> die PWM lib selber. Aber 66Mhz wirst du nicht hinbekommen.
>
> Gruß
> Zippi

Hej zippi,

ich hab eigentlich den code gefunden damit ich statt Internal Oscillator 
115kHz, kann ich den Main Clock dh OSC0 12MHz verwenden. Der Code 
lautet,
pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP); 
Aber es gibt mir Fehler warnung weil die richtige Include files habe ich 
nicht eingefügt. Weißt jemand was das ist? Dann muss ich die PLL 
benutzen um den Signal zu multiplieren können.
Also, für eine Antwort wäre ich dankbar.

Gruß,
Jack

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Hier:
du musst nur das define ändern und die funktion einmal aufrufen. Du 
kannst aber nur folgende takte einstellen:
18, 24, 30, 36, 42, 48, 54, 60, 66 (72, 78, 84, 90, 96). In klammer ist 
übertacktet. Ist aber unspezifisch.
#define clock 24  // 18-66

void cpu_clock()
{
  int clockh = (clock/6) - 1;

  AVR32_PM.oscctrl0 = (AVR32_PM.oscctrl0 | 0x00000407);       // Startup time  /  Oscillator Mode

  AVR32_PM.mcctrl =       AVR32_PM_OSC0EN_MASK;        // Enable Oscillator 0

  while((AVR32_PM.poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)== 0);  // Oscillator 0 is ready


  AVR32_PM.pll[0] =       0 << AVR32_PM_PLLOSC_OFFSET  |    // Oscillator 0 is the source for the PLL
                1 << AVR32_PM_PLLDIV_OFFSET  |    // div = 1
                clockh << AVR32_PM_PLLMUL_OFFSET |  // multi clock z.b. if clockh = 10 (10+1)*12=132/2Fvc = 66Mhz
                5 << AVR32_PM_PLLOPT_OFFSET;    // 80MHz<fvco<180MHz / fPLL = fvco / Wide Bandwidth Mode disabled


  AVR32_PM.cksel =       0x80808080;

  AVR32_PM.pll[0] |=       AVR32_PM_PLLEN_MASK;        // PLL enable

  while(!(AVR32_PM.poscsr & AVR32_PM_POSCSR_LOCK0_MASK));      // PLL 0 is locked, and ready to be selected as clock source


  AVR32_FLASHC.fcr |=      1 << AVR32_FLASHC_FWS_OFFSET;    // The flash is read with 1 wait state.

  AVR32_PM.mcctrl |=       2 << AVR32_PM_MCSEL_OFFSET;        // PLL0 as main oscillator

}

Gruß
Zippi

Autor: Jack Jill (jackjill)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tausend Dank Zippi!!! Jetzt hat alles geklappt!
Wünsche dir ein wunderschönes Wochenende!!

Gruß
Jack

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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