Sida 1 av 2
PIC32: Använda interna klockan i 80MHz?
Postat: 8 maj 2012, 11:46:19
av Zajber
Hej hej! Håller på att flytta ett projekt från PIC32 starter kortet till ett eget kort.
Vårt egna kort har ej extern klocka och vi vill alltså använda den interna 8MHz oscillatorn med PLL å hela köret för att komma upp i 80MHz som vi kört innan på starterkittet.
Får fan inte till hastigheten alls. Kör med dessa config-bitar just nu. Hastgheten är mycket långsammare än det ska vara.
Kod: Markera allt
#pragma config FPLLMUL = MUL_20 // PLL Multiplier
#pragma config FPLLIDIV = DIV_2 // PLL Input Divider
#pragma config FPLLODIV = DIV_1 // PLL Output Divider
#pragma config FPBDIV = DIV_2 // Peripheral Clock divisor
#pragma config FWDTEN = OFF
#pragma config POSCMOD = HS // Primary Oscillator
#pragma config FNOSC = PRIPLL // Oscillator Selection
#pragma config WDTPS = PS1 // Watchdog Timer Postscale
#pragma config OSCIOFNC = OFF // CLKO Enable
#pragma config CP = OFF // Code Protect
#pragma config BWP = OFF // Boot Flash Write Protect
#pragma config PWP = OFF // Program Flash Write Protect
#pragma config FCKSM = CSDCMD // Clock Switching & Fail Safe Clock Monitor
#pragma config FSOSCEN = OFF // Secondary Oscillator Enable (KLO was off)
#pragma config IESO = ON // Internal/External Switch-over
#pragma config ICESEL = ICS_PGx1 // ICE/ICD Comm Channel Select
#pragma config DEBUG = ON // Background Debugger Enable
// Timer interrupts definitioner
#define TOGGLES_PER_SEC 10
#define CORE_TICK_RATE (SYS_FREQ/2/TOGGLES_PER_SEC)
#define SYS_FREQ (80000000L)
Kör även dessa som vanligt efteråt utan att ha superbra koll på vad som händer ännu.
Kod: Markera allt
// Maximera prestandan
SYSTEMConfigPerformance(GetSystemClock());
mOSCSetPBDIV(OSC_PB_DIV_2);
//--------------------
Vi vill ju bara byta från extern 8MHz till intern 8MHz.
Tips mottages tacksamt!
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 8 maj 2012, 15:12:56
av DavidS
#pragma config FPBDIV = DIV_2
Det sätter peripheral bus till hälften av SYSCLK när du kör DIV_2 på den. Kör DIV_1 istället.
Vet dock inte hur det funkar med den interna oscillatorn men det borde väl vara samma som med en extern antar jag.
-edit- .. fast det var ju inte det du frågade efter...
Byt:
till:
6.3.1.3.2 FRC Oscillator with PLL Mode (FRCPLL)
The output of the FRC may also be combined with a user-selectable PLL multiplier and output
divider to produce a SYSCLK across a wide range of frequencies. The FRC PLL mode is
selected whenever the COSC bits (OSCCON<14:12>) are ‘001’. In this mode, the PLL input
divider is forced to ‘2’ to provide a 4 MHz input to the PLL. The desired PLL multiplier and output
divider values can be chosen to provide the desired device frequency.
Med en PLL-mult på 20 så bör du få 4*20=80MHz
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 8 maj 2012, 23:32:33
av JimmyAndersson
"Hastgheten är mycket långsammare än det ska vara."
Det brukar vara en bra ledtråd att kolla exakt vilken hastighet man faktiskt får.
Låt en pinne växla mellan 1 och 0 och mät med t.ex frekvensräknare eller oscilloskop.
Ofta blir det då ett "ah, just det ja".

Re: PIC32: Använda interna klockan i 80MHz?
Postat: 8 maj 2012, 23:44:49
av TomasL
Den interna är väl egentligen failsafe oscilatorn, som snurrar på betydligt lägre frekven.
Tror du har missuppfattat det lite, inga av pic-startkorten använder extern klocka, alla använder den interna oscillatorn med extern kristall.
PBUS klockan har inget att göra med detta.
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 08:32:16
av Zajber
Det brukar vara en bra ledtråd att kolla exakt vilken hastighet man faktiskt får.
Låt en pinne växla mellan 1 och 0 och mät med t.ex frekvensräknare eller oscilloskop.
Ofta blir det då ett "ah, just det ja".

Har testat med en räknare som skall gå i 10Hz och får med detta fram att jag kör ca 0.42 ggr hastigheten av 80MHz vilket är 33,6MHz. Mycket konstig klockning. Men här har jag säkert räknat fel på nått så. Men det är iaf. inte 1/2 eller 1/10 fel nånstans vilket hade varit enklare att feltolka.
Den interna är väl egentligen failsafe oscilatorn, som snurrar på betydligt lägre frekven.
Tror du har missuppfattat det lite, inga av pic-startkorten använder extern klocka, alla använder den interna oscillatorn med extern kristall.
Nu hänger jag inte riktigt med. Hur använder man den interna oscillatorn med en extern kristall? Jag förstår inte hur du menar nu
Så här står det i databladet under Peripheral Features:
Internal 8 MHz and 32 kHz Oscillators
Vilket jag tycker borde ge mig möjligheten att skippa en extern 8MHz oscillator/kristall.
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 08:38:48
av sodjan
Du skrev "Vårt egna kort har ej extern klocka"...
Du menade sannolikt "Vårt egna kort har ej kristall".
"Extern klocka" är något helt annat. Eller är det det ni har?
Det finns (minst) två oscillatorer, den ena har en fabrikstrimmad RC-krets
för frekvensen, den andra använder en extern kristall för frekvensen.
Sen kan det finnas en intern low-power oscillator på ca 32 KHz också...
> Vilket jag tycker borde ge mig möjligheten att skippa en extern 8MHz oscillator/kristall.
Har du verifierat att både 8Mhz oscillatorn för extern kristall och den helt interna
oscillatorn på 8Mhz kan kopplas/konfigureras att köras genom samma PLL ? Jag kan
inte PIC32, men det är inte alltid så på andra PICs.
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:09:54
av DavidS
Jag är nästan helt hundra på att alla PIC32 kan köras utan extern kristall.
Fick lov att söka lite mer och starter-kit-dokumentet säger detta:
2.1.6 Oscillator Options
The installed microcontroller has an oscillator circuit connected to it. The main oscillator
uses an 8 MHz crystal (Y2) and functions as the controller’s primary oscillator. Use of
an external crystal is not required for PIC32 designs. Your design may use the internal
oscillator, if desired.
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:12:37
av Zajber
Givetvis är ordet klocka fel. Vi har en extern klocka också men detta är ett senare bekymmer som kommer att behandlas i en senare tråd.
Men. Jag har ju hittat en illustrativ bild som visar vad jag vill köra.
Problemet tror jag ligger i Config-biten COSC enligt följande:
pic32osc.JPG
Jag vet vilka bitar jag ska välja för att styra COSC men dessa återfinnes ej i config-manualen för C32.

Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:16:16
av sodjan
> Jag är nästan helt hundra på att alla PIC32 kan köras utan extern kristall.
Ja, det är ju självklart och ingen har ifrågasatt det.
Frågan var om det är verifierat att även den interna oscillatorn
kan köras via samma PLL och att man ska kunna få ut 80 MHz.
Länk till datablad ?
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:17:19
av Zajber
Funkar.
Gör att det inte startar alls. Dessutom lägger debuggern av.
Detta är databladet:
http://ww1.microchip.com/downloads/en/D ... 61143E.pdf
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:22:00
av sodjan
> Config-biten COSC...
På bilden ser det ut som att det skulle vara *3* bitar, fast det räcker med
en bit med bara två ingångar att välja mellan. Märkligt. Hur ser COSC ut
i själva registret ? Alltså COSC<2:0>.
Kollar databladet lite senare...
Om jag ser rätt så bör FPLLIDIV = 2, PLLMULT = 20 och PLLODIV = 1.
8/2 = 4. 4x20 = 80. 80/1 = 80.
Och TUN måste vara satt att ge 8 MHz...
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:45:13
av Zajber
Detta kan grunda sig i något mycket enklare som det ser ut nu.
Jag tror att jag har strulat till det med min timerinterrupt som ska räkna upp med 10Hz, men den verkar ha blivit initierad på fel sätt eller har någon felaktig prio som gör att det inte blir en interrupt så länge jag kör en manuell for-delay.
Jag kör nu med bara FRC på FNOSC tills min interrupt inte styrts av de manuella delay-rutinerna som finns.

Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 09:52:56
av Zajber
Så nu funkar interrupten som den ska. Nu har jag verifierat att
FNOSC = FRC ger exakt 8MHz precis som det borde enligt kartan ovan.
Nu ska jag testa att ändra lite config-bitar(s).
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 10:37:19
av Zajber
Jag tror jag har hittat problemet. Och det är inte mjukvaran.
Med FRCPLL kan jag köra 40MHz utan problem men icke 80MHz.
Så det borde då vara vår DEBUG-adapter som inte klarar dessa hastigheter.
Re: PIC32: Använda interna klockan i 80MHz?
Postat: 9 maj 2012, 11:13:49
av sodjan
Ni hade alltså inte samma debug-adapter när ni körde på det andra kortet?
Om det finns begränsningar så tycker man ju att de borde vara dokumenterade.
