Forum: Mikrocontroller und Digitale Elektronik PIC32MX - Clock-Einstellungen


von Matt B. (mattb)


Lesenswert?

Hallo,

ich will mich etwas in die PICs von Microchip einarbeiten und habe mir 
ein SnadPIC Board 
(http://www.ebay.de/itm/Microchip-Development-Board-PIC32MX795F512L-32-bit-USB-OTG-PICKIT3-/171215482829?hash=item27dd3cefcd:g:mJgAAOxyOalTZWP2) 
mit einem PIC32MX795 darauf bestellt.

Nun sitze ich an der ersten Inbetriebnahme und will zunächst einfach mal 
die CPU-Taktfrequenz einstellen und entsprechend prüfen.
Dazu dachte ich daran, ein PWM zu erzeugen, dessen Frequenz ich mit 
einem Oszi messe.

Dabei bekomme ich allerdings keine Einstellung zustande, die ich mir 
erklären kann.

Laut Angebot sollte auf dem Board ein 12 MHz-Quarz sitzen. Laut der 
Beschriftung des Bauteils ist tatsächlich aber ein 8 MHz-Quarz darauf.
Den µC würde ich gerne mit 80 MHz betreiben.


Hier mal die Einstellungen, mit denen ich dachte, 80 MHz einzustellen:
1
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (2x Divider)
2
#pragma config FPLLMUL = MUL_20         // PLL Multiplier (20x Multiplier
3
#pragma config FPLLODIV = DIV_1         // System PLL Output Clock Divider (PLL Divide by 1)
4
5
#pragma config FNOSC = PRIPLL           // Oscillator Selection Bits (Primary Osc w/PLL (XT+,HS+,EC+PLL))
6
#pragma config FSOSCEN = OFF            // Secondary Oscillator Enable (Disabled)
7
#pragma config IESO = OFF               // Internal/External Switch Over (Disabled)
8
#pragma config POSCMOD = XT             // Primary Oscillator Configuration (XT osc mode)
9
#pragma config OSCIOFNC = OFF           // CLKO Output Signal Active on the OSCO Pin (Disabled)
10
#pragma config FPBDIV = DIV_1           // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1)
11
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled)

Um die korrete Systemfrequenz zu überprüfen erzeuge ich nun ein PWM, 
dessen Frequenz von der Systemfrequenz abgeleitet wird:
1
void main()
2
{        
3
    /* System clock:  80 MHz */
4
    /* PWM Frequency: 20 kHz */
5
    /* -> Prescaler:   1     */
6
    /* -> Period:     80 MHz / 20 kHz = 4000 */
7
    T2CONbits.TCKPS = 1;        /* Prescaler */
8
    PR2 = 3999;                 /* Period */
9
    OC1CONbits.OCM = 0b110;
10
    OC1RS = 2000;               /* 50 % duty cycle */
11
    OC1R = 0;
12
    T2CONbits.ON = 1;
13
    OC1CONbits.ON = 1;
14
    
15
    while(1)
16
    {
17
        
18
    }
19
}

Damit erhalte ich allerdings nur eine PWM-Frequenz von 10 kHz.

Kann jemand mal über die Einstellungen schauen und prüfen, ob ich 
irgendwo einen Fehler gemacht habe?

Vielen Dank
Gruss
matt

von 1N 4. (1n4148)


Lesenswert?

> T2CONbits.TCKPS = 1;        /* Prescaler */

1 entspricht aber einem 1:2-Teiler
0 wäre 1:1

(Datenblatt S.203)

: Bearbeitet durch User
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.