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

        ... rgl

 

Microcontrôleur
PICAXE 08M2

Roger Legat Jr (c)

 

 SOMMAIRE:

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

02 - Programmation du Picaxe 08M2

03 - Programmation In Situ (ICSP programming)

04 - Utilisation de l'entrée Serin-RX comme entrée digitale normale

05 - Utilisation de la sortie Serout-TX comme Sortie digitale normale

06 - Utilisation de la sortie Serout-TX comme Entrée  digitale normale

07 - Conversion du programme Picaxe vers un PIC

 

      Introduction - Présentation - Spécifications

 Les produits PICAXE® sont développés et distribués par Revolution Education Ltd, une société à responsabilité limitée, sise à Bath, dans le sud-ouest de l'Angleterre.

Le Picaxe 08M2 est le plus petit MCU de la famille des Picaxe.

Malgré son nombre très limité de ports in/out, il peut cependant rendre de nombreux services et c’est pourquoi je lui dédie ici une page.

Elle est le condensé de mes expérimentations personnelles et de la contribution de Alan (AllyCat) du remarquable et réactif Forum Picaxe Anglais.
https://picaxeforum.co.uk/

Le micro contrôleur Picaxe 08M2 est construit sur base d’un PIC 12F1840 de MicroChip.

                        

 

Une puce PICAXE 08M2 est un microcontrôleur Microchip PIC12F1840 standard qui a été préprogrammé avec un micrologiciel d'amorçage (BootStrap) développé et propriété de la Société PICAXE.

Ce code d'amorçage permet au microcontrôleur PICAXE d'être (re)programmé, en langage BASIC facilement assimilable, directement via un simple connecteur «à trois fils» issu d’un câble de téléchargement Série ou USB+.

Ce concept éliminant le besoin d'un compilateur et d'un programmeur PIC conventionnel, fait de ce Microcontrôleur un système de traitement « intelligent » particulièrement souple et très peu coûteux.

Enfin, toute la gamme des Puces PICAXE utilise le même logiciel de programmation et de téléchargement (gratuitement offert par Picaxe) ainsi que le même câble de communication et de téléchargement.

 

Spécifications du Picaxe 08M2

  M

COMPARATIF des fonctions restantes dans le PICaxe 08M2

 

 

     Programmation du Picaxe 08M2 

La société Revolution Education Ltd fourni gracieusement le programme unique d'Edition, Simulation et Programmation, pour sa gamme de MicroContrôleurs Picaxe.
Il est téléchargeable sur son site.

La programmation du PICAXE 08M2 se fait alors suivant un protocole Série grâce à, soit:
  -
  un câble série facilement réalisable.
  -  un câble
USB avec adaptateur série se terminant par un petit jack mâle stéréo 2.5mm et vendu par Picaxe_Store sous la référence AXE027.

La broche RX (Serial in) est utilisée pour la programmation. Elle reçoit ainsi le signal issu de la sortie TX du câble de programmation relié au PC.
Nous verrons ci-dessous qu'elle pourra ensuite être utilisée comme une entrée digitale normale moyennant quelques "astuces".

La broche TX (Serial out) est un retour d'information sur la broche RX du câble PC vérifiant la programmation du Picaxe.
Elle peut aussi servir à transmettre des informations à une console PC.
Enfin, elle pourra également être ensuite utilisée comme une sortie digitale.


La résistance série de 22K est une sécurité de limitation de courant d'entrée tandis que la résistance de 10K est une Pull-Down nécessaire à l'entrée Serial IN.

En effet, en cours d'exécution d'un programme, le Picaxe va rapidement, et régulièrement, vérifier l'état de cette broche Serial IN (RX).

Dès que la broche Serial_In (RX) passe à l'état haut (par un signal issu du câble de programmation) le programme en cours d'exécution s'arrête et le Picaxe engage la procédure de téléchargement du nouveau programme.

         Il est donc impératif de toujours disposer d'une R_PullDown en entrée RX (Serial IN)   !        

Cette indispensable précaution permettra au programme placé dans votre Picaxe, utilisé sur une platine dépourvue de l'interface de programmation, de démarrer et de fonctionner correctement !

A défaut de cette résistance, le Picaxe basculera et restera dans un état d'attente de téléchargement d'un nouveau programme rendant ainsi inopérant votre Picaxe.

   

                                                                                    

 A noter que tous les PICaxes se programment ainsi de la même manière, avec le même matériel software et hardware, sans nécessiter le moindre compilateur et programmateur coûteux..

 

     Programmation ICSP /  In-Situ du Picaxe 08M2 


L'avantage d'une programmation In-Situ ou ICSP (In Circuit Serial Programming) est de pouvoir télécharger un nouveau programme dans le µC Picaxe installé sur la platine, sans devoir le retirer de son support.

Il sera donc ainsi particulièrement aisé de placer une éventuelle révision du "firmware" de vos projets.

Le concept In-Circuit-Programming est une manière pratique de travailler avec un PICaxe.

Cependant, une prise jack 3,5 mm placée sur la platine pourra être considérée comme trop grande et / ou inutile pour un projet "fini".
On pourra alors lui préférer un petit connecteur
3 broches mâles, avec ou sans détrompeur, style Molex.

On ne placera alors que l'indispensable R_Pulldown de la broche Serin-RX, mais avec une valeur de 100K.
Elle sera donc absolument nécessaire pour que le Picaxe puisse exécuter son programme sans entrer dans son mode d'attente de programmation.
Les résistances habituelles de 10k + 22k restant incluses sur l'interface de programmation qui sera branchée au connecteur ICSP.   

 

     Utilisation de l'entrée Serin-RX (C.5) comme entrée Auxiliaire digitale normale 

Ce petit Picaxe ne disposant effectivement que de 6 broches d'accès, dont deux apparemment dédiés à sa programmation série, il est tentant de chercher à utiliser ces deux dernières comme des entrées ou sorties usuelles !

Si cela est possible, nous pourrions ainsi pleinement disposer des possibilités I/O suivantes:

  Serial_Out (TX) C.0: In/Out "normale"
                               C.1: In/Out
                               C.2: In/Out
                               C.3: In
                               C.4: In/Out
  Serial_In (RX)   C.5: In "normale"

C'est ce que nous allons évoquer ci-après par l'emploi de quelques méthodes différentes.

  Méthode 01

Commençons par la plus simple.

Nous avons vu ci-dessus que si la broche Serin_RX (C.5) est à l'état Haut, le programme en cours d'exécution s'arrête pour permettre le téléchargement d'un nouveau programme.

D'une manière générale, le principe sera donc:

 - 1: d'activer la commande DISCONNECT * qui permet justement de supprimer cette routine automatique de "scannage pour téléchargement" de l'entrée Serin (C.5 / RX)
 - 2: d'utiliser ensuite la broche Serin_RX comme une entrée digitale normale sans plus affecter le déroulement du programme lorsque cette entrée est à l'état Haut.

CODE Test:

    #picaxe 08M2

    Pause 2000

    DISCONNECT ' !!!*

   

    DO

     IF pinC.5=1 Then 'C.5(RX) as normal Input !

      High C.0

     Else

      Low C.0

     Endif

    LOOP

 

*    Remarque concernant la désactivation du contrôle de la broche SERIN-RX avec la commande DISCONNECT  

 Comme nous avons désactivé ce contrôle périodique par la commande DISCONNECT, il ne sera donc plus possible de télécharger un éventuel nouveau programme de la façon conventionnelle !

 Une fois que la commande disconnect a été utilisée, il n'est en effet plus possible de télécharger un nouveau programme jusqu'à ce que :
   1) une commande Reconnect soit lancée,
   2) une commande Reset soit lancée
   3) un "redémarrage matériel" soit réalisé.
       Si vous avez fait en sorte qu'il ne semble plus possible de télécharger un nouveau programme, souvenez-vous qu'il est toujours possible de le faire au moyen de la procédure de redémarrage matériel.

 RECONNECT "annule" simplement la DÉCONNEXION et permet au PICaxe d'être à nouveau programmée normalement, sans réinitialisation matérielle.
 Essayez de toujours inclure un RECONNECT chaque fois que c'est possible (en particulier après avoir utilisé SERRXD, qui émet effectivement un DISCONNECT "caché" !).
 Il est possible de se déconnecter et de se reconnecter autant de fois que vous le souhaitez !

 

 

Le problème qui pourrait exister avec cette première simple méthode est que si l'entrée C.5 AUXiliaire (RX), est malencontreusement à l'état Haut lorsque l'alimentation est appliquée au démarrage (déclenchant ainsi l'attente d'un nouveau téléchargement), le programme ne démarrera JAMAIS et la déconnexion ne sera pas exécutée !

Et une résistance PullDown sur cette entrée ne pourrait pas non plus régler ce problème puisqu'elle ne "bloquerait" pas la tension de ce seuil Haut !

 

 Méthode 02

Voici alors un aperçu schématique que nous allons étudier point par point pour tenter de résoudre ce problème.

Notez que l'option ICSP a été ici implémentée.

 

Principe:

Primo: le signal de programmation (qui doit rester Bas à tout moment sauf lors de la programmation) doit être connecté à l'entrée de programmation (C.5 / Serin-RX) par une résistance beaucoup plus élevée que le 22k habituel (disons 100k ou plus).
Secundo: le signal numérique AUXiliaire est connecté à l'entrée Serin-RX via une diode, de sorte qu'elle ne peut tirer que l'entrée à l'état Bas (Anode côté PICaxe).

L' "astuce" consiste à ce que le programme exécute un DÉCONNEXION avant d'activer la "résistance interne PullDown sur la broche d'entrée de programmation.

La valeur de cette R_PullDown interne est cependant assez élevée (environ 30 k-100K), c'est pourquoi il est nécessaire d'augmenter la résistance de pull-down d'entrée.

Désormais, l'entrée AUXiliaire peut ainsi monter à un niveau Haut, à moins qu'elle ne soit tirée au niveau bas, via la diode.

 1. Désactivation de la vérification cyclique de la broche Serin-RX *

Nous avons vu, que le Picaxe "scanne" régulièrement l'état du port Rx-Serin pour stopper le programme en cours et engager le téléchargement d'un nouveau programme dès que ce port passe à l'état Haut.

Après avoir programmé notre Picaxe, il sera donc nécessaire de d'abord désactiver cette vérification périodique pour alors pouvoir utiliser cette entrée C.5 "normalement", sans risquer d'ensuite interrompre le programme lorsque cette entrée "Auxiliaire" passerait à l'état Haut !

La commande Disconnect est ainsi prévue pour empêcher que la puce Picaxe ne continue de scanner l’état de la broche Serin-RX.
A noter donc que lors du démarrage normal du programme, RX (C.5) devra bien être maintenue à l’état bas jusqu’à ce que la commande Disconnect soit exécutée.

C'est la raison de la R_PullDown_100K placée sur Serin-RX. 

2. Activation de la résistance Pull_Up interne

Le PIC12F1840 ici utilisé comme plateforme du Picaxe 08M2, est pourvu, sur ses entrées, de résistances PullUp internes programmables.

Une résistance Pullup interne nominale est d'environ 35k, mais la fiche technique laisse entendre qu'elle pourrait atteindre 200k.
Mais doutons qu'elle soit effectivement supérieure à 100k.

A l'examen du schéma ci-dessus, considérons que nous connectons la résistance PullUp interne du port C.5 qui gèrera désormais notre entrée Auxiliaire.
Celle-ci est pourvue d'une diode de telle sorte que si AUX_IN est connectée à la masse, C.5 = Low, et si AUX_IN vaut 5 volts ou est laissé en l'air, C.5 = High.
C.5 fonctionne désormais comme une entrée digitale classique.

Nous allons maintenant rentrer dans des considérations techniques un peu plus complexes relatives à l'activation de ces résistances PullUp internes programmables.

La programmation de ces résistances internes se fait par la configuration du Registre WPU. (voir DataSheet du PIC12F1840).

Pour les utilisateurs confirmés, Revolution Education Ltd, a prévu la commande POKESFR qui permet d'aller "bidouiller", à vos risques et périls, dans les registres spéciaux du PIC !

Pour une information complète, nous verrons cette manière de faire ci-après car... il existe une méthode plus rapide pour activer ces résistances PU internes !

Libre à vous de choisir la méthode qui vous conviendra le mieux.

   Méthode 02.2_A                                           

Sur le forum Anglais, on a récemment montré que l'Editeur Picaxe pouvait être "trompé" pour activer le Registre WPU (et / ou les interruptions) sur cette broche, en utilisant simplement une variable ( b0), avec le 08M2 (mais pas le 14M2 ou le 20M2).

 CODE:

  #Picaxe 08M2

  init:

     Disconnect     ; Disable scanning for a new Program

      b0 = %100000  ; "Weight" of C.5 (pin2)

      Pullup b0     ; Enable Pullup on pin c.5
     ...

 Cette méthode fonctionnelle est particulière car elle n'est pas documentée dans les publications officielles... !

 

   Méthode 02.2_B                                           

On pourrait alors être simplement tenté d'utiliser l'instruction PULLUP qui utilise un seul "masque" pour programmer toutes les résistances internes existantes, avec une seule instruction
Malheureusement, l'Editeur n'acceptera pas cette commande PULLUP pour la broche d'entrée de programmation !
Pratiquement toutes les broches du PIC ont pourtant des résistances Pullup de 30K à 100K, mais la raison de cet empêchement est de protéger les "utilsateurs novices" car, même avec une résistance externe série 22k, le PULLUP activant cette broche à l'état Haut amenerait la puce à entrer en mode de programmation et à rebooter le PICaxe.

Nous allons donc utiliser la commande POKESFR. (SFR = Special Function Register).

Retenons que la commande POKESFR permet ainsi d'écrire dans de nombreux registres du PIC.
En fait, de nombreuses commandes PICaxe "transparentes et normales" ne font rien d'autre que d'écrire directement dans un SFR, par exemple, PINSx, DIRSx, CALIBFREQ, DACLEVEL, ADC configuration
et bien d'autres encore...

La commande PULLUP est donc bien aussi essentiellement une commande POKESFR, comme le sont d'autres commandes de type PICaxe "Setup".

Il arrive que les 8 broches "supérieures" (c'est-à-dire les broches 1 à 4 et celles de l'autre côté) sont appelées "PORT A" dans les PIC de base des M2 08, 14 et 20 broches.
Dans ces cas, nous utiliserons cette commande sous la forme:  POKESFR <WPUA> , <bitmask>.

Pour contrôler les WPU des puces 14M2 et 20M2 par les commandes POKESFR, vous devrez consulter les fiches techniques des PIC de base pour voir les numéros de broches internes du port A, B ou C (c'est-à-dire WPUA, WPUB et WPUC) par rapport au "Port PICaxe. noms de broches".

A titre éducatif, nous allons étudier en détail la manière de composer cette commande pour bien la comprendre.

En effet cela permettra d'assimiler la procédure d'écriture générale dans un des registres SFR de votre choix.

 

Syntaxe:  PokeSFR, localisation, data

   - localisation est une constante Byte ou une variable ciblant la position d'un Registre dans une des "Banks" du µC.
   - data est une variable/constante de type Byte contenant la valeur à écrire dans ce Registre.

Cette instruction permet aux utilisateurs expérimentés d'ajuster les paramètres des registres spéciaux SFR du microcontrôleur.
Cette commande est réservée aux PICaxe M2 et X2. Pour les autres composants, voir la commande POKE.
Notez que seuls les SFR associés aux périphériques (par exemple, ADC, Timers, ...) sont accessibles.

Concernant les composants de la série M2

Comme les adresses des registres dans leurs Banks respectifs sont limitées à un Byte, soit à des valeurs comprises entre 0 et 255, les adresses complètes notées dans les datasheets Microchip devront être adaptées et "réduites" en se conformant au format suivant:

   Bit 7 à 5:   Numéro du Memory Bank, de $00 à $07
   Bit 4 à 0    Position du Registre dans ce Bank , de $0C à  $1F. (Note: les adresses des Core Registers, $00 à $0B, sont invalides et provoquent un Reset immédiat)

 

   Développons maintenant notre exemple concret  

Nous voulons donc activer la R_PullUp de la broche C.5 (Serin-RX).

Nous allons ainsi devoir nous plonger dans le DataSheet du PIC12F1840 !

 

Nous y trouvons que les Résistances PullUp sont configurées par le registre WPUA (Weak Pull-Up / Port A), situé dans la Bank4 - à l'adresse 0x20C  (20Ch).

           

                 

Ce registre est configurable sur 6 bits significatifs (bit 0 à bit 5), relatifs aux six broches in/out disponibles.

Pour activer la R_PullUp de la broche C.5 (Serin-RX), on obtiendrait ainsi une commande globale apparentée à cette forme: POKESFR WPUA, %00100000

Mais L'Editeur Picaxe ne reconnait évidemment pas le terme WPUA tel que formulé ici !

Nous allons donc devoir le convertir en une valeur chiffrée.

Ainsi, nous savons que l'adresse globale du Registre WPUA est 20C en Hexa ... soit 524 en décimal.

Or, la documentation du Picaxe 08M2 nous précisait que l'adresse ne pouvait être encodée que dans un Byte, soit une valeur ne pouvant pas dépasser 255 !

En conséquence, pour les PICaxe M2, les valeurs des adresses notées dans les DataSheets Microchip doivent être "réduites" en adoptant le format suivant:

   Bit 7 à 5:   Numéro du Memory Bank, de $00 à $07
   Bit 4 à 0    Position du Registre dans ce Bank, de $0C à  $1F. (Note: les adresses $00 à $0B relatives aux Core Registers sont invalides et provoqueront un Reset immédiat)



            Picaxe 08M2 = PIC12F1840

           

Le    Registre WPUA   se trouve dans la Bank 4 et occupe la position 12, dans cette Bank4.

Nous allons ainsi pouvoir composer notre Byte de localisation en "combinant" ces deux informations dans un Byte.

 

Et la commande, pour activer la R_PullUp de la broche C.5 (Serin-RX) sera ainsi finalement :  POKESFR $8C , %00100000

ou plus simplement      POKESFR $8C , 32 

  

CODE:

 

 #Picaxe 08M2

 init:

    Disconnect          ; Disable scanning for new Program

    POKESFR $8C , 32   ; 32 = %00100000 = Enable Pullup on pin c.5
    ...

 

  

3. Conception de l'entrée auxiliaire

La  valeur et la position des résistances détermineront si vous devez débranchez, ou non, l'e câble de téléchargement avant que l'entrée AUX ne fonctionne correctement.
Avec des valeurs bien choisies, cela devrait fonctionner, que le câble adaptateur soit branché ou non.
 

 

     Utilisation de la sortie Serout-TX (C.0) comme Sortie digitale normale 

En règle générale, il n'est PAS nécessaire de déconnecter cette broche du reste du circuit lors de la programmation.

La principale exception étant si la broche SerOut est utilisée pour un signal pilotant un moteur, des charges inductives, un relais, ...
En effet; cette broche Serout-TX est utilisée pour les "infos retour / vérification" pendant la programmation et il y a donc du "trafic" sur cette ligne durant la programmation qui pourrait même être altérée !

Dans ce cas particulier, à éviter si possible sur cette sortie, il faudra alors prévoir un jumper de déconnexion à ouvrir lors de la programmation.

Presque toutes les autres broches resteront en tant qu'entrées ou à trois états pendant la programmation.

Il ne sera donc seulement nécessaire de fournir des résistances pull-down que là où les sorties «flottantes» pourraient être un problème, par exemple les entrées Gate MOSFET.

Enfin, retenons aussi que les broches RX et TX ne sont pas seulement une interface de "programmation".
C'est aussi une interface permettant le Debogage en utilisant les instructions DEBUG, SerTXD et / ou SerRXD, etc...

Pour ma part, je préfère envoyer mes informations visuelles sur un Serial Display ne consommant qu'une sortie du µC et ne nécessitant alors plus de PC-Console en cours d'utilsation normale de votre circuit.

  

 

     Utilisation de la sortie Serout-TX (C.0) comme Entrée digitale normale 

Dans les notices éditées du PICaxe, on semble indiquer que la pin7-Serout_TX ne pourrait être utilisée qu'en Sortie.

Un petit test rapide m'a démontré que cette broche Serout_TX peut également être configurée en Entrée sans aucun artifice !

  CODE:

 

  #Picaxe 08M2

  DO

    IF pinC.0=1 then ' C.0 as Input !

     High C.1

    Else

     Low C.1

    Endif

  LOOP

Notons cependant que chacune des 5 autres broches restantes pouvant aussi être configurées en Entrée et qu'on aura toujours besoin d'au moins une sortie pour éviter d'obtenir un système "fermé" n'utilisant que des entrées (!),
il faudrait des circonstances vraiment très "spéciales" pour devoir utiliser cette broche en Entrée !

 

     Conversion du programme Picaxe vers un PIC

 Pour quelles raisons pourrions nous être tenté de convertir notre programme Picaxe pour utiliser finalement un PIC ?

Et bien, quand des signaux cycliques précis doivent être obtenus, cette option peut être retenue.

En effet, le Picaxe est finalement un interpréteur des commandes BASIC qu'il traite en boucle.

Sachant que l "interprétation" de chaque ligne ou instruction du programme dure en moyenne de l'ordre de 100µsec, ces délais cumulés peuvent vite induire des dysfonctionnements dans le projet final.

La conversion du programme reviendra donc finalement à modifier très légèrement le programme pour le replacer dans un compilateur PICBASIC et un programmateur conventionnel de PIC !
Le programme serait alors "traduit" en language Assembleur / Machine, plus rapidement exécuté par le PIC.

Disons que la mise au point initiale du programme aura été facilitée par la très grande souplesse de programmation du Picaxe.

Il s'agit en fait de la même démarche traitée sur cette autre page de ce site WEB qui consistait à élaborer le projet sur une platine BASIC STAMP et finalement convertir et verser le programme dans un PIC.
Dans le cas du Basic Stamp c'était pour s'affranchir de ce coûteux processeur.

Pour le Picaxe, moins onéreux, ce ne sera utile que dans le cas où le cumul des temps d'interprétation des instructions BASIC poserait un problème.

 

Exemple d’un début de programme pour le compilateur PicBasic Pro:


' Pic Specifications

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

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

   Define OSC 4     ‘ Alignement sur 4Mhz des commandes dépendant du temps sauf Pulsin/Pulsout (Valeur par défaut si ligne omise)

   CMCON=7          ‘ Analog comparators off
   OSCCAL=120       ‘ Default: Center=128  Ajustage de l’oscillateur interne (utiliser le paramètre d'usine sis à l'adresse 3FF)*

Asm
 bsf STATUS      ;Bank 1
 call 3FFh       ;Get the CAL value from 3FF addresse
 movwf OSCCAL    ;Calibrate
 bcf STATUS, RP0 ;Bank 0
Endasm


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, par exemple, que le Master_Clear du 12F629 (Reset) est activé... ce qui provoquera des surprises si sa broche GP3 est utilisée comme une entrée normale !

 

* Vous trouverez d'avantage d'informations sur la page consacrée à la programmation Stamp to PIC.

 

 

 


Thèmes développés:


   Trafic Visiteurs:  

 Version imprimable de la page       Page:  Nom Page 

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