ISSLg - Cours d'électronique - Dessin, Lecture de plan, schéma
Le PIC16F690
Navigation> electronique/plan/pic16f690

Brochage

La plupart des broches du PIC sont multifonctions :
N° de pin
Basic
I2C
PWM DI
D0
AN
Compar
EUSART
SPI
Remarque
1
Vdd








Alimentation de 2V à 5V5
2
T1CKI
OSC1
CLKIN


RA5 RA5



Ne pas utiliser si un quartz externe est nécessaire
3
/T1G
OSC2
CLKOUT


RA4
RA4
AN3


Ne pas utiliser si un quartz externe est nécessaire
4
Vpp
/MCLR


(RA3)





Ne jamais utiliser : 12V de programmation
+ RESETexterne
5


CCP1
P1A
RC5
RC5




À réserver en priorité pour le PWM ou
le pont et demi-pont en H
6


P1B RC4
RC4

C2OUT


À réserver en priorité pour le pont et demi-pont en H
7


P1C
RC3
RC3
AN7
C12IN3-


À réserver en priorité pour le pont en H
8



RC6
RC6
AN8

/SS
À réserver en priorité pour le SPI
9



RC7
RC7
AN9


SDO
À réserver en priorité pour le SPI
10



RB7
RB7


TX

À réserver en priorité pour le RS232
11

SCL
RB6
RB6



SCK
À réserver en priorité pour l'I2C ou le SPI
12



RB5
RB5
AN11

RX

À réserver en priorité pour le RS232
13

SDA
RB4
RB4
AN10


SDI
À réserver en priorité pour l'I2C ou le SPI
14


P1D RC2
RC2
AN6
C12IN2-

À réserver en priorité pour le pont en H
15



RC1
RC1
AN5
C12IN1-


16



RC0
RC0
AN4 C2IN+



17
INT
T0CKI


RA2
RA2
AN2 C1OUT


À réserver en priorité pour l'interruption
18
ICSPCLK

RA1
RA1
AN1
Vref
C12IN0-

À réserver en priorité comme référence analogique
19
ICSPDAT


RA0
RA0
AN0
ULPWU
C1IN+


20
Vss








0V de l'alimentation
Basic = connexion de base : alimentation, programmation, interruption, quartz
I2C = communication I2C
PWM = 1 transistor (simple PWM), 2 transistors (demi-pont), 4 transistors (pont en H)
DI = entrée logique
DO = sortie logique
AN = entrée analogique
Compar = entrées et sortie des comparateurs
EUSART = communication série
SPI = communication SPI


1ère étapes : Alimentations et programmation


Raccorder
le GND via Vss (pin 20).
Alimenter par Vdd (pin 1) généralement en 5V (le PIC16F690 fonctionne entre 2V et 5V5).

Raccorder le peigne de programmation à 6 pins :
Peigne de programmation
PIC16F690
Fonction
1
4 via une 470R
Vpp = applique le 12V de la FLASH de programmation
2
1
Vdd = +5V
3
20
Vss = 0V = GND
4
19
ICSPDAT = données de la communication série de programmation
5
18
ICSPCLK = horloge de la communication série de programmation
6
3 via une 100R
auxiliaire de programmation généralement non utilisé
Note 1 : C1 sert à déparasiter l'alimentation du PIC, il doit être placé au plus près des pins 1 & 20 du PIC.
Note 2 : R1 sert de pull-up, pour que le PIC ne soit pas en RESET une fois le programme chargé.
Note 3 : R4 à R7 permettent de programmer la carte indépendamment du hardware connecté à ces broches, par exemple si un poussoir était directement raccordé à RA0 en mettant cette entrée à 0V ou 5V, les données de programmation ICSPDAT seraient bloquées à 0 ou 1... Grâce à R4, le PicKit2 peut forcer cette entrée !
Note 4 : il est utile de prévoir un jumper (JP1) pour pouvoir déconnecter l'alimentation du projet de celle du PicKit2 (et donc de l'USB du PC) lorsque celui-ci est connecté à votre projet, sinon il y a un risque de court-circuit entre les alimentations...

Quartz :
Le PIC possède un oscillateur interne à 1% (avec possibilité d'ajustage plus précis par software) qui permet de le faire travailler à 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz ou 31kHz (moins il va vite, moins il consomme, utile pour les applications fonctionnant avec des piles). Dans la grande majorité des cas vous n'avez pas besoin de quartz externe. Il ne sera nécessaire que si vous voulez travailler à une fréquence plus rapide (le PIC16F690 peut monter à 20MHz) ou être plus précis. Dans ce cas, consulter le datasheet pour voir comment raccorder le quart aux pins 2 & 3.

2ème étapes : Communications
Raccorder le I2C si nécessaire : pin13 = SDA    pin 11 = SCL  (impérativement ces 2 pins en mode SLAVE).
NB : en mode MASTER l'I2C peut être réalisé au moyen de deux I/O logique quelconque.

Les 2 pull-up R6 et R7 ne doivent être présente qu'une fois sur le réseau I2C (ne pas les mettre à chaque périphérique I2C).
Si vous devez sortir la communication I2C de la carte, essayer d'utiliser le brochage suivant avec 2 peignes 6 broches côte à côte pour y connecter un câble plat avec connecteur IDC 2x6 (prévoir un jumper pour pouvoir déconnecter le 5V du câble plat durant la programmation ou les tests) :

Peigne PIC16F690 I2C
1
20
GND
2
20
GND
3
13
SDA
4
11
SCL
5
1
+5V
6
1
+5V

NB : de nombreux composants utilisent la communication I2C : IO expander, Giroscope, ADC, DAC, boussole, GPS...

Pour info les librairies du RS232 et du SPI n'ont pas encore été testées en classe...


3ème étapes : Interruptions
Si vous avez des signaux d'entrées logiques qui traduisent des évènements ou nécessitent des mesures de temps (ECHO d'un capteur US, touche enfoncée sur un clavier, récepteur de radio-commande, fréquence-mètre...), utilisez la pin 17 (INT/RA2), elle permet de lancer des fonctions de programmation spécifiques pour le traitement de l'évènement ou la mesure précise du temps avec les TIMERs internes du PIC.

4ème étapes : Entrées/sorties
Raccorder les entrées analogiques (pot, LDR, CTN...) aux capteurs analogiques.
Raccorder les sorties PWM (commande de vitesse de moteurs, sorties analogiques, pont en H).
Et finalement utiliser les pins restants comme entrées logiques (interrupteurs...) ou sorties logiques (LED, relais...).

NB : si vous avez des commandes en 8 bits à faire, essayez de les faire avec le PORTC (RC0..7), ça simplifiera la programmation...

Exemples de raccordements
Protection alim 5V externe

D1 permet de faire fondre F1 si le 5V est branché à l'envers sur P1.
NB : D1 peut avantageusement être remplacée par une 1N5821G (Schottky 3A 30V).

Redressement et régulateur LM7805

En simple alternance (faible consommation ou alimentation DC) ne pas monter D2 et D4 et remplacer D3 par un pontage.

Capteur US : HC-SR04
Raccorder "Echo" de préférence sur RA2/INT. Le "Trig" peut être raccordé à une quelconque sortie logique.


Entrées analogiques : pot, LDR, CTN, capteur optique...

S'inspirer des montages ci-dessus en utilisant les entrées AN0..11 au lieu de l'Arduino.
La mesure d'une tension supérieure à 5V (ex tension batterie) se fait via un diviseur résistif.
Le potentiomètre peut mesurer des angles (rotatif) ou des petits déplacements (linéaire).
Il existe de nombreux capteurs délivrant une sortie analogique (T°, Rshunt pour la mesure de I, audio...).


Servo-moteur...
Les impulsions de commande sont à recréer par software sur n'importe quelle sortie logique.
Bien filtrer les alimentations (pointes de courant) avec des supercap de 0F22.
Attention au câblage des servomoteurs : certains fabricants croisent le +5V et la commande (pin 2 & 3) !
Code couleur des fils des servomoteurs :
pin1 = 0V = noir ou brun
pin2 = 5V = rouge
pin3 = commande = orange, jaune, blanc ou bleu

NB : les moteurs brushless doivent être équipés d'un variateur de vitesse ESC qui se pilote en largeur d'impusion comme les servomoteurs.


Sorties PWM : pont en H...
PWM simple
Simplement commander le transistor de commande avec CCP1 (RC5).

Demi-pont (extrait du datasheet)

Pont en H
(extrait du datasheet)



Entrées et sorties logiques : microswitch, piézo, LED, relais...

S'inspirer des montages ci-dessus en utilisant les I/O logique RA0..2, RA4..5, RB4..7, RC0..7 au lieu de l'Arduino.
Il ne faut jamais laisser une entrée "flottante", tous les contacts d'entrées doivent être équipé soit d'une "pull-up" (par défaut à 5V) soit d'une "pull-down" (par défaut à 0V).

Pour éviter les rebonds des contacts, vous avez intérêt à mettre un condesnsateur en parallèle avec le contact (Rpullx * C = temps de filtrage).
S'il y a beaucoup de contact à lire (clavier) ... c'est plus complexe (raccordement matriciel) rdv en 6TQT !
De nombreux capteurs (magnétique, capacitif, audio, radio, infra-rouge...) fonctionnent avec une "pull-up".
Si l'entrée logique est utilisée pour du comptage (mesure de fréquence, de vitesse de temps...) ou pour des protocoles de communication (radio, IR), vous avez intérêt à la raccorder à une interruption RA2 (INT).

Pour la commande simultanée de plusieurs LED, il faut tenir compte de leur tension de seuil : avec une alimentation 5V vous pourrez commander deux LED rouges (1V8 + 1V8 = 3V6) en série, mais pour les LED bleu (3V + 3V = 6V...) il faudra les mettre en parallèle.
S'il y a beaucoup de LED à commander (Afficheur 7 segments, pavé de LED) ... c'est plus complexe (série/parallèle, raccordement matriciel).
Si vous devez faire varier la luminosité d'une LED, il faut utiliser une sortie PWM ou réaliser le PWM par software.
Pour faire varier la couleur d'une LED RGB, il faut 3 sorties PWM... ou utiliser des NéoPixels (communication série à largeur d'impulsion).

Pour générer des sons, le buzzer a son propre oscillateur interne, il suffit d'y appliquer un 1 logique pour le faire émettre, mais vous ne pouvez faire qu'une seule note...
Pour faire une mélodie, il faut utiliser un piézo sur la sortie PWM mais vous ne savez par faire varier la force de la note (amplitude, volume) ni le timbre ("couleur" du son permettant de distinguer un piano d'une flute...).
Pour piloter un haut-parleur (audio HiFi), c'est plus complexe, il faut passer par un DAC (convertiseur logique vers analogique) et un ampli audio...

Avec un relais vous pouvez commander une foule d'équipements (appareils en 230Vac, commande de chaudière...).
Pour des moteurs de plus de 1A, c'est souvent plus compact d'inverser leur sens de marche avec un relais, plutôt qu'un pont en H.


Auteur : Philippot Marc - 05/10/2020