Hallo, ich verwende den dsPIC33FJ256MC710A, dazu verwende ich das dsPICDEM MCLV Development Board, dieses hat einen 8MHz Quarz und den PCD v5.009 Compiler von CCS. Ich möchte meinen µC mit Hilfe des PLL auf 40MIPS (Fcy) rauftakten und würde dabei Hilfe benötigen wie man das im MPLAB X IDE konfiguriert. Wie bereits gesagt verwende ich einen 8MHz (Fin) Quarz XT Modus. PLLPRE = 0 d.h. N1 = 2 PLLDIV = 0x28 d.h. M = 40 PLLPOST = 0 d.h. N2 = 2 Fcy=Fin/2 * M /(N1*N2) Fcy=8000000/2 * 40 /(2*2) Fcy=4000000 * 10 Fcy=40 MIPS Ich hoffe jemand kann mir helfen wie ich das als Code eingeben muss. Falls ich etwas vergessen habe anzugeben fragt ruhig nach. Vielen Dank schon mal im voraus. mfg
Du hast die richtigen Div und PLL bits ja schon fast. Jedoch ist dein PLLDIV noch falsch. Den M = PLLDIV + 2 also müsstest du PLLDIV auf 0x26 setzen. Hier mein Code für die Einstellungen eines dsPIC33EP512MU810 bei 140MHz:
1 | /*******************************************************************************
|
2 | Oszillator Settings
|
3 | *******************************************************************************/
|
4 | // Configure Oscillator to operate the device at 140Mhz
|
5 | // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
|
6 | // Fosc= 7.37*76/(2*2)=140Mhz for 7.37 input clock
|
7 | |
8 | PLLFBD = 74; // M=76 |
9 | CLKDIVbits.PLLPOST = 0; // N1=2 |
10 | CLKDIVbits.PLLPRE = 0; // N2=2 |
11 | |
12 | OSCTUN = 0; // Tune FRC oscillator, if FRC is used |
Ok, danke ich werde es einmal probieren. Eine Frage hätte ich dann noch, wo (PIN) kann ich mit einem Oszilloskop messen ob ich das Gewünschte erreicht habe?
Dominic A. schrieb: > PLLFBD = 74; // M=76 > CLKDIVbits.PLLPOST = 0; // N1=2 > CLKDIVbits.PLLPRE = 0; // N2=2 > > OSCTUN = 0; // Tune FRC oscillator, if FRC is used Ich habe diese Zeilen mit M=0x26 eingeben hat aber nicht funktioniert. Es ist ein Fehler gekommen, dass er diese Zeilen nicht kennt (wurden unterwellt). Weißt du wo da der Fehler sein kann?
Hast du xc.h includiert? Zeig doch mal deinen Code. Um die Frequenz zu messen kannst du ja irgend einen Timer einstellen und in der Timer ISR einen Pin toggeln und dann diesen Pin mit dem Oszi messen. Oder ganz einfach ein __delay_ms(x) und dann schauen ob dieses delay stimmt.
Da es zuerst nicht funktioniert hat habe ich etwas probiert und anscheinend funktioniert es, kann das sein? Zuerst war die Periodendauer des Interrupts 100µs und nach dem ich den Code, so wie er unten ist, probiert habe war sie nur noch ~23µs. #include <33FJ256MC710A.h> #include <stdio.h> #include <stdlib.h> #fuses XT,PR_PLL,NOWDT #use delay (crystal=8M,clock=40M) #INT_TIMER2 void TIMER2interrupt() { output_high(PIN_E4); //damit etwas Zeit vergeht und das Interrtupt besser zu sehen ist int x; x=2; x=x*x*x*x*x*x*x; output_low(PIN_E4); clear_interrupt(INT_TIMER2); //Setzt den Interrupt wieder zurück damit er wieder auslösen kann } void main() { enable_interrupts(INT_TIMER2); enable_interrupts(INTR_GLOBAL); clear_interrupt(INT_TIMER2); setup_timer2(TMR_DISABLED); setup_timer2(TMR_INTERNAL|TMR_DIV_BY_1,368); while(1) { } }
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.