[ Accueil ] [ CONTACT ] [ PLAN du Site ] [ RCNV ] [ Publications ] [ Chantiers Bateaux ] [ Technique Modélisme ] [ Electronique ] [ Radios Vintage ] [ Multi-Switch ] [ Vrac ] [ Astuces ] [ Liens ] [ Base ] [ Compteur ]
 

        ... rgl

 

Compilation Basic Stamp To PIC
(Programmable Intelligent Computer)

(c) Rg.LEGAT

 

 

SOMMAIRE

01 -  Introduction - Présentation - Généralités

02 - Choix du Pic de substitution

03 - Considérations sur le µC PICAXE ® programmable en BASIC (PIC12F1840)

04 - Adaptation du programme Basic Stamp

05 - Programme pour retrouver la valeur OSCCAL d'un PIC 12F629 ou 12F675

06 - Memento PIC Programmation

07 - Matériel et logiciels nécessaires à la programmation d'un PIC

08-  ...

 

      Introduction - Présentation - Généralités

Lorsqu'on y a pris goût, il est aisé de mettre au point un projet à µC sur un proto à base de Basic Stamp.

Une fois le projet abouti et pour la réalisation finale, il est intéressant, en terme financier notamment, de transférer nos codes dans un PIC approprié.

Ce transfert, particulièrement aisé grâce à un ensemble compilateur (PicBasic Pro Compiler) et un interface de programmation (EPIC Plus Programmer), ne doit cependant pas nous faire oublier quelques notions de base à considérer dès le début d’une nouvelle étude pour nous éviter, souvent bien trop tard, de désagréables désillusions !

Outre ces considérations préalables, il sera aussi parfois nécessaire d’ajouter quelques lignes de programmation, spécifiques au compilateur ou même au Pic choisi, pour que ce dernier réponde exactement comme le Basic Stamp.

 

L’étude d’un nouveau projet à microcontrôleur compte plusieurs points importants à respecter :

 
                Définition et précision des besoins sous forme d’un petit «cahier des charges»
            Détermination du nombre et du type d’Entrées-Sorties nécessaires
            Nécessité, ou non, de disposer d’une mémoire non volatile (Eeprom)
            Déterminer la vitesse de l’oscillateur du Pic (Choix du Quartz: > 4Mhz interne?)
            Choix du Pic en fonction de ces éléments
            Tracé du schéma proto en tenant compte des particularités spécifiques du Pic choisi (In/Out/Reset)
            Elaboration de la programmation structurée
            Développement en Stamp-Basic
            Essai du Stamp sur platine prototype
            Amélioration / Mise au point de l’algorithme et éventuellement du schéma
            Réalisation du schéma et du board définitif (avec Pic)
            Compilation du programme après éventuelles adaptations relatives au Pic et au quartz utilisés 
            Test du système final

 

Nous allons voir ici les modifications à apporter à nos codes initiaux pour les rendre compatibles avec le PIC choisi.

 

     Choix du PIC 

Comme nous venons juste de le voir, le choix du Pic dépendra essentiellement du nombre d’Entrées/Sorties  à utiliser, de la vitesse d’exécution attendue et de l’éventuelle nécessité de disposer d’une EEprom dans le microcontrôleur.

 

Pour opérer ce choix, et repérer les particularités qui nous causeraient inévitablement des problèmes si nous n’y faisions pas expressément attention, il faudra disposer des Datas Sheet de quelques Pic courants.

 

Les plus intéressants, faciles à se procurer et relativement peu onéreux ou plus simplement utilisés dans cet ouvrage sont ceux du type 16F84x, 16F62x, 12Cx5xx, 12F629, …

Organisation des Entrées/Sorties

 

Il est primordial, avant de tracer le schéma du prototype, d’analyser le ou les types d’Entrée/Sortie disponibles sur le Pic choisi et les fonctions particulières qui leur sont parfois assignées par défaut.

 

Chaque data-sheets comprenant plusieurs dizaines de pages, nous allons nous arrêter sur l’essentiel sans entrer dans l’analyse complète de toutes les nombreuses particularités.

 

Analysons quelques Pic qui nous seront utiles et commençons par la famille 16F62x

 

 

Pic16F62x

 

Celui-ci pourrait presque remplacer entièrement le Basic Stamp qui, lui, compte 16 in/out !

 

En effet, en n’utilisant pas de quartz externe (oscillateur interne de 4Mhz - OSCCAL) et en se passant de la fonction Reset/Master Clear, le 16F628 compte 1 pin Entrée et 15 pins bidirectionnelles Entrée/Sortie.

 

Notons que le 16F628 dispose, outre de son oscillateur interne à 4Mhz, d’une mémoire EEprom de 128K !

 

Nous serions donc tenté de voir ici le Pic idéal qui remplacerait presque, finalement et à moindre coût, le StampII.

 

C’est de fait exact mais, à y regarder de plus près, il y a cependant quelques finesses à relever pour éviter quelques surprises:

 

La broche RA5 (pin n° 4) qui correspondrait à la broche P13 du Stamp ne peut être utilisée qu’en Entrée !

Il faudra donc impérativement en tenir compte lors du tracé du schéma et lors de l’écriture du programme.

Cela signifie donc aussi que dans le programme de mise au point, la broche P13 du Basic-Stamp ne pourra être utilisée qu’en fonction «Entrée» !

Outre la vitesse de fonctionnement (4 Mhz au lieu de 50Mhz pour le Stamp BSIIsx) c’est ici un point essentiel, à ne pas oublier, qui fait une petite différence avec le Stamp !

 

A noter également que cette entrée RA5 est la pin «Master Clear» du processeur !

Si on veut utiliser cette broche comme une entrée normale, il faut absolument désactiver cette fonction assimilable à un «Reset», soit en décochant la case Master Clear Enable dans les options du programmateur Epic Plus Programmer, soit en le précisant dans le programme PBP (voir «Adaptation du programme Stamp»).

Sinon, lorsque cette entrée passera par l’état 0, le processeur fera un Reset et le programme recommencera à son début en ignorant tout le reste situé juste après !

 

La broche RA4 (pin n° 3), correspondant à P12 du Stamp, est bien bidirectionnelle mais, si elle est utilisée en sortie, il faut retenir que celle-ci est de type « Open Drain ».

Cela signifie que lorsque cette sortie est à zéro, elle est bien au potentiel de la masse mais lorsqu’elle sera à l’état «1», elle deviendra «flottante».

Pour que cette sortie ne fonctionne pas de manière erratique, si on désire visualiser son état de sortie par exemple, il faudra lui adjoindre une résistance «Pull-up» raccordée à +5 volts.

La valeur de cette résistance peut varier de 1k à 33 k.

 

Notons également que le PORTA du 16F62x comporte des comparateurs analogiques.

Par défaut, lorsque ce Pic est mis sous tension, ces broches sont considérées en mode analogique.

 

Lorsqu’on mesure ou qu’on traite des niveaux logiques (0/1) ou des impulsions (Pulsin), il faut forcer ces entrées en mode digital.

 

Pour faire passer ces broches en mode digital, il faudra simplement écrire en en-tête du programme à compiler l’instruction suivante : CMCON = 7 (ou = %0000111); CMCON étant le registre définissant le mode d’utilisation des comparateurs du PORTA).

 

 

 

Pic16F84-A

 

Pic très intéressant et très largement développé, il dispose de 13 Entrées/Sorties et d’une broche exclusivement réservée au Reset Master Clear.

 

Ne comportant pas d’oscillateur interne, deux broches sont réservées à un indispensable quartz pour le faire travailler jusqu’à 20Mhz (16F84A) ou d’un éventuel circuit RC si on est moins exigeant.

 

Il dispose en outre d’une EEprom de 64K.

 

Il faut ici noter que la broche RA4 (pin n°3 comme le Pic16F62x), correspondant à la broche P12 du Stamp, lorsqu’elle est utilisée en mode Sortie, est de type «Open Drain».

Une résistance Pull-Up est donc nécessaire pour qu’en mode Sortie, tout se passe comme attendu.

 

Ce pic est un des plus populaires en proposant 13 in/out pour un boîtier DIL18 !

 

De nombreuses sources sont disponibles sur le Net et dans les ouvrages de références.

 

 

 

 

 
Pic12C5xx   =OTP: One Time programming (No Flash programming) !


Ces petits Pic à 8 broches, peu encombrants, sont particulièrement intéressants pour des systèmes ne nécessitant que peu d’Entrées/Sorties.

Ils ne peuvent cependant être programmés qu’une seule fois. On pourrait donc lui préférer les pic 12F629-675.

 

A rappeler ici, qu’en cours d’utilisation du système, la Direction de chaque broche peut facilement être modifiée pour pallier l'apparent problème du nombre limité d'entrées/sorties.

Ainsi, une seule et même broche peut tantôt être définie comme Entrée pour lire un clavier, par exemple, et passer ensuite en mode Sortie pour activer un afficheur avec les valeurs saisies sur ce clavier !

 

Un «petit» Pic comme celui de la famille 12C5xx, disposant de 6 Entrées et/ou Sorties, peut donc rendre d’innombrables services !

Il faut seulement noter que la broche GP3 (pin n°4) ne peut être utilisée qu’en Entrée et que par défaut c‘est aussi la broche Master Clear; option qui doit être désactivée au moment de la programmation ou de l’écriture du programme PBP si on veut utiliser GP3 comme une entrée normale.

 

Vous retiendrez aussi que les Pics de la famille 12CE51x, 12CE67x et 16CE62x disposent d’une EEprom interne interfacée en mode I2C.

 

Pour que l’écriture et la lecture de la mémoire non volatile soient fonctionnelles, il faut remplacer, dans le programme à compiler, les commandes READ et WRITE du Stamp par I2CREAD et I2CWRITE !

 

A remarquer aussi que pour les Pic 12C5xx, 12CE5xx, 12C67 et 12CE67x, le port pins s’appelle GPIO tandis que leur Registre TRIS se nomme TRISIO.

 

 

 

 

Pic12F629 - 12F675   Registre OSCCAL !

 

Merveilleux petits Pic à 8 broches, pouvant être reprogrammé maintes fois et disposant d’une EEprom de 128 bytes pour conserver des valeurs lorsque l’alimentation est coupée !

 

Il dispose de 6 Entrées et/ou Sorties et d’une horloge interne de 4Mhz pouvant être précisément ajustée sur cette fréquence par la valeur du registre OSCCAL.

Les PIC de la série 12F (12F675 et 12F629) possèdent ainsi un oscillateur interne de type RC régulé en tension et température, mais dont la valeur précise ne peut être obtenue qu'en ajoutant quelques instructions pour lire un byte situé en fin de mémoire programme à l'adresse 0x3FF de la RAM et ressemble à h.34xx.
(347C par exemple, 34 étant la commande RETLW et 7C la valeur)

Ce byte, spécifique à chaque PIC, a été écrit par le fabricant MICROCHIP lors des essais en production et permet d'affecter la bonne valeur de 4MHz à l'oscillateur par ces quelques instructions.

Lors des aléas de programmation, de mise au point et des erreurs, et surtout en utilisant un programmateur low cost, il arrive qu'on écrase et perde la valeur de ce byte, et notamment lorsque l'on réalise un "bulk erase", c'est-à-dire un effacement complet du PIC.
Heureusement, IC-Prog vous pose la question et WinPic800 le conserve. (D'autres programmateurs refusent d'aller (ré)écrire à cette adresse)

Donc, par sécurité, et avant toute programmation d'un nouveau PIC, il y a lieu d'aller lire cette valeur OSCCAL et l'indiquer sur le composant.
Sécurité à adopter pour tout PIC pourvu d'un oscillateur interne !
 

En cas de perte de la valeur usine de l'OSCCAL, pour recalibrer le Pic il suffit de lui faire exécuter un petit programme, chargé dans le Pic, lui permettant de délivrer des tops réguliers de 1 msec, par exemple, et les mesurer avec un Stamp ou un oscilloscope, tout en faisant varier la valeur dans le registre spécifique OSCCAL situé en BANK1.

La modification de la valeur OSCCAL conditionnera directement la durée des impulsions jusqu’à la juste valeur attendue.

 

Un exemple de programme de test est repris aux annexes.
Un exposé complet est aussi disponible à cette adresse ( http://bricolsec.canalblog.com/archives/2016/06/04/33912511.html )

 

Enfin, à noter ici aussi que la broche GP3 (pin n°4) ne peut être utilisée qu’en Entrée et que cette broche est également la pin « Master Clear » du processeur !

 

Si on ne désactive pas cette fonction, le processeur "Resetera" chaque fois que GP3, utilisé en mode Entrée, sera égal à 0, ce qui n’est pas nécessairement le but escompté !!!

En effet, le programme ne continuera pas plus loin et redémarrera à son début.

 

Pour désactiver cette fonction Reset Master Clear, il y a deux méthodes:

1)      Lorsque le programme est prêt à être placé dans le Pic avec Epic Plus Programmer, il faut aller dans les paramètres de configuration du programmateur et décocher la case « Master Clear Enable »

2)      Le préciser dans l’écriture du programme PBP en utilisant une instruction Assembleur précédée du signe @ (voir ci-dessous)

 

 

 Brochage des PIC 12F629 et 12F675

 

 

 

Les PIC 12F629 et 12F675 sont très semblables.

Le 12F675 comprend cependant quatre convertisseurs ADC sur GP0, GP1, GP2 et GP4. En outre GP1 présente une tension de référence (Vref).

 

 

 

 

 

 

 Registre OSCCAL   (PIC12F629 et PIC12F675)

 Adresse 3FF ,  Data type: 34xx

 

Par exemple 347C, 34 étant la commande RETLW et 7C la valeur variant de 0 à FC (64 valeurs précises). 

 

 

La valeur d'étalonnage se trouve à la dernière adresse de la zone de mémoire du programme utilisateur, à l'adresse 0x.3FF.

 

 

Il se présente sous la forme d'une instruction RETLW et le code utilisateur doit inclure une instruction CALL 0x3FF qui retournera avec le paramètre d'étalonnage dans le registre W.

Il sera ensuite écrit dans le registre OSCCAL.

 

La fréquence de l'oscillateur interne du PIC varie avec les changements de température et de tension d'alimentation.

Lorsque la tension d'alimentation augmente, la fréquence diminue légèrement.

Pour des applications ne nécessitant pas de précision "horaire" il n'est pas nécessaire de se soucier de la valeur placée en adresse 0x.3FF.

 

A défaut une valeur moyenne 0x.80  (h.80, $80, =d.128) pourra être programmée à l'adresse 0x.3FF lorsqu'elle aura été éventuellement perdue lors d'une programmation antérieure.

  

 

   

 

128

64

32

16

8

4

2

1

HEX

Valeurs
OSCCAL

 

 

 

 

 

 

 

 

 

1

0

0

0

0

0

0

-

-

00

0  à 3

  Min Frq

2

0

0

0

0

0

1

-

-

04

4  à 7

3

0

0

0

0

1

0

-

-

08

8  à 11

4

0

0

0

0

1

1

-

-

0C

12  à 15

5

0

0

0

1

0

0

-

-

10

16  à 19

6

0

0

0

1

0

1

-

-

14

20  à 23

7

0

0

0

1

1

0

-

-

18

24  à 27

8

0

0

0

1

1

1

-

-

1C

28  à 31

9

0

0

1

0

0

0

-

-

20

32  à 35

10

0

0

1

0

0

1

-

-

24

36  à 39

11

0

0

1

0

1

0

-

-

28

40  à 43

12

0

0

1

0

1

1

-

-

2C

44  à 47

13

0

0

1

1

0

0

-

-

30

48  à 51

14

0

0

1

1

0

1

-

-

34

52  à 55

15

0

0

1

1

1

0

-

-

38

56  à 59

16

0

0

1

1

1

1

-

-

3C

60  à 63

17

0

1

0

0

0

0

-

-

40

64  à 67

18

0

1

0

0

0

1

-

-

44

68  à 71

19

0

1

0

0

1

0

-

-

48

72  à 75

20

0

1

0

0

1

1

-

-

4C

76  à 79

21

0

1

0

1

0

0

-

-

50

80  à 83

22

0

1

0

1

0

1

-

-

54

84  à 87

23

0

1

0

1

1

0

-

-

58

88  à 91

24

0

1

0

1

1

1

-

-

5C

92  à 95

25

0

1

1

0

0

0

-

-

60

96  à 99

26

0

1

1

0

0

1

-

-

64

100  à 103

27

0

1

1

0

1

0

-

-

68

104  à 107

28

0

1

1

0

1

1

-

-

6C

108  à 111

29

0

1

1

1

0

0

-

-

70

112  à 115

30

0

1

1

1

0

1

-

-

74

116  à 119

31

0

1

1

1

1

0

-

-

78

120  à 123

32

0

1

1

1

1

1

-

-

7C

124  à 127

33

1

0

0

0

0

0

-

-

80

128  à 131

Center Frq

34

1

0

0

0

0

1

-

-

84

132  à 135

35

1

0

0

0

1

0

-

-

88

136  à 139

36

1

0

0

0

1

1

-

-

8C

140  à 143

37

1

0

0

1

0

0

-

-

90

144  à 147

38

1

0

0

1

0

1

-

-

94

148  à 151

39

1

0

0

1

1

0

-

-

98

152  à 155

40

1

0

0

1

1

1

-

-

9C

156  à 159

41

1

0

1

0

0

0

-

-

A0

160  à 163

42

1

0

1

0

0

1

-

-

A4

164  à 167

43

1

0

1

0

1

0

-

-

A8

168  à 171

44

1

0

1

0

1

1

-

-

AC

172  à 175

45

1

0

1

1

0

0

-

-

B0

176  à 179

46

1

0

1

1

0

1

-

-

B4

180  à 183

47

1

0

1

1

1

0

-

-

B8

184  à 187

48

1

0

1

1

1

1

-

-

BC

188  à 191

49

1

1

0

0

0

0

-

-

C0

192  à 195

50

1

1

0

0

0

1

-

-

C4

196  à 199

51

1

1

0

0

1

0

-

-

C8

200  à 203

52

1

1

0

0

1

1

-

-

CC

204  à 207

53

1

1

0

1

0

0

-

-

D0

208  à 211

54

1

1

0

1

0

1

-

-

D4

212  à 215

55

1

1

0

1

1

0

-

-

D8

216  à 219

56

1

1

0

1

1

1

-

-

DC

220  à 223

57

1

1

1

0

0

0

-

-

E0

224  à 227

58

1

1

1

0

0

1

-

-

E4

228  à 231

59

1

1

1

0

1

0

-

-

E8

232  à 235

60

1

1

1

0

1

1

-

-

EC

236  à 239

61

1

1

1

1

0

0

-

-

F0

240  à 243

62

1

1

1

1

0

1

-

-

F4

244  à 247

63

1

1

1

1

1

0

-

-

F8

248  à 251

64

1

1

1

1

1

1

-

-

FC

252  à 255

Max Frq

 

Le registre OSCCAL est particulier en ce sens ou il se compose d’un byte dont les deux bits de poids faibles ne sont pas utilisés.
On ne dispose donc effectivement que de 64 valeurs (00 à FC) bien précises à programmer, comprises entre 0 et 252 !

Pic12F1840

Petit PIC à 8 pattes, il a été choisi pour finaliser le  Picaxe 08M2.

Une page de ce site  lui est consacrée.

Il est doté d'une horloge interne de 32Mhz ! 

  
                            PIC PIC® XLP™ 12F Microcontroller IC 8-Bit  32MHz  7KB (4K x 14) FLASH 8-PDIP

      

LE PICAXE 08M2 est un PIC12F1840 préprogrammé avec un bootloader (interpréteur BASIC intégré) et cadencé en interne à 32Mhz

 

A noter, en passant ici, l'extrême facilité d'emploi de µC de la Famille PICAXE !

Il s'agit d'un microcontrôleur PIC12F1840 dans lequel a été placé un logiciel d'amorçage (bootstrap) installé dans une zone spécifique du microcontrôleur.

Un éditeur, muni de divers outils pratiques, mis gratuitement à disposition par Revolution Education, et un câble adaptateur usb (ou une simple liaison au port série) permet d'interpréter directement le code écrit en BASIC et le programmer dans le PIC en un instant, sans outil particulier !

On se passe ainsi d'un coûteux compilateur Basic et d'une platine de programmation !

Enfin, pouvant travailler à une fréquence de 32Mhz il atteindra au moins les mêmes performances qu'un PIC 12F629/675 nécessitant, lui, un environnement de programmation onéreux !

Le Picaxe dispose en effet d'un large éventail d'instructions offrant une grande possibilité d'usages (instructions basiques classiques, ADC, i2c, LCD, saisie température, ...)

Le PICAXE est donc un MCU particulièrement apprécié dans les milieux de l'enseignement car, outre son prix dérisoire,  il permet un accès rapide à la programmation et sa compréhension grâce au language BASIC et à sa facilité de programmation.

Il peut donc être une alternative TRES sérieuse à l'usage d'un PIC .

 

     Adaptation du programme Stamp-Basic  pour le PicBasicPro Compiler (PBP)

 Certaines commandes Stamp-Basic ne sont pas reconnues par le PicBasic Pro Compiler et il faudra les adapter. D’autres devront parfois être ajoutées.

 En voici quelques-unes fréquemment rencontrées.

 

A noter que le code à écrire dans le compilateur PBP peut l'être en "pur" Basic et non en "language Basic Stamp".

En fait, il y a très peu de différence: (déclaration des variables et des i/o, ports, ...)

 

Je ne peux que vous inviter à consulter le manuel détaillé du compilateur que vous utilisez et le data sheet du Pic utilisé.

 

 

INCLUDE <"File.ext">

 

La commande INCLUDE permet d’inclure dans le programme divers fichiers sources écrits en Basic.

 

Il est ainsi possible de disposer séparément d’une bibliothèque de subroutines standardisées, de définitions quelconques, de procédures personnelles, … qui pourront facilement être placées dans nos programmes sans devoir les réécrire à chaque fois complètement.

 

«Modedefs.bas», par exemple, sera inclus lorsqu’on utilisera des commandes gérant les liaisons Séries, Ps4_2k.bas est utile pour le 16F628, …

 

Dans notre cas, et avant toute chose, il faut spécifier à PBP que le programme à compiler a été écrit pour un Stamp dont on aura certainement utilisé un ou l’autre de ses noms de registres particuliers.

 

On indiquera donc en début de programme l’instruction INCLUDE «Bs2defs.bas».

 

A noter qu’il sera parfois nécessaire de mettre en remarque, les lignes inutiles de ces sous-programmes.

 

En effet, toutes leurs lignes actives seront écrites dans le Pic, au risque de surpasser la place absolument nécessaire aux lignes du code principal !

Dans ce cas, le programme, trop grand, ne pourrait pas être placé dans le Pic ...

 

Si on lit l'incontournable fichier Bs2defs.bas, on se rend vite compte que la plupart de ses lignes peuvent souvent être mises en remarque pour les désactiver.

Il s'agit notamment des définitions des noms de variables systèmes propres au Stamp, pour autant, bien sûr, que ces variables n'aient pas été utilisées dans le programme.

 

En utilisant PBP pour Windows, vous disposez au dessus de l’écran d’une fenêtre permettant de choisir le Pic que vous utiliserez.

Par défaut, c’est généralement le Pic 16F84 qui est présélectionné.

Le choix opéré dans cette fenêtre écrira automatiquement l’équivalent de l’instruction INCLUDE <Pic utilisé> dans le fichier .asm.

Il ne faut donc jamais écrire, par exemple, INCLUDE «12F629.bas» dans le programme PBP.

Il en résulterait, de toute façon, un message d’erreur.

 

@ <language Assembleur>

 

L’indicatif @ placé en début de ligne permet l’insertion d’une commande «assembleur» dans votre programme PBP.

 

Une commande des plus pratiques est la définition des paramètres programmables de votre Pic et notamment le fameux «Master Clear» qu’il faut désactiver si on veut utiliser cette entrée comme une entrée normale.

 

Exemple d'un début de programme pour le compilateur PicBasic Pro - Ver. 2.46 :

 .

 ' Pic Specifications

'--------------------------

@ Device  Pic12F629, intrc_osc, wdt_off, pwrt_on, mclr_off, protect_off      ‘Paramètres programmables du Pic

  Include "BS2DEFS.bas"    ‘ Stamp to pic

  Define OSC 4             ‘Alignement sur 4Mhz des commandes dépendant du temps

  CMCON=7                  ‘Analog comparators off

  OSCCAL=120      ‘Default: Center=128  Ajustage de l’oscillateur interne (utiliser le paramètre précis d'usine à lire à l'adresse 3FF )

 

 

Dans ce cas, on précise que pour le Pic 12F629 utilisé, on a choisi d’utiliser son oscillateur interne, que le Watch Dog Timer est désactivé, que le Master_Clear (In GP3) est désactivé, …

Dans cet exemple, où un pic 12F629 a été choisi, cette commande modifie les paramètres du programmateur placés par défaut dans le fichier INC\M12F629.inc que je vous invite à aller lire.

En effet, par défaut, il faut savoir que le Master_Clear du 12F629, par exemple, est activé; ce qui provoquera des surprises lorsque sa broche GP3 est utilisée comme une entrée normale !

 

 

Variables

 

Seules sont reconnues les définitions suivantes : Bit, Byte et Word.

Le Nibble n’est pas autorisé, il faudra le redéfinir en Byte.

 

 

Assignation des pins

 

Comme nous l’avons dit plus haut, pour assurer une certaine concordance entre les noms des registres ou des Pins du Stamp et des Pic, le fichier BS2DEFS.bas doit être inclus dans le haut du programme à compiler.

 

Notez que malgré cette précaution, les variables DirS, DirH, DirL et Dir0-Dir15 ne peuvent pas être utilisées avec le Compilateur PicBasic Pro.

 

Il faut utiliser les variables TRIS en notant toutefois que leur état est opposé à celui des variables Dirs du Stamp !

 

Ainsi Dir0 = 1 ne sera pas reconnu si on désire placer la pin PORTB.0 en Direction « Sortie ».

Il faudra écrire :

TRISB.0 = 0  et la pin PORTB.0 sera placée en état de Sortie.

 

Vous pouvez cependant toujours utiliser une commande qui définit automatiquement la Direction (Exemple : Pulsout = Sortie, RCTime = Sortie, Pulsin = Entrée, Output 0, Input 1, …).

 

De même OUTA devra être réécrit PORTA.

 

Enfin, il est toujours possible de préciser distinctement la direction voulue avec les commandes Input et Output.

 

Exemple :

 

'  In/Out Assignation for 12F629

'--------------------------------------------

'   Gnd     ‘pin 8. Gnd

Output 0    ‘pin 7. Out0

Output 1    ‘pin 6. Out1

Output 2    ‘pin 5. Out2

Input  3    ‘pin 4.  In3

Output 4    ‘pin 3. Out4

Output 5    ‘pin 2. Out5

'   +Vcc    ‘pin 1. Vcc

 

Choix du Quartz

 

PBP génère donc des programmes prévus, par défaut, pour tourner avec un PIC cadencé à 4Mhz.

 

Les instructions sensibles au temps prennent une durée de traitement de 1 msec.

L’instruction Pause 1000 génère ainsi une attente de 1 seconde.

 

Pourtant, bien que le programme fonctionne bien, il sera parfois nécessaire de faire tourner le microcontrôleur plus vite.

Il sera peut être aussi indispensable de disposer d’Entrées/Sorties Série à 19.200 bauds au lieu des 9600 bauds obtenus avec un oscillateur de 4 Mhz.

 

Les Pic programmés avec PBP peuvent donc tourner à plus de 4Mhz de deux façons :

 

1)      Utiliser un quartz externe de plus de 4Mhz et ne rien spécifier à PBP !

 

Dans ce cas, il faut seulement tenir compte du temps, plus court, nécessaire au traitement des instructions.

 

Si vous désirez une liaison série à 19.200 bds, il suffit d’un oscillateur à 8Mhz.

A noter cependant que toutes les instructions de votre programme, y compris les instructions Serin/Serout, seront affectées de cette élévation de vitesse.

Si vous avez écrit de faire tourner les commandes Serin/Serout à 9600 bds, le doublement de la vitesse du quartz donnera, en fait, une vitesse de 19.200 bds.

 

Retenez également que la vitesse de traitement des commandes Pause et Sound sera modifiée aussi !

 

 

2)      La deuxième méthode est aussi d’utiliser un oscillateur plus rapide mais en le spécifiant à PBP.

 

Cette information se réalise grâce à la commande DEFINE.

 

Par exemple : DEFINE OSC 8   si on utilise un oscillateur à 8 Mhz.

Grâce à cette information, placée en début de programme, les commandes dépendant du temps seront exécutées sur base d’un quartz à 4 Mhz tandis que toutes les autres seront traitées à la fréquence du quartz.

 

Si on utilise un quartz de 16Mhz il faudra écrire en début de programme, DEFINE OSC 16 pour que la valeur de la pause, par exemple, reste égale à celle donnée pour un quartz, de 4Mhz.

 

Utiliser la commande DEFINE OSCxx permet donc de compenser et de produire le timing correct, sur base de calcul d'un oscillateur à 4Mhz, pour les commandes PBP suivantes: COUNT, DEBUG, DEBUGIN, DTMFOUT, FREQUOUT, HPWM, HSERIN, HSEROUT, I2CREAD, I2CWRITE, LCDOUT, OWIN, OWOUT, PAUSE, PAUEUS, SERIN, SERIN2, SEROUT, SEROUT2, SHIFTIN, SHIFTOUT, SOUND, XIN et XOUT.

 

Attention, la commande DEFINE OSC… n’a cependant pas d’effet sur les commandes PULSIN, PULSOUT et RCTIME !

 

La valeur du quartz, pour ces trois dernières commandes, influencera donc directement leur résolution.

 

A 4 Mhz ces commandes opéreront avec une résolution de 10 µsec ; à 20Mhz, la résolution sera 5 fois plus fine, soit 2 µsec.

 

Enfin, retenez que si vous avez choisi d’utiliser un quartz supérieur à 4 Mhz, il faudra cocher l’option Oscillateur = HS (High Speed) et non plus l’option XT du programmateur (EpicWin Programmer).

 

 

Vitesse dexécution d'un programme

 

Le problème potentiel le plus important dans l’exécution d’un programme est… le temps.

 

Outre les instructions relatives à la lecture de l’EEprom, la plupart des instructions, telles que Goto et Gosub, s’exécutent des centaines de fois plus vite qu’avec le Stamp !

Bien que, dans la plupart des cas, ce soit particulièrement bénéfique, les programmes dont le timing a été développé empiriquement pourront poser des problèmes.

La solution est simple: les bons programmes ne font pas appel à des boucles d’attente de type For … Next pour en ralentir ou synchroniser le déroulement.

 

Dans la mesure du possible, on fera appel à des méthodes de synchronisation sur des événements extérieurs (saisie clavier, modification d’état d’une entrée, …) ou toute autre méthode de synchronisation non temporelle.

 

Si des délais d’attente sont nécessaires, on utilisera de préférence les commandes spécifiques telles que Pause, Pauseus, Nap ou Sleep.

 

 

Coefficient d'adaptation

 

Nous avions déjà évoqué la question des valeurs à traiter, données par des instructions utilisant des unités de temps et qui dépendent de la vitesse de travail du processeur. 

 

La solution proposée était de recalculer les seuils à tester en fonction de la vitesse de l’oscillateur utilisé et de replacer ces nouvelles valeurs compensées dans le programme à destination de PBP.

 

Un coefficient d’adaptation sûr avait donc été défini pour les vitesses fréquemment utilisées (StampIIsx-50Mhz, Pic 20Mhz, 10Mhz, 16Mhz, 8Mhz et 4Mhz).

 

Nous venons de voir que la commande DEFINE OSC <Speed> de PBP apporte une relative souplesse mais qu’elle n’est pas active pour toutes les commandes utilisant les unités de temps !

 

Ainsi, la commande DEFINE OSC n’agissant pas sur les commandes telles que PULSIN, PULSOUT, RCTIME, leur résolution dépendra directement de l’oscillateur du Pic.

 

Exemple: Valeurs mesurées de Pulsin pour une même impulsion.

 

Pulsin sur Impulsion de 1,5 msec

Unité

Msec

StampIIsx

(50 Mhz)

1870

 ´ 800 nsec

 =  1,49

16F628

Interne 4Mhz

156

 ´ 10 µsec

 =  1,56

16F84A

Quartz 4Mz

149

 ´ 10 µsec

 =  1,49

16F84A

Quartz 16Mhz

596

 ´ 2,5 µ sec

 =  1,49

 

Pour ces trois commandes, il sera donc toujours nécessaire d’utiliser le coefficient d’adaptation « Stamp vers Pic » en tenant compte de l’oscillateur utilisé avec le Pic.

 

Pour rappel :

 

 

BSIIsx
(50 Mhz)

 

BS2

 

12F6xx

 

 

BS1

PIC
40 Mhz

PIC
20 Mhz

PIC
16
Mhz

PIC
8
Mhz

PIC

4 Mhz

 

Unité :

800 nS

1µS

2µS

2,5µS

5µS

10µS

 

 

 

 

 

 

 

1,5 mSec =

1875

1500

750

600

300

150

 

 

 

 

 

 

 

 Coef d’adaptation :

 
Multiplier par :

 

0,80

 

0,40

 

0,32

 

0,16

 

0,08

 

Le résultat est une valeur entière. Les décimales sont ignorées.

 

 PIC 40Mhz     80/100

 PIC 20Mhz     40/100

 PIC 16Mhz     32/100

 PIC   8Mhz      16/100

 PIC   4Mhz       8/100

 

 

 

 

 

 

 

 

 

For…Next

 

Il y a lieu de toujours définir le pas.

 

Exemple: 

        For i =10 to 1 Step -1

       

       Next i

 

Ou encore

 

FOR B2 = 20 TO 10 STEP -2     ‘ Count from 20 to 10 by 2

Serout 0,N2400,[#B2,” “]   ‘ Send each number to Pin0 serially

NEXT B2                                                  ‘ Go back to and do next count

Serout 0,N2400,[10]        ‘ Send a linefeed

 

Comme nous l’avons dit plus haut, il faudra éviter d’utiliser cette commande pour réaliser des boucles d’attente en vue d’assurer la synchronisation du programme.

 

 

If … Then

 

Avec les anciens éditeurs Stamp, on ne pouvait seulement spécifier qu'une étiquette après un IF…Then.

Il n'était donc pas possible d'écrire, à la suite de l'énoncé conditionnel, la série d'instructions répondant à la condition.

En outre, l'option "Else" n'était jamais écrite expressément car ses instructions étaient, paradoxalement, traitées directement à la ligne suivante de l'énoncé conditionnel !

 

Il s'agissait alors d'une procédure lourde de traitement inverse au langage Basic traditionnel.

Ce problème a été résolu à partir de la version 2.5 de cet éditeur.

 

Heureusement, PBP permet maintenant l’écriture d’une boucle complète de type If..Then..Else..Endif, plus proche du langage Basic et du programme structuré.

 

Cela évite cette fastidieuse opération, rencontrée précédemment avec le Stamp, consistant à inverser le test logique pour conserver une lecture conforme au programme structuré. (Ecriture en « condition inverse » du Stamp avec les anciennes versions d'Editeurs) 


 

Initialisation des variables et registres

 

Le Stamp place automatiquement toutes les variables et les registres à zéro lorsqu’un programme démarre ou lorsqu’il se Reset.

Ce n’est pas le cas avec un Pic programmé avec PBP.

 

Il est donc préférable, autant que nécessaire, de définir exactement chaque variable en début de programme.

 

Il existe bien la commande CLEAR , à placer en début de programme, après la définition des variables et qui est sensée remettre à zéro toutes les variables de la RAM.

Celle-ci ne me semble cependant pas toujours efficace…

 

En général, les variables seront donc initialisées au début du programme en précisant expressément leur valeur de départ, plutôt que d’utiliser la commande CLEAR.

 

 

Exemple :

 

Init :

  High LED1

  Niveau = 178

  Celsius = 36

 

Debut :

  <Programme>…

Goto Debut

 

 

MAX et MIN

 

Les opérateurs MIN et MAX ne fonctionnent pas exactement comme avec le Stamp.

 

MAX retourne ici le maximum de deux valeurs, MIN retourne le minimum de deux valeurs.

Cela s’apparente donc aux langages Basic communs sans connaître les problèmes de limite, de 0 et 65535, rencontrés avec les instructions Min et Max du Stamp.

 

Dans la plupart des cas, il faudra simplement changer MIN en MAX et MAX en MIN dans le programme Stamp pour que tout fonctionne correctement avec PBP !

 

 

READ & WRITE

 

Certains Pic disposent d’une mémoire non volatile de type Eeprom à accès I2C.

 

C’est notamment le cas pour les 12CE51x, 12CE67x et 16CE62x.

 

Les instructions Read et Write ne fonctionneront donc pas pour ces composants !

 

Il faut simplement les modifier par I2CREAD et I2CWRITE.

 

 

Goto  et  Gosub

 

Essayez de ne jamais employer la commande Goto dans vos programmes, sauf celle placée à la fin du corps principal du programme permettant le bouclage permanent du programme structuré en remontant à sa première ligne (assimilable à la commande structurée Do While…Enddo).

 

Bien que cette commande soit un mal, parfois nécessaire, il faut absolument minimiser son utilisation.

 

La bonne manière d’écrire un programme est de le structurer en blocs logiques, en procédures spécifiques de traitement pour faire sauter le programme de l’une à l’autre.

 

L’instruction Gosub permettra ce passage d’un bloc de traitement à un autre.

 

L’avantage de cette méthode est que chaque sous-routine constitue un ensemble homogène, disposant d’une entrée (étiquette nominative) et d’une instruction de sortie assurant sa fermeture (Return).

 

Rien n’empêche d’ailleurs, au cœur d’une sous-routine, de faire appel à une autre sous-routine.

 

Les instructions de sortie de chacune d’elles (Return) assureront toujours la fermeture de chaque sous-routine avant de revenir au corps du programme principal, là où on l'avait quitté.

 

Ainsi, il n’y aura jamais de risque de dépasser les limites de la «pile opérationnelle» du processeur, surchargé par des boucles ouvertes, «oubliées» et inutiles, restant vainement en attente de traitement.

 

Ce déplorable phénomène de surcharge, dû à des «portes restées ouvertes», se rencontre principalement dans de mauvais programmes, non structurés, où des instructions Goto ont été trop et mal utilisées.

 

Cela conduira inévitablement au plantage inopiné du programme en cours d’exécution !
 

 

 

Serin / Serout

 

Ces commandes doivent être changées en Serin2 et Serout2

 

LookUp / LookDown

 

Ces commandes doivent être changées en Lookup2 et Lookdown2

 

 

Oscillateur RC interne

 

De nombreux Pic, tels que les 12C671- 672, 12CE673-674,  sont dotés d’un oscillateur RC interne.

 

Ces composants contiennent un facteur de calibration dans la dernière zone de l’espace Code.

 

L’oscillateur interne doit être ajusté correctement en saisissant les données de cette zone pour les amener dans le registre OSCCAL.

 

Deux instructions DEFINE ont été mises à notre disposition pour réaliser cette tâche lors de chaque démarrage du programme :

 

DEFINE OSCCAL_1K 1     ‘Règle OSCAL pour des composants à 1K

DEFINE OSCCAL_2K 1     ‘idem pour des composants à 2K

 

L’une ou l’autre de ces instructions, suivant le composant utilisé, doit être placée au début du programme.

 

On peut également préciser la valeur OSCCAL (par défaut égale à 128) en l’écrivant directement dans le programme après avoir testé le Pic à l’aide d’un petit programme spécifique (voir § 12F629 et annexe)

 

 

Pour les pics dotés d’un oscillateur interne (12C5xx, 12CE51x, 12F6xx, …) Pic Basic Pro Compiler chargera automatiquement la valeur par défaut (128) dans le registre OSCCAL .

 

Il est donc inutile, pour ces composants, d’utiliser l’instruction DEFINE si la précision de l’oscillateur n’est pas absolument vitale.

 

  

 

 Programme pour contrôler le registre OSCCAL d’un Pic 12F629

 

 

   '------------------------------------------------------------

' PicBasic-Pro Compiler file    StampIIsx to PIC 12F629

'------------------------------------------------------------

'------------------------------------------------------------

' Test_OSCCAL.pbp            (c) R.LEGAT-Avril 2005

'------------------------------------------------------------

 

' Verification du calibrage de l'oscillateur interne 4Mhz du 12F629

'======================================================================

'Lire les tops de sortie avec un oscilloscope, un BSIIsx, ...

'----------------------------------------------------------------------

 

' Pic Specifications

'------------------------------------------------------------

@ Device  Pic12F629, intrc_osc, wdt_off, pwrt_off, mclr_off, protect_off

  Include "BS2DEFS.bas"

  Define OSC 4

  CMCON=7  Analog Comparators Off

 

  OSCCAL=120      'Default: Center=128  LIGNE A MODIFIER POUR CHAQUE 12F629 testé !!!

 

 

 

 

' In/Out  12F629

'-------------------------

  Gnd                 ‘Pin8.Gnd

 OUTPUT 0              'Tops à lire sur Pin 7.Out0

 INPUT  1              'Nc Pin6.In1

 INPUT  2              'Nc Pin5.In2

 INPUT  3              'Nc Pin4.In3

 INPUT  4              'Nc Pin3.In4

 INPUT  5              'Nc Pin2.In5

  +Vcc                ‘Pin1.Vcc

 

'--------------------------

'   PROGRAMME

'--------------------------

 

Debut:

  PULSOUT 0,100             '100 = 1msec à 4Mhz (1 msec = 1250 sur BSIIsx)  1250 x8/100 =100

  Pause 5                   '5 msec

GOTO Debut

 

END

 

 Programme pour retrouver la valeur OSCCAL d’un Pic 12F6xx

Source:  http://picprojects.org.uk/projects/recal/recal.htm  avec fichier HEX et mode d'emploi !

 

   

 
                                         
Exemple de valeur obtenue: 348C

----------------------------------------------------------------------------------------------------------------------------------------

  Voir autre source:   https://www.edaboard.com/threads/pic12f675-osccal-erased-help.212778/#5

     MEMENTO PIC PROGRAMMATION     .

Vérifiez la liste et la syntaxe des commandes de votre compilateur BASIC!

En outre ceux-ci permettent généralement d'y inclure du code ASSEMBLEUR.

TRISx    Sens de fonctionnement (équivalent de DIR pour les Stamp)
                   Si le bit bn du Reg. TRISx =1,  la ligne n du Portx = ENTREE
                   Si le bit bn du Reg. TRISx =0,  la ligne n du Portx = SORTIE

PORTx   Registre accessible en lecture et écriture (R/W)
                   Il contient les valeurs lues, ou à présenter, sur les lignes du Port.


ADCON0 / ADCON1   Registre ADC      https://forums.futura-sciences.com/electronique/230465-configuration-registres-adcon1-adcon2.html
ADCON0=0x00            Désactive le module ADC

CMCON=7   Désactive le comparateur analogique

OPTION_REG   Active R.PullUp par mise à 0 du bit de poids le plus fort.
                                   Exemple: OPTION_REG AND %01111111

INTCON.INTF=0   RAZ interruption Flag

INTCON=%10010000   Interrupt sur RB0/INT (16FFF877A)

CLRWDT   Clear WatchDog

ANSEL:=0   i/o ADC en numérique

 

    Matériel et logiciels nécessaires à la programmation d'un PIC

 Le sujet a déjà été évoqué à la page Microcontrôleurs BASIC.

Dressons un bref rappel et résumé:

1. Editeur de programme (Software):

- Un simple éditeur de texte suffit mais des éditeur dédiés permettent des contrôles de language, des colorisations syntaxiques, ...
- Pour le Basic Stamp, un éditeur spécifique est disponible gratuitement chez www.parallax.com
- De même que pour les Picaxe, https://picaxe.com/software/picaxe/picaxe-editor-6/

2. Compilateur/Assembleur  (Software):

- Pic Basic Pro Compiler. Transforme votre programme Basic en un language "machine".
  L'assembleur le transforme alors en code exécutable en créant notamment le fichier HEX qui sera placé dans le PIC.
  Ce programme est payant !
  Ce compilateur permet d'inclure des commandes ASSEMBLEUR à la suite du caractère @.

3. Programmateur  (Software):

Il reste alors à aller placer ce fichier exécutable dans le PIC.
Le programme offre alors des possibilités de sélection de divers paramètres: choix du PIC cible, lecture de virginité, effecement, paramétrage des "fusibles", injection du programme, ...

A noter que le prgramme BASIC peut être écrit en y précisant déjà certains de ces paramètres (vitesse d'horloge, état des "fusibles", ...

(Programmes Free:)
   IC-Prog
   WinPic800
   PicProg4U
   PonyProg
(ne reconnait pas tous les Pics)
  
EpicWin

 4. Programmes d'environnement (Software):

-Il s'agit ici d'un programme permettant le lien entre les softwares cités ci-dessus tout en restant dans la même session de travail.
 Cela permet un peu de souplesse d'utilisation.   https://melabs.com/resources/win_ide.htm

CodeDesigner
CodeStudio  

5. Board Programmer  (Hardware):

Enfin, nous devrons disposer d'une platine matérielle sur laquelle insérer le PIC à programmer.
 Divers programmateurs sont facilement disponibles; il en existe à connecter sur le port parallèle pour les plus anciens modèles, sur le port série et même sur le port USB.
 Leur construction est aussi possible mais au vu des kits à prix raisonnables désormais accessibles, il ne faut pas s'en priver.
 A noter que certains modèles "Very Low Cost" présentent parfois des tensions de programmation un peu faibles qui peuvent altérer le résultat final !

 

    x

 x

 

 

 

 

 http://extremetracking.com/open?login=rglalpmn

 

 
[ Electronique ]
Copyright © Roger LEGAT - 2008 - Tous Droits réservés - (Thds V2)