Forum: Mikrocontroller und Digitale Elektronik AVR32 EVK1100 PWM Beispiel


von Jill (Gast)


Angehängte Dateien:

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 ...

von Jack (Gast)


Lesenswert?

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

von Phil S. (zippi)


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

von Jack J. (jackjill)


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,
1
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

von Phil S. (zippi)


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.
1
#define clock 24  // 18-66
2
3
void cpu_clock()
4
{
5
  int clockh = (clock/6) - 1;
6
7
  AVR32_PM.oscctrl0 = (AVR32_PM.oscctrl0 | 0x00000407);       // Startup time  /  Oscillator Mode
8
9
  AVR32_PM.mcctrl =       AVR32_PM_OSC0EN_MASK;        // Enable Oscillator 0
10
11
  while((AVR32_PM.poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)== 0);  // Oscillator 0 is ready
12
13
14
  AVR32_PM.pll[0] =       0 << AVR32_PM_PLLOSC_OFFSET  |    // Oscillator 0 is the source for the PLL
15
                1 << AVR32_PM_PLLDIV_OFFSET  |    // div = 1
16
                clockh << AVR32_PM_PLLMUL_OFFSET |  // multi clock z.b. if clockh = 10 (10+1)*12=132/2Fvc = 66Mhz
17
                5 << AVR32_PM_PLLOPT_OFFSET;    // 80MHz<fvco<180MHz / fPLL = fvco / Wide Bandwidth Mode disabled
18
19
20
  AVR32_PM.cksel =       0x80808080;
21
22
  AVR32_PM.pll[0] |=       AVR32_PM_PLLEN_MASK;        // PLL enable
23
24
  while(!(AVR32_PM.poscsr & AVR32_PM_POSCSR_LOCK0_MASK));      // PLL 0 is locked, and ready to be selected as clock source
25
26
27
  AVR32_FLASHC.fcr |=      1 << AVR32_FLASHC_FWS_OFFSET;    // The flash is read with 1 wait state.
28
29
  AVR32_PM.mcctrl |=       2 << AVR32_PM_MCSEL_OFFSET;        // PLL0 as main oscillator
30
31
}

Gruß
Zippi

von Jack J. (jackjill)


Lesenswert?

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

Gruß
Jack

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.