PIC32MX - Clock-Einstellungen

OP #4986247
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.