Microcontrôleur PICAXE-08M (PIC12F683)

Introduction.

Le microcontrôleur PICAXE-08M est reprogrammable 100 000 fois.
Sa tension d’alimentation V+ doit être comprise entre 4,5 et 5 V.
Chaque sortie peut débiter 20 mA, sans jamais dépasser 90 mA pour l’ensemble.

Une tension d’entrée supérieure à 0,4 V (0,8xV+) constitue un niveau haut.
Une tension d’entrée inférieure à 0,1 V (0,2xV+) constitue un niveau bas.

Il est recommandé (mais pas indispensable) de connecter les entrées non utilisées à la masse avec un résistance de 10 kΩ.

Par contre la broche 2 (Serial In) doit impérativement être reliée à la masse par une résistance de 10 kΩ.

Consommation.

  • En mode de fonctionnement standart, la consommation est inférieure à 1 mA.
  • En mode SLEEP, elle descend à 120 μA.
  • En désactivant la surveillance des entrées, c'est à dire en encadrant la commande SLEEP par les instructions DISABLEBOD-ENABLEBOD, la consommation passe au dessous de 50 μA.

 

Brochage.

Alimentation.

L’alimentation peut être obtenue avec 3 piles alcalines de type AA (3x1,6 = 4,8 V), ou bien par 4 batteries rechargeables de type AA (4x1,2 = 4,8 V).
Autre possibilité : alimentation régulée avec un 78L05 (100 mA) ou un L7805 (1 A).

Connexion au port USB (pour transférer le programme).

Utiliser un câble AXE027 et le branchement ci-dessous

Les deux résistances ne constituent pas un pont diviseur de tension.
Celle de 22 kΩ limite le courant, et celle de 10 kΩ, associée aux diodes internes au circuit, fixe la tension d’entrée.

Utilisation des sorties.

LED reliée à la masse

LED au -

high 1   'éclaire
low 1    'éteint

LED reliée au +

LED au +

low 1   'éclaire
high 1  'éteint

LED bicolore

LED bicolore

high 0     'éclaire rouge
low 1
low 0      'éclaire vert high 1

low 0      'éteind
low 1

high 0     'éteind aussi
high 1

Interface par transistors.

Schéma de principe BC879 BD681

L'utilisation d'un Darlington constitué de deux transistors est idéal, mais il peut être remplacé par un BC879 qui contient les deux transistors dans un seul boïtier TO-92. Ce dernier peut dissiper 830 mW avec un gain de 1000 pour un courant de collecteur de 50 mA, et de 8000 pour 800 mA.

Pour des intensités supérieures, on utilisera un BD681, qui a un gain de 750 de 1 à 4 A, que l’on pourra refroidir grâce à son boîtier T0-126
Lors de l'utilisation de relais, bobines, ou moteurs, ne pas oublier de connecter une diode de type 1N4001 pour éliminer le courant inverse lors de la coupure.

Commander un relais

Commande relais

Commander un moteur par MOSFET

Commande MOSFET

Commander une lampe

Comande lampe

high 1   'éclaire
low 1    'éteint

Commander un buzzer

Commande buzzer

Commander un écouteur piézo ou un haut-parleur (40 Ω)

Commande écouteur piézo          Commande haut-parleur

sound 1, (100,50)     'produit une note de hauteur 100

for b=1 to 100
    sound 1, (B1,25)  'produit un son de fréquence variable
next b1

 

Utilisation des entrées.

Par commande digitale : inter, microswitch, ILS ...

Exécuter 'action' losque l'inter est ouvert :

  if pin0=0 then action

Exécuter 'action' lorsque l'inter est fermé :

  if pin0=1 then action

Exécuter 'action' losque l'inter est ouvert :

  if pin0 = 1 then action

Exécuter 'action' lorsque l'inter est fermé :

  if pin0=0 then action





Par commande analogique : potentiomètre, LDR, thermistance ...


main:     readadc 0,b1         ‘pin0 à b1
          if b1 < 75 then light1
          if b1 < 175 then light2
          goto light3
light1:   high 1
          low 2
          low 3
          goto main             ‘boucle
light2:   low 1
          high 2
          low 3
          goto main             ‘boucle
light3:   low 1
          low 2
          high 3
          goto main             ‘ boucle

  

main:    readadc 0,b1
         if b1<50 then light1
         if b1<100 then light2
         if b1<145 then light3
         if b1<175 then light4
         goto main

Programmation.

Configuration des entrées/sorties par programme.

A la mise sous tension, les broches 3, 5 et 6 (pins 4, 2 et 1) sont positionnées en mode IN.

Pour forcer le pin 4 en mode OUT, utiliser : let dirs = %00010000
Pour le faire passer au niveau haut, utiliser : let pins = %00010000
     pin n° 76543210
Pour désactiver pin4 et activer pin 2, utiliser : let pins = %00000100

Attention : n’utiliser let pins = %xxxxxxxx qu’après avoir utilisé let dirs = %xxxxxxxx

Interruptions.

Une interruption est une procédure qui est traitée dès qu’une entrée particulière est activée. C’est la façon la plus rapide de réagir au changement d’état d’une entrée.

Les ports d’interruptions sont lus entre chaque ligne du programme, entre chaque note de la commande tune , et de façon continu pendant les pauses.

La commande setint doit être suivie de deux nombres au format binaire : les valeurs attendues des entrées suivi du masque des numéros des pin.

Exemples.

Pour interrompre au passage au niveau haut du pin 1 seulement setint %00000010 ;%00000010

Pour interrompre au passage au niveau bas du pin 1 seulement setint %00000000,%00000010

Pour interrompre aux passages simultanés au niveau haut du pin 0, au passage au niveau haut du pin 1 et au passage au niveau bas de pin 2setint %00000011, %00000111

Notes :

  • Chaque programme utilisant la commande SETINT doit avoir une procédure d’interruption se terminant par la commande RETURN. La commande SETINT doit être située au tout début du programme.
  • Après que le traitement du code de la procédure d’interruption ait été exécuté, l’exécution du programme reprend à la ligne suivante dans le corps du programme principal.
  • L'étiquette de la procédure doit impérativement être interrupt:

Exemple :

setint %10000000, %10000000   ' activer l’interruption lors du passage au niveau haut du pin7

debut:
low 1                       ' désactiver la sortie pin1
pause 2000                  ' attendre 2 secondes
goto debut;                 ' recommencer

interrupt:                  ' ÉTIQUETTE RESERVÉE
high 1                      ' activer la sortie pin1
if pin7 = 1 then interrupt  ' continuer la procédure jusqu’à la fin
setint %10000000, %10000000 ' réactiver l’interruption
pause 2000                  ' attendre 2 secondes
return                       ' retourner au programme

Dans cet exemple, la LED sur la sortie pin1 s’illumine immédiatement après que l’entrée pin7 soit passée au niveau haut.

Avec la programmation standard if pin7 = 1 then … , le programme peut prendre plus de 2 secondes avant d’éclairer la LED si la commande if n’est pas exécutée durant la pause du programme principal.

Voici le programme standard pour comparaison.

debut:
  low 1                       ' désactiver la sortie pin1
  pause 2000                  ' attendre 2 secondes
  if pin7 = 1 then eclaire
  goto debut                  ' recommencer
eclaire:
  high 1                      ' activer sortie pin1
  if pin7 = 1 then éclaire    ' continuer la procédure jusqu’à la fin
  pause 2000                  ' attendre 2 secondes
  goto debut                  ' recommencer

La commande WAIT (éviter son utilisation).

WAIT secondes : secondes est une constante (de 1 à 65) qui précise la durée d’attente en secondes
wait 2         ' attendre 2 secondes

Cette ‘pseudo’ commande n’accepte pas l’utilisation de variable.

La commande PAUSE.

PAUSE millisecondes : millisecondes est une variable/constante (0-65535) qui précise la durée d’attente en millisecondes (à 4 MHz).L’attente la plus longue possible est de 65 secondes. Pour des durées plus longues, utiliser une boucle.
for b1 = 1 to 5 ' boucler 5 fois
pause 60000     ' attendre 60 secondes
next b1         ' résultat : 5 minutes d’attente

La commande SLEEP.

SLEEP période
période est une variable/constante (0-65535) qui précise la durée de sommeil en multiples de 2,3 secondes.
Cette commande place le microcontrôleur en mode basse consommation (inférieure à 120 µA) pendant une période donnée. Dans ce mode, les timers sont arrêtés, et les servomoteurs cessent de fonctionner.
Cette commande n’est pas régulée et la tolérance peut varier de -50 à +100%. La température extérieure affecte cette tolérance.
sleep 10     ' attendre 23 secondes
Associée à DISABLEBOD - ENABLEBOD, elle permet de réduire considérablement la consommation du micro-contrôleur (consommation inférieure à 50 µA).
disablebod   ' disable brown out
sleep 1565   ' attendre 1 heure
enablebod    ‘ enable brown out

Exemple de programme.

'=======================================
' Distributeur de maïs 2.0 - PICAXE-08M
' Programme 2.0              (c)2009-hL
'=======================================
' out0 (broche 7) = moteur
' adc1 (broche 6) = photorésistance
' adc2 (broche 5) = potentiomètre

initialisation:
  symbol mt = 0          ' moteur
  symbol dc = 128        ' début crépuscule
  symbol fc = 85         ' fin crépuscule
  symbol mn = 2          ' fonctionnement minimum 2 s
  symbol mx = 62         ' fonctionnement maximal 62 s

debut:
  goto tempo              ' distribuer à la mise sous tension

veille:
  do
  readadc 1,b0             ' lire luminosité
  loop while b0<dc         ' répéter tant qu'il fait nuit

  do                       ' est-ce le matin ?
  readadc 1,b0             ' relire luminosité
  loop while b0<fc         ' si non recommencer

  do
  readadc 1,b0             ' lire luminosité
  loop while b0>dc         ' répéter tant qu'il fait jour

  do                       ' est-ce le soir ?
  readadc 1,b0             ' relire luminosité
  loop while b0>fc         ' si non recommencer

tempo:
  readadc 2,b1             ' lire position potentiomètre
  let b1 = b1*mx/255       ' 62 s maximum
  let b1 = b1 min mn       ' 2 s minimum

moteur: 
  high mt                  ' démarrer le moteur
  for b0=1 to b1           ' répéter b1 fois
  pause 1000               ' attendre 1 seconde
  next b0                  ' pendant b1 secondes
  low mt                   ' arrêter le moteur
  goto veille              ' remettre en veille

Téléchargement.

Cette page au format PDF.

hL - 2008