Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema oscillatore interno PIC18F46K20

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Problema oscillatore interno PIC18F46K20

Messaggioda Foto Utenteivanpascolo » 14 nov 2014, 14:13

Sto iniziando un nuovo progetto con un PIC18F46K20, è la prima volta che faccio qualcosa con i pic18.
Utilizzo MPLAB con il compilatore XC8, il primo problema è quello di impostare l'oscillatore interno a 64MHz con code configurator... ma non riesco a farlo andare piu' di 16MHz.
Nella terza pagina del data-sheet parlano chiaro: 64 MHz performance available using PLL – no external components required. Problema del tool?
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

0
voti

[2] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto Utenteivanpascolo » 14 nov 2014, 21:48

Aspettando ho scritto anche sul forum della Microchip che prontamente mi ha risposto (e questo fa molto onore alla casa) dichiarando il problema.

Hello IvanP,

There is an issue with the PIC18FxxK20 devices in MCC version 2.0.1 that prevents the PLL from being enabled. This issue will be corrected in the next release of MCC.

To work around this issue, you can set the PLLEN bit in the OSCTUNE register. Here is an example of the OSCILLATOR_Initialize function with the PLL enabled. In this example the Internal Oscillator will run at 64 MHz.

Codice: Seleziona tutto
void OSCILLATOR_Initialize(void)
{
    // SCS FOSC; IDLEN disabled; IRCF 16MHz_HFINTOSC/4;
    OSCCON = 0x70;
    // INTSRC disabled; PLLEN enabled; TUN 0x00;
    OSCTUNE = 0x40;
    // Set the secondary oscillator
   
}


Unfortunately, if you manually change the System Clock frequency, MCC cannot correctly calculate Timer values, baud rates, or delays. There are other methods to work around this issue, including methods would allow MCC provide correct time calculations. These methods will require some additional editing of the generated code. If you are interested in pursuing these work arounds, let me know, and I can provide additional instructions.

Thank you for using MCC, and reporting what your experiences here on the forum.

Regards,
picworker
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

0
voti

[3] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto Utenteivanpascolo » 15 nov 2014, 11:42

Concludendo, per far lavorare l'oscillatore interno a 64MHz con Code generator è prima necessario generare il codice impostando la frequenza a 16MHz, poi bisogna sostituire #define _XTAL_FREQ 16000000 con #define _XTAL_FREQ 64000000 ed in fine abilitare il PLL "OSCTUNEbits.PLLEN = 1;"
Code generator è uno strumento utilissimo ma pecca ancora di gioventu', speriamo esca la nuova release al piu' presto.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

0
voti

[4] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto UtenteEcoTan » 15 nov 2014, 13:08

Veramente non dovrei intervenire perché non conosco i Pic18 ed ho il vecchio MPLAB 8.6.
Comunque uso un compilatore C standard e con l'aiuto del DataSheet del microcontrollore, o del Reference Manual nei casi ostinati, riesco a fare tutto quel che mi serve coi clock.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5421
Iscritto il: 29 gen 2014, 8:54

0
voti

[5] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto Utenteivanpascolo » 15 nov 2014, 15:47

E' vero,impostando manualmente i vari registri si può fare tutto.
Ho appena iniziato ad utilizzare questo tool della Microchip perché lo ritengo uno strumento molto utile,
imposta le periferiche e genera del codice per utilizzarle correttamente ma, ha bisogno ancora di qualche aggiornamento.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

1
voti

[6] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto UtenteTardoFreak » 15 nov 2014, 16:38

Piccolo OT

Tempo fa ho scoperto che un PIC32, che teoricamente avrebbe dovuto funzionare immediatamente con il PLL (senza interventi da parte del programma) non lo faceva.
Ho scritto alla Microchip (che non mi ha risposto) ed ho risolto il problema abilitando il PLL con alcune istruzioni all' inizio del programma e precisamente:
- Sbloccando il controllo del clock con opportuna sequenza
- Abilitando il PLL
- Aspettando che il PLL si stabilizzasse.
- Ri-bloccando il controllo del clock.

Quando sono poi passato a far cose serie con gli ARM ho visto che questi micro partono sempre utilizzando l' oscillatore RC interno. Il passaggio ad una diversa configurazione avviene esclusivamente via software.

In effetti questa sarebbe il modo migliore di fare le cose anche perché c'è (per forza) il tempo di attesa per la stabilizzazione del PLL, quindi è un sistema molto affidabile che permette comunque al micro di partire dopo un reset (anche se il quarzo non è presente o rotto) e di decidere come farlo funzionare ed eventualmente come reagire ad un eventuale guasto.

Mi sento quindi di suggerire di utilizzare questo modo di fare anche se la casa costruttrice non lo impone. E' una bella abitudine.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto Utenteivanpascolo » 15 nov 2014, 17:53

Ok, grazie per il suggerimento.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

0
voti

[8] Re: Problema oscillatore interno PIC18F46K20

Messaggioda Foto Utenteivanpascolo » 16 nov 2014, 10:43

La soluzione che inizialmente sembrava funzionare non funziona.
Se genero i file con l'oscillatore interno a 16MHz senza PLL e poi modifico il relativo registro per portarlo a 64MHz, l'oscillatore funziona correttamente ma il codice che genero in seguito (es timer, UART, I2C ecc..) viene fatto considerando i 16MHz.
Ho scritto a Microchip (nel forum) che prontamente mi ha suggerito la soluzione inviando anche un codice di esempio. Come prima cosa bisogna Impostare il clock a 64MHz come oscillatore esterno e poi devo modificare il file generato in modo che lavori con il PLL interno (sempre a 64MHz). Così facendo posso generare tutto il codice delle varie periferiche con le tempistiche corrette.
Quando rigenero il codice devo solo fare attenzione a non sovrascrivere i registri che ho inizialmente modificato. Fortunatamente il Code Generator segnala le modifiche apportate manualmente permettendo di decidere se tenerle o meno.
Spero possa tornare utile a qualcuno.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti