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...