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 ...
Keine einzinge Antwort...! Könnte niemand zu meiner Rettung kommen?? Das ist eine dringende Bitte...
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.