Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

migration de PIC16 vers PIC18



  1. #1
    Eki27

    migration de PIC16 vers PIC18


    ------

    Hello,

    Je travaille avec un PIC16F1824, bien pratique car il possède un débugger intégré.
    Avec une simple connection ICSP 5 fils, je peux le programmer et débugger simplement en changeant le type de programmateur/debugger dans MPLAB.
    J'utilise un pickit3 et je programme en C avec Hitech.

    Cela me convient bien et je trouve cette formule très facile, seulement je vais devoir migrer vers le PIC18F26K20 car j'ai besoin de plus de RAM pour mon application et je me pose quelques questions... à savoir est-ce que j'ai tout ce qu'il faut et est-ce que cette simplicité va continuer d'exister? (je suis pas trop inquiet car le pickit3 était livré avec une carte 44-pin Demo Board qui comporte un PIC18F45K20 et les méthodes semblaient proches de celles que j'ai l'habitude d'utiliser avec les PIC16)

    - Je suis déjà presque certain que je ne pourrai plus travailler en hitech-c car il indique clairement qu'il est conçu pour les PIC 10/12/16, alors quel sera le meilleur compilateur C "free" à choisir à l'avenir pour le PIC18F26K20?

    - sur le PIC18, disparition de ICSPDAT et ICSPCLK, je suppose que leurs équivalents sont PGD et PGC. la connectique reste la même?

    - y-a-t'il forcément besoin d'un composant intermédiaire (genre ICE ou PICDEM) pour débugger le MCU ou bien vais-je pouvoir continuer à débugger comme avant et sans frais supplémentaires? Dois-je réserver d'autres entrées-sorties du PIC18 pour pouvoir utiliser les fonctions de debugging?



    Merci!!!

    -----

  2. Publicité
  3. #2
    RISC

    Re : migration de PIC16 vers PIC18

    Salut
    Citation Envoyé par Eki27 Voir le message
    Je travaille avec un PIC16F1824, bien pratique car il possède un débugger intégré.
    Avec une simple connection ICSP 5 fils, je peux le programmer et débugger simplement en changeant le type de programmateur/debugger dans MPLAB. J'utilise un pickit3 et je programme en C avec Hitech.

    Cela me convient bien et je trouve cette formule très facile, seulement je vais devoir migrer vers le PIC18F26K20 car j'ai besoin de plus de RAM pour mon application et je me pose quelques questions...
    Pourquoi migrer vers le PIC18F26K20 et ne pas utiliser le PIC16F1825 qui possède 1Ko de RAM ? (voir même les PIC16F1827/28/29) très proches de ton PIC16F1824 ?

    à savoir est-ce que j'ai tout ce qu'il faut et est-ce que cette simplicité va continuer d'exister? (je suis pas trop inquiet car le pickit3 était livré avec une carte 44-pin Demo Board qui comporte un PIC18F45K20 et les méthodes semblaient proches de celles que j'ai l'habitude d'utiliser avec les PIC16)
    Le coeur des PIC18 est une version amléiorée du coeur PIC16 avec un jeu d'instruction plus sophistiqué. Il faut donc utiliser le compilateur C18 ou le Hitech PICC C18. Cependant le PIC18F26K20 a été amélioré. Il existe le PIC18F26K22 plus riche en périphériques et qui possède de l'E2PROM ce qui n'est pas le cas du PIC18F26K20

    - Je suis déjà presque certain que je ne pourrai plus travailler en hitech-c car il indique clairement qu'il est conçu pour les PIC 10/12/16, alors quel sera le meilleur compilateur C "free" à choisir à l'avenir pour le PIC18F26K20?
    Il existe une version gratuite de chaque compilateur Microchip, c'est la version Lite (aucune limite). La seule différence est que le version gratuite n'a pas l'optimiseur de la version payante. Les compilateurs sont téléchargeables ici.


    - sur le PIC18, disparition de ICSPDAT et ICSPCLK, je suppose que leurs équivalents sont PGD et PGC. la connectique reste la même?
    Exact, tous les PICs possèdent le même interface de debug et de programmation (ICSP). Tous les outils sont compatibles avec cet interface.

    - y-a-t'il forcément besoin d'un composant intermédiaire (genre ICE ou PICDEM) pour débugger le MCU ou bien vais-je pouvoir continuer à débugger comme avant et sans frais supplémentaires? Dois-je réserver d'autres entrées-sorties du PIC18 pour pouvoir utiliser les fonctions de debugging?
    C'est identique que pour les PIC16. 2 broches du PIC seront nécessaires (PGC et PGD) pour déboguer et programmer.
    La seule chose à vérifier est que ton PIC possède une unité de debug/programmation (voir ici : http://www.microchip.com/dts).
    Les petits PICs ( < 20 broches ) ont généralement besoin d'un adaptateur appelé HEADER pour avoir accès au debug. L'exception existe pour les nouveaux PIC16F1xxx qui possèdent parfois une unité de debug y compris dans les petits boitiers ;=)

    a+
    Dernière modification par RISC ; 03/02/2012 à 00h35.

  4. #3
    Eki27

    Re : migration de PIC16 vers PIC18

    Ca c'est de la belle réponse, exhaustive et claire! Merci Risc!!!

    Pourquoi migrer vers le PIC18F26K20 et ne pas utiliser le PIC16F1825 qui possède 1Ko de RAM ? (voir même les PIC16F1827/28/29) très proches de ton PIC16F1824 ?
    En effet, j'avais vu des PIC16 avec plus de RAM, 1Ko c'est bien, mais un peu juste encore... c'est pourquoi j'ai opté pour le PIC18 (3.5Ko RAM)

    Il existe le PIC18F26K22 plus riche en périphériques et qui possède de l'E2PROM ce qui n'est pas le cas du PIC18F26K20
    j'ai pourtant cru lire que le PIC18F26K20 comportait 1Ko d'EEPROM? A moins que ce ne soit pas une faute de frappe et que tu ne parles d'un type de mémoire "E2PROM" que je ne connais pas

    C'est identique que pour les PIC16. 2 broches du PIC seront nécessaires (PGC et PGD) pour déboguer et programmer.
    La seule chose à vérifier est que ton PIC possède une unité de debug/programmation (voir ici : http://www.microchip.com/dts).
    Les petits PICs ( < 20 broches ) ont généralement besoin d'un adaptateur appelé HEADER pour avoir accès au debug. L'exception existe pour les nouveaux PIC16F1xxx qui possèdent parfois une unité de debug y compris dans les petits boitiers ;=)
    Je n'ai pas vu dans la fiche technique si oui ou non le PIC18F26K20 comportait le debugger intégré. Comment faire pour identifier cela théoriquement? Dans le cas ou le PIC le possède (j'espère bien), est-ce que le header ou les outils complémentaires apportent des fonctionnalités ou des performances supplémentaires?

    Merci et à bientôt

  5. #4
    RISC

    Re : migration de PIC16 vers PIC18

    Citation Envoyé par Eki27 Voir le message
    En effet, j'avais vu des PIC16 avec plus de RAM, 1Ko c'est bien, mais un peu juste encore... c'est pourquoi j'ai opté pour le PIC18 (3.5Ko RAM)
    Effectivement tu as besoin de beaucoup plus de RAM ;=) Les PIC18 sont effectivement justifiés

    j'ai pourtant cru lire que le PIC18F26K20 comportait 1Ko d'EEPROM? A moins que ce ne soit pas une faute de frappe et que tu ne parles d'un type de mémoire "E2PROM" que je ne connais pas
    Autant pour moi le PIC18F26K20 a effectivement de l'EEPROM (= E2PROM). Je ne connais pas ton cahier des charges, mais regarde quand même les PIC18F25K22/26K22 qui sont très récents, moins gourmand en conso et beaucoup plus riches en périphériques et aussi peut être en points d'arrêt (voir dans MPLAB dans le champ HW BP = Hardware Breakpoints)

    Je n'ai pas vu dans la fiche technique si oui ou non le PIC18F26K20 comportait le debugger intégré. Comment faire pour identifier cela théoriquement? Dans le cas ou le PIC le possède (j'espère bien), est-ce que le header ou les outils complémentaires apportent des fonctionnalités ou des performances supplémentaires?
    Il y a 2 méthodes pour savoir si le PIC possède une unité de debug intégrée ou pas :
    a/ tu ouvres MPLAB : Configure > Select Device > tu choisis ton PIC et tu regardes dans la boite ICE/ICD en bas à droite. Si tu vois une référence de header avec (Req) à côté cela que le HEADER est REQUIRED (obligatoire) pour avoir le debug.
    b/ Tu utilises le selecteur d'outils "Development Tool Selector", tu tapes la référence de ton PIC, tu choisis ton boitier, et tu regardes le tableau. Si tu vois une référence de header c'est qu'elle est probablement obligatoire (je pense que cela est indiqué par le "++" à coté de la référence.

    a+
    Dernière modification par RISC ; 03/02/2012 à 09h25.

  6. A voir en vidéo sur Futura
  7. #5
    Eki27

    Re : migration de PIC16 vers PIC18

    Que des bonnes nouvelles, merci encore Risc

    Je me suis donc lancé dans les premières manip avec le 18F26K20, et surtout pour moi, ce nouveau compilateur C18 que je vais devoir apprendre à utiliser... bien entendu le premier test ne marche pas du tout!! (pourquoi je m'y attendais tant??)

    l'objectif, proche du hello world, est ici de faire clignoter RC3 (pin 14) à 1 Hz... j'ai écrit l'euphémisme de code ci-dessous, ca se compile bien et ca se programme correctement mais je n'ai pas de réaction sur RC3, je dois certainement faire erreur dans les bits de configuration (je dirais même que ca sent l'oscillateur qui pédale dans le vide), je tente d'initialiser le PIC pour un fonctionnement à 1Mhz avec l'oscillateur interne:

    Code:
    /** C O N F I G U R A T I O N   B I T S ******************************/
    
    #pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF                       // CONFIG1H
    #pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30                        // CONFIG2L
    #pragma config WDTEN = OFF, WDTPS = 32768                                    // CONFIG2H
    #pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC       // CONFIG3H
    #pragma config STVREN = ON, LVP = OFF, XINST = OFF			     // CONFIG4L
    #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF                    // CONFIG5L
    #pragma config CPB = OFF, CPD = OFF                                          // CONFIG5H
    #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF                // CONFIG6L
    #pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF                            // CONFIG6H
    #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF            // CONFIG7L
    #pragma config EBTRB = OFF                                                   // CONFIG7H
    
    
    /** I N C L U D E S ***************************************************/
    #include "p18f26k20.h"
    #include <delays.h>
    
    /** D E C L A R A T I O N S *******************************************/
    
    /** P R O T O T Y P E S ***********************************************/
    void init(void);
    
    /** P R O G R A M *****************************************************/
    void main (void)
    {
    	init();
    	while (1)
    	{
    	PORTCbits.RC3 = 0;
    	Delay10KTCYx(250);
    	PORTCbits.RC3 = 1;
    	Delay10KTCYx(250);
    	}
    	
    }
    
    /** F U N C T I O N S **************************************************/
    
    void init(void)
    {
    	OSCCON = 0b00110110;					             //oscillator 1Mhz
    	TRISCbits.RC3 = 0;						     //RC3 is output
    }

  8. #6
    RISC

    Re : migration de PIC16 vers PIC18

    Salut,

    Je te recommande de t'inspirer du logiciel fourni dans le kit appelé PICkit 3 Debug Express.
    En effet, ce kit intègre une carte avec un PIC18F45K20 qui est le grand frère du PIC18F26K20.

    Télécharges dans le lien ci-dessus les fichiers : "PICkit 3 Debug Express Lesson Files" et "PICkit 3 Debug Express Lessons User's Guide"

    Cela te donnera des exemples de programme ou avec très peu de modifications tu auras très vite quelque chose qui tourne.

    Quel hardware utilises-tu ? As-tu bien fait attention à l'alimentation car le PIC18F26K20 fonctionne entre 1.8V et 3.3V

    a+

  9. Publicité
  10. #7
    Eki27

    Re : migration de PIC16 vers PIC18

    Hello Risc,

    Oui, en fait c'est déjà bien le cas, la base vient d'une des leçons...
    C'est ma carte perso qui alimente le pic (en 2.00V) et je programme avec le pickit3, à mon avis je dois plancher un peu pour me faire à tous ces petits changements... mon souci c'est l'overdose d'informations (450 pages de docs par modèles, faut pas changer tous les jours )

    Y'a forcément des détails qui m'échappent encore dans l'initialisation, suffit plus qu'a trouver (demain )

    Merci!!

  11. #8
    RISC

    Re : migration de PIC16 vers PIC18

    Salut,

    Avant d'aller plus loin je pense qu'il est important de vérifier la partie hardware.
    C'est important car cela influence les valeurs des bits de configuration...

    Peux-tu faire voir ton schéma électronique à jour ?

    a+

  12. #9
    Eki27

    Re : migration de PIC16 vers PIC18

    Heuuuu ben rien de plus simple;
    J'ai deux piles AA en série qui alimente un LDO à sortie positive fixe de 2V (+condo 1uF pour la stabilisation) sur le Vdd et le négatif au Vss, pour le reste c'est la connexion ICSP (PGC, PGD et MCLR)

    Je n'ai pas d'erreurs à la prog ni a la lecture... je suis à 99.98% que je me plante dans la config des fuses.

    A+

  13. #10
    RISC

    Re : migration de PIC16 vers PIC18

    Salut,

    Les connections ICSP sont TRES TRES importantes. C'est de là que viennent la plupart des problèmes de programmation et de connections aux outils.
    Peux-tu confirmer que ton ICSP a 5 broches et que tu as relié DIRECTEMENT les 5 signaux ?
    Sur le MCLR il faut aussi (sauf si tu as un système de reset externe) une résistance de rappel d'environ 10K.
    Si tu as un reset externe, il faut une diode ou une faible resistance entre le point milieu du reseau RC et l'entrée MCLR du PIC. la broche MCLR du connecteur ICSP doit être connectée directement à la broche MCLR du PIC.

    D'après tes bits de config tu utilises un circuit de reset externe. Est-ce le cas ?

    Commence par essayer simplement d'allumer la led...avant de la faire clignoter ;=)
    Utilises le mode debugger et fais du pas à pas

    a+

  14. #11
    Eki27

    Re : migration de PIC16 vers PIC18

    Bonjour docteur Risc,

    Vous êtes effectivement le meilleur! Mais vous le saviez déjà...

    Diagnostic exact, c'était bien une incohérence au niveau hardware/configuration bits, mon fusible BORV était fixé à 30 (3V), donc mon pic était en auto-reset permanent étant donné que je l'alimente en 2V!
    En ce qui concerne BOREN, je l'ai modifié à ON (pour pouvoir resetter depuis MPLAB), sinon je n'ai effectivement pas besoin (normalement) de reset externe.

    Merci et à bientôt,
    Eki

  15. #12
    RISC

    Re : migration de PIC16 vers PIC18

    Salut,

    Mes félicitations pour ton bon diagnostic (aide-toi, le ciel t'aidera).

    Les années m'ont appris à mettre en cause tout...y compris les hard qui marchent, ont marché et ceux qui sont tombés en marche ;=)

    Les bits de configuration et...le hard qui matchent = la solution gagnante

    Donc la led clignote ?

    Tu trouveras ci-après des exemples de code pour les périphériques PIC18 : http://www.microchip.com/codeexamples
    Cela fait gagner pas mal de temps lorsque l'on a du mal sur un périphérique..voir plusieurs

    Bon courage pour la suite

    a+

  16. Publicité
  17. #13
    Eki27

    Re : migration de PIC16 vers PIC18

    Salut Doc,

    Me revoilà J'ai un système qui fonctionne pas trop mal... à savoir je traite l'ADC, les interruptions du timer0 et l'eusart (TX only) avec succès sur le PIC18 avec C18, MAIS...

    malgré mes tentatives de configuration de l'interruption concernant la réception de données sur l'EUSART, ca coince!

    j'ai placé une ligne de débug vers le port série afin de pouvoir constater l'état des flags et d'autres infos en temps réel...

    Code:
    printf("interruption: IPR1: %#08B / PIE1: %#08B / PIR1: %#08B / RCREG: %c\r\n",IPR1, PIE1, PIR1, RCREG);
    Avec cette ligne de debug, je constate bien que que RCIF de PIR1 ne vient jamais à 1, pourtant je balance de l'info sur l'entrée et je pense avoir configuré tout les périphériques et interruptions nécessaires pour générer correctement l'interruption en cas de réception de données.

    voici mon code d'initalisation des interruptions :

    Code:
    INTCON2bits.TMR0IP = 1;         	// Timer0 is high priority interrupt
    RCONbits.IPEN = 1;			// enable priority interrupts
    INTCONbits.PEIE = 1;			// peripheral interrup enabled (include RCIF)
    INTCONbits.GIE = 1;			// enable global interrupt
    INTCONbits.GIEL = 1;		        // enable low priority interrupts
    INTCONbits.GIEH = 1;			// enable high priority interrupts
    et mon code d'initialisation de l'eusart :

    Code:
    TRISCbits.RC6 = 0;						// RC6 (TX) is output
    TRISCbits.RC7 = 1;						// RC7 (RX) is input
    RCSTAbits.SPEN = 1;						// Receive enabled
    TXSTAbits.TXEN = 1;						// Transmit enabled
    TXSTAbits.BRGH = 1;						// High speed baud rate
    TXSTAbits.SYNC = 0;						// Asynchronous mode
    PIE1bits.RCIE = 1;						// Interrupt receive enabled
    PIE1bits.TXIE = 0;						// Interrupt transmit disabled
    IPR1bits.RCIP = 1;						// EUSART receive interrupt is high
    BAUDCONbits.BRG16 = 1;					        // 16 bit generator is used (SPBRH:SPBRG)
    SPBRG = 26;							// 1 000 000 / (4(26 + 1)) = 9523,8095 -> not precise , but working
    Etant donné que mon PIC fonctionne en 2V et mon MCU en signaux TTL, j'ai cru dans un premier temps que ma transmission ne fonctionnait qu'a moitié (le MCU comprend le signal émis en 2V, mais le PIC ne comprend pas la réception de signaux en 3.3V) Mais non! car j'ai shunté RX/TX sur le PIC afin de faire un loopback et je n'ai pas non plus le flag RCIF de PIR1 qui s'active!!

    J'ai déclaré une interruption (high) qui réagit bien en cas de signal du timer0. Dans la fonction appelée par l'interruption, j'ai simplement ajouté une condition afin de traiter celle de (PIR1)RCIF, mais bien sur elle ne s'exécute jamais car RCIF reste désespérément à 0!

    Peux-tu encore me conseiller afin de tenter d'élucider ce mystère? Merci!!

  18. #14
    Eki27

    Re : migration de PIC16 vers PIC18

    Snif , tant de blabla pour si peu, je me réponds donc à moi-même :

    Ne pas oublier d'activer le receiver, le mettre en service ne suffit pas!
    RCSTAbits.SPEN = 1; // Enables serial port
    RCSTAbits.CREN = 1; // Enables receiver

Discussions similaires

  1. migration de l ipv4 vers l'ipv6
    Par radssiii dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 12/11/2009, 10h45
  2. Migration PIC16F876 vers PIC16F886
    Par catno33 dans le forum Électronique
    Réponses: 0
    Dernier message: 11/03/2009, 15h55
  3. Migration Thunderbird vers Outlook
    Par Aspegic dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 08/10/2008, 17h11
  4. [Brun] migration TPS vers Canal
    Par marc.suisse dans le forum Dépannage
    Réponses: 1
    Dernier message: 13/06/2007, 20h39
  5. Migration vers Vista
    Par omegas dans le forum Logiciel - Software - Open Source
    Réponses: 16
    Dernier message: 31/03/2007, 01h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.