Logs
Consultez les logs.
OK
Liste des données
Consultez la liste des données.
OK
Loading...
Formulaire
Saisissez vos données.
Enregistrer
Annuler

PIC

Vues
379

Introduction


Les microcontrôleurs PICs sont des composants dits RISC (Reduced Instructions Set Computer), ou encore composants à jeu d’instructions réduit. La famille PIC18 présente des améliorations assez notables par rapport à la famille précédente (PIC16). Les changements majeurs sont apportés au cœur du microcontrôleur. Le jeu d’instructions est passé à 75 instructions, dont la plupart sont codées sur un seul mot de 16 bits. La mémoire de programme a subi une extension énorme avec un accès linéaire. La capacité de la mémoire de données est multipliée par huit par rapport à la famille PIC16. Le jeu d’instructions est augmenté de huit nouvelles instructions; ces instructions activables dans l’option de configuration, sont spécialement conçues pour optimiser sa programmation en langages évolués (Basic, C, Pascal).

Les principales caractéristiques de cette famille sont :

Technologie Nanowatt, garantit une consommation d’énergie très réduite
CPU 8 bits à architecture RISC avec une fréquence maximale de 40MHz
75 instructions, extensibles à 83 (16 bits de large)
Jusqu’à 2 Mo d’espace programme adressable
Mémoire RAM de 4 Ko maximum, y compris la zone des SFR (Special Function Registers). La zone SFR comporte les registres de la CPU et des périphériques
Pile matérielle de 31 niveaux
EEPROM pour le stockage des données non-volatiles
Intègre un multiplieur 8 x 8 bits câblés

La série PIC18 fait partie de la gamme haute performance (High-End) des architectures 8 bits de la société Microchip. Outre les périphériques standards, cette famille intègre des modules avancés tels que les modules CAN, USB, Ethernet, LCD.

image.png


Programme principal


La fonction (main) est le point d'entrée de tout programme C embarqué.

Programme principal.

//===============================================
void main() {
    GPort_configPort(1, 0x00);
    GPort_writePort(1, 0xFF);
    
    while(1) {
        GPort_writePin(1, 1, 1);
        GDelay_ms(500);
        GPort_writePin(1, 1, 0);
        GDelay_ms(500);
    }
}
//===============================================

Ce qu'il faut savoir:

Un programme embarqué doit tourner toujours dans une boucle infinie.
d'où la présence de la boucle (while).


Définition de macros


L'opérateur (define) permet de définir une macro.

Définition d'une macro.

//===============================================
#define GDelay_ms _
#define GDelay_us __delay_us
//===============================================


Définition de nouveaux types


L'opérateur (typedef) permet de définir un nouveau type.

Définition d'un nouveau type.

//===============================================
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef _Bool GBit;
//===============================================


Fréquence d'horloge


La macro (_XTAL_FREQ) permet de définir la fréquence d'horloge.

Définition de la fréquence d'horloge.

//===============================================
#define _XTAL_FREQ 20000000
//===============================================


Configuration des paramètres


L'opérateur (pragma) permet de définir une configuration.

Configuration des paramètres.

//===============================================
// Oscillator Selection
#pragma config OSC = HS
// Oscillator Switch Enable
#pragma config OSCS = ON
// Power Up Timer
#pragma config PWRT = OFF
// Brown Out Reset
#pragma config BOR = ON
// Brown Out Voltage
#pragma config BORV = 25
// Watchdog Timer
#pragma config WDT = OFF
// Watchdog Postscaler
#pragma config WDTPS = 128
// Stack Overflow Reset
#pragma config STVR = ON
// Low Voltage ICSP
#pragma config LVP = ON
// Code Protection Block 0
#pragma config CP0 = OFF
// Code Protection Block 1
#pragma config CP1 = OFF
// Code Protection Block 2
#pragma config CP2 = OFF
// Code Protection Block 3
#pragma config CP3 = OFF
// Boot Block Code Protection
#pragma config CPB = OFF
// Data EEPROM Code Protection
#pragma config CPD = OFF 
// Write Protection Block 0
#pragma config WRT0 = OFF
// Write Protection Block 1
#pragma config WRT1 = OFF
// Write Protection Block 2
#pragma config WRT2 = OFF
// Write Protection Block 3
#pragma config WRT3 = OFF
// Boot Block Write Protection
#pragma config WRTB = OFF
// Configuration Register Write Protection
#pragma config WRTC = OFF
// Data EEPROM Write Protection
#pragma config WRTD = OFF
// Table Read Protection Block 0
#pragma config EBTR0 = OFF
// Table Read Protection Block 1
#pragma config EBTR1 = OFF
// Table Read Protection Block 2
#pragma config EBTR2 = OFF
// Table Read Protection Block 3
#pragma config EBTR3 = OFF
// Boot Block Table Read Protection
#pragma config EBTRB = OFF
//===============================================


Ports


Le registre (TRISA) permet de configurer le port A (PORTA).
Le registre (TRISB) permet de configurer le port B (PORTB).
Le registre (TRISC) permet de configurer le port C (PORTC).
Le registre (TRISD) permet de configurer le port D (PORTD).
Le registre (TRISE) permet de configurer le port E (PORTE).

Configuration du port A.

//===============================================
void GPort_configPortA(uchar _data) {
    TRISA = _data;
}
//===============================================

Configuration d'une broche du port A. 

//===============================================
void GPort_configPinA(uchar _pin, GBit _data) {
    if(_pin == 0) TRISAbits.TRISA0 = _data;
    else if(_pin == 1) TRISAbits.TRISA1 = _data;
    else if(_pin == 2) TRISAbits.TRISA2 = _data;
    else if(_pin == 3) TRISAbits.TRISA3 = _data;
    else if(_pin == 4) TRISAbits.TRISA4 = _data;
    else if(_pin == 5) TRISAbits.TRISA5 = _data;
    else if(_pin == 6) TRISAbits.TRISA6 = _data;}
//===============================================

Ce qu'il faut savoir:

Une valeur à (1) sur un bit de configuration correspond à une broche configuré en (entrée) sur le port associé.
Une valeur à (0) sur un bit de configuration correspond à une broche configuré en (sortie) sur le port associé.

Ecriture sur le port A configuré en sortie.

//===============================================
void GPort_writePortA(uchar _data) {
    PORTA = _data;
}
//===============================================

Ecriture sur une broche du port A configuré en sortie. 

//===============================================
void GPort_writePinA(uchar _pin, GBit _data) {
    if(_pin == 0) PORTAbits.RA0 = _data;
    else if(_pin == 1) PORTAbits.RA1 = _data;
    else if(_pin == 2) PORTAbits.RA2 = _data;
    else if(_pin == 3) PORTAbits.RA3 = _data;
    else if(_pin == 4) PORTAbits.RA4 = _data;
    else if(_pin == 5) PORTAbits.RA5 = _data;
    else if(_pin == 6) PORTAbits.RA6 = _data;
}
//===============================================


Délais


La macro (__delay_ms) permet de réaliser des délais d'attente en (ms).
La macro (__delay_us) permet de réaliser des délais d'attente en (µs). 

Réalisation d'un délais en ms.

//===============================================
void main() {
    GPort_configPort(1, 0x00);
    GPort_writePort(1, 0xFF);
    
    while(1) {
        GPort_writePin(1, 1, 1);
        __delay_ms(500);
        GPort_writePin(1, 1, 0);
        __delay_ms(500);
    }
}
//===============================================

Réalisation d'un délais en µs.
 
//===============================================
void main() {
    GPort_configPort(1, 0x00);
    GPort_writePort(1, 0xFF);
    
    while(1) {
        GPort_writePin(1, 1, 1);
        __delay_us(500);
        GPort_writePin(1, 1, 0);
        __delay_us(500);
    }
}
//===============================================


Clignotement d'une LED


Schéma électrique.

image.png

Tracé électrique.

image.png


MPLab X IDE


MPLab est un environnement de développement intégré pour PIC.
XC8 fournit un compilateur C 8-bit pour MPLab.

Téléchargement de MPLab.

https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide#tabs

Téléchargement de XC8.

https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers/downloads-documentation#XC8

Création d'un nouveau projet.

File
New Project
Microchip Embedded
Standalone Project
Next
Family > Advanced 8-bit MCUs (POIC18)
Device > PIC18F448
Tool > No Tool
Next
Compiler Toolchains
XC8 > XC8 (v2.41) [C:\Program Files\Microchip\xc8\v2.41\bin]
Next
Project Name > blink
Project Location > C:\dev\pic\blink
Project Folder > C:\dev\pic\blink\blink.X
Encoding > UTF-8
Finish