Migrazione dal PIC16F877 al 18F452 al 18F4525

Il bello della Microchip è che sforna nuovi modelli di PIC in continuazione, aggiungendo ogni volta nuove funzionalità e incrementando la dimensione della memoria programma, della RAM e dell'EEPROM. In ogni caso l'investimento fatto, in termini di ambiente di sviluppo (HW e SW) e di conoscenza, non è mai perso, si aggiungono sempre nuove funzioni a quelle già note.
All'interno della stessa famiglia poi, c'è anche una grossa compatibilità a livello elettrico, permettendo di passare al modello più potente con poche modifiche.
La controller board del Mark III usata per Dino, nata per il PIC16F877, è perfettamente compatibile con il PIC18F452.
Lo sforzo principale è stato quello di usare il compilatore C18 di Microchip al posto del PICC di Hi-Tech, entrambi usati nella versione lite (gratuita), in queste versioni il C18 ha molte meno limitazioni dell'equivalente Hi-Tech rispetto alle versioni full. Il C18 è più rispettoso delle specifiche ANSI confrontato con il PICC e quindi bisogna essere più attenti (tra le altre cose) alle inizializzazioni delle variabili. Entrambi sono comunque molto vicini all'ANSI C stsandard, il porting non è stato quindi assolutamente complicato.

Una volta verificata la compatibilità base senza alcuna modifica, ho cominciato ad usare la maggiore potenza cambiando il quarzo da 20 MHz con uno da 10MHz. In questo modo, moltiplicando per 4 la frequenza con il PLLx4 interno, il clock diventa a 40MHz e quindi la MCU lavora a 10Mips. La seconda modifica ha riguardato la gestione degli interrupt, molto più potente, che mi ha risolto molti problemi con gli encoder.

Appena finita la migrazione al 18F452, questo è andato fuori produzione, sostituito dal 18F4520 e compatibile con l'ancora migliore 18F4525, fratello minore del 18F4620.
In questo caso il passaggio è stato ancora più facile, il compilatore è lo stesso, ho una quantità di memoria sia per il programma che per le variabili che non mi fa più preoccupare per ogni flag che aggiungo e posso attivare tre breakpoint contemporamente durante il debug con l'ICD2. Ci sono più modi di lavorare con il PWM ma la configurazione a default consente una modalità compatibile con i precedenti modelli.
L'unica parte di codice che deve essere assolutamente cambiata per essere compatibili con i modelli precedenti, è quella relativa agli A/D converter.

Nella tabella seguente ho riassunto le differenze tra i registri di configurazione dell'A/D converter dei diversi PIC.
Fare riferimenti ai manuali Microchip per i dettagli.

Funzione Nome bit 16F877 18F452 18f4525 18F4260 Modifica Mnemonico 877/452 Mnemonico 4525/4620
Analog channnel select CHSx ADCON0 bit 3-5 ADCON0 bit 2-5 shiftare a destra i bit ADCON0bits.CHS0-CHS2 ADCON0bits.CHS0-CHS3
A/D conversion status GO/DONE ADCON0 bit 2 ADCON0 bit 1 shiftare a destra i bit ADCON0bits.GO idem
A/D converter ON ADON ADCON0 bit 0 idem nessuna ADCON0bits.ADON idem
A/D convertion clock select ADCS0:2 ADCON0 bit 6-7 ADCON1 bit 6 ADCON2 bit 0-2 usare registri diversi ADCON0bits.ADCS0-ADCS1 ADCON1bits.ADCS2 ADCON2bits.ADCS0-ADCS2
A/D result format select ADFM ADCON1 bit 7 ADCON2 bit 7 usare registri diversi ADCON1bits.ADFM ADCON2bits.ADFM
A/D port configuration control PCFG0:3 ADCON1 bit 3-0 idem i singoli bit hanno significato diverso, usare VCFG0-1 ADCON1bits.PCFG0-PCFG3 idem
Voltage reference configuration VCFG0:1 N/A ADCON1 bit 4-5 vedi sopra N/A ADCON1bits.VCFG0-VCFG1
A/D acquisition time select ACQT0:2 N/A ADCON2 bit 3-5 N/A N/A ADCON2bitsACQT0-ACQT2
Il dettaglio delle nodifiche effettuate.
Vecchio
Nuovo
Vecchio
Nuovo
aggiornato il 03 - 01 - 2006