PIC-BASIC PB-3B (2009)
Voici donc le décryptage de ce que ne peut pas faire cette version de PIC BASIC.
J'espère qu'il sera exhaustif et sans erreur
- Schéma / fonctions
- Variables
- Fonctions
-
Schéma (revendeur) et tableau des fonctions / liaison correspondantes :
Il est à noter que sur la platine d'expérimentation le quartz est en fait un
résonnateur.
Seulement de type BYTE soit 8 bits non signés 0 à 255 et INTEGER soit 16
bits non signés 0 à 65535.
Pas de LONG
Pas de SINGLE
Pas de STRING
Attention donc aux multiplications avec décimales, on est tenté de faire pour
parer ce problème d'après la notice :
I et J étant des INTEGER (plus grande variable autorisée)
I=J*122/100 pour faire l'équivalent de
I=J*1,22
si cela fonctionne pour une valeur de J=25 => 25*122=3050
puis 3050/100=30 d'ou I=30
cela ne fonctionne plus si J=550 en effet 550*122=67100 hors
l'INTEGER s'arrête à 65535 on se retrouve donc avec
550*122=1565 d'ou 1565/100=15 au lieu de 671, notable
différence.
Ce problème est très concret, car si l'on utilise un
servomoteur, la largeur des impulsions doit aller de 1mS à 2mS, dans la
fonction SERVO le pas étant de 0,8uS il faut 1250 pas pour couvrir le
déplacement, si la commande est associée à une lecture d'entrée analogique
aillant donc 1023 pas, le ratio est de 1250/1023=1,22189
Une solution consiste à déclarer au moins une variable supplémentaire
:
K INTEGER et on fait donc :
I=J
K=J*22/100
I=I+K
Pour J=550 on obtient : I=550, puis 550*22=12100 (Ok pour
integer) d'ou K=12100/100=121 et enfin I=550+121=671
mais c'est reculer un peu le problème (jusqu'à J=2978)....
On peut penser faire : I=J+J*22/100, mais le compilateur
déclare la formule "too complex".
Fonctions inutilisables avec cette version de PIC :
ABS() | Valeur absolue |
ASC() | Code ASCII d'un caractère |
BCLR | Efface le Buffer RS232 |
BLEN() | Nombre de données dans le buffer RS232 |
CHR() | Caractère d'un code ASCII |
CINT() | conversion Single en Integer |
CLNG() | conversion Single en Long |
COS() | Cosinus |
CSNG() | Conversion Long en Single |
DACOUNT | Génération tension analogique |
DEC() | Retourne valeur décimale dans une chaîne |
EEREAD() | Lecture données depuis l'EEprom |
EEWRITE | Ecriture de données en EEprom |
EPADIN() | Entrée clavier |
EXP() | Exponentielle |
FLOAT() | Conversion numérique en texte |
GET | Réception RS232 |
HEX | Conversion hexa en texte |
LEFT() | Extraction de caractère à gauche d'une chaîne |
LEN() | Longueur d'une chaîne |
LOG() | Logarithme |
LOG10() | Logarithme décimal |
MID() | Extraction de caractère d'une chaîne |
ON...GOSUB | Appel de sous routine indexée |
ON INT() GOSUB | Interruption sur un port |
ON RECV GOSUB | Interruption sur réception RS232 |
POW() | Valeur d'X exposant Y |
PUT | Emission RS232 |
RESET | Initialise le PIC |
RIGHT() | Extraction de caractère à droite d'une chaîne |
SET ONINT | Activation/désactivation interruptions |
SET ONRECV | Activation/désactivation interruptions RS232 |
SET ONTIMER | Activation/désactivation des timers |
SET RS232 | Déclare la vitesse de transmission RS232 |
SIN() | Sinus |
SQR() | Racine carrée |
TIME() | Lecture de l'horloge |
TIMESET | Mise à jour de l'horloge |
VAL() | Conversion texte en Integer |
VALSNG() | Conversion texte en Single |
A suivre...