PIC32: Använda interna klockan i 80MHz?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

PIC32: Använda interna klockan i 80MHz?

Inlägg 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!
DavidS
Inlägg: 77
Blev medlem: 26 maj 2008, 14:56:34
Ort: Falun

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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:

Kod: Markera allt

#pragma config FNOSC    = PRIPLL
till:

Kod: Markera allt

#pragma config FNOSC    = FRCPLL
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
Användarvisningsbild
JimmyAndersson
Inlägg: 26584
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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". :)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46987
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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 :humm:

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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.
DavidS
Inlägg: 77
Blev medlem: 26 maj 2008, 14:56:34
Ort: Falun

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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. :shock:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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 ?
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg av Zajber »

Kod: Markera allt

#pragma config FNOSC    = FRC
Funkar.

Kod: Markera allt

#pragma config FNOSC    = FRCPLL
Gör att det inte startar alls. Dessutom lägger debuggern av.

Detta är databladet:
http://ww1.microchip.com/downloads/en/D ... 61143E.pdf
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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...
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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.

:evil:
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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).
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC32: Använda interna klockan i 80MHz?

Inlägg 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. :-)
Skriv svar