summaryrefslogtreecommitdiff
path: root/docs/src/hal/parallel_port_fr.txt
blob: e678482ab62234582b18d05afee0200c627b20c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
:lang: fr
:toc:

= Port parallèle

[[cha:Parport]] (((Pilote parport)))

== Parport

Parport est un pilote pour le port parallèle traditionnel des PC. Le port
dispose d'un total de 17 broches physiques. Le port parallèle originel a
divisé ces broches en trois groupes: données, contrôles et états. Le groupe
_données_ consiste en 8 broches de sortie, le groupe _contrôles_ consiste en
4 broches et le groupe _états_ consiste en 5 broches d'entrée.

Au début des années 1990, le port parallèle bidirectionnel est arrivé,
ce qui a permis à l'utilisateur d'ajuster le groupe des données comme étant
des sorties ou comme étant des entrées. Le pilote de HAL supporte le port
bidirectionnel et permet à l'utilisateur de configurer le groupe des données
en entrées ou en sorties. Si il est configuré en sorties, un port fournit
un total de 12 sorties et 5 entrées. Si il est configuré en entrées, il
fournit 4 sorties et 13 entrées. 

Dans certains ports parallèles, les broches du groupe contrôle sont des
collecteurs ouverts, ils peuvent aussi être mis à l'état bas par une porte
extérieure. Sur une carte avec les broches de contrôle en collecteurs ouverts,
le mode _x_ de HAL permet un usage plus flexible avec 8 sorties dédiées,
5 entrées dédiées et 4 broches en collecteurs ouverts. Dans d'autres ports
parallèles, les broches du groupe contrôles sont en push-pull et ne peuvent
pas être utilisées comme des entrées.

.HAL et les collecteurs ouverts
[NOTE]
====
HAL ne peut pas déterminer automatiquement si les broches en mode 
bidirectionnel _x_ sont effectivement en collecteurs ouverts. Si elles n'y
sont pas, elles ne peuvent pas être utilisées comme des entrées. Essayer de
les passer à l'état BAS par une source extérieure peut détériorer le matériel.

Pour déterminer si un port a des broches de contrôle en _collecteur ouvert_,
charger hal_parport en mode _x_, positionner les broches de contrôle à une
valeur HAUTE. HAL doit lire des pins à l'état VRAI. Ensuite, insérer une
résistance de 470Ω entre une des broches de contrôle et GND du port parallèle.
Si la tension de cette broche de contrôle est maintenant proche de 0V et
que HAL la lit comme une pin FAUSSE, alors vous avez un port OC. Si la
tension résultante est loin de 0V ou que HAL ne la lit pas comme étant FAUSSE,
votre port ne ne peut pas être utilisé en mode _x_.

Le matériel extérieur qui pilote les broches de contrôle devrait également
utiliser des portes en collecteur ouvert (ex: 74LS05...). Généralement,
une pin de HAL -out devrait être VRAIE quand la pin physique est utilisée
comme une entrée.

Sur certaines machines, les paramètres du BIOS peuvent affecter la
possibilité d'utiliser le mode _x_. Le mode _SPP_ est le mode qui
fonctionne le plus fréquemment.
====

Aucune autre combinaison n'est supportée. Un port ne peut plus être
modifié pour passer d'entrées en sorties une fois le pilote installé.
La figure <<fig:Parport-block-diag,des diagrammes blocs>> affiche deux
diagrammes, un montre le pilote quand le groupe de données est configuré
en sorties et le second le montre configuré en entrées.

Le pilote _parport_ peut contrôler au maximum 8 ports (définis par MAX_PORTS
dans le fichier hal_parport.c). Les ports sont numérotés à partir de zéro.

=== Chargement de hal_parport
----
loadrt hal_parport cfg="<config-string>" 
----

=== Utiliser l'index du port

Les adresses d'E/S inférieures à 16 sont traitées comme les index de port.
C'est la manière la plus simple d'installer le pilote _parport_ en
coopération avec le pilote de Linux parport_pc si il est chargé.
----
loadrt hal_parport cfg="0" 
----

Utilisera l'adresse que Linux a détecté pour parport0.

=== Utiliser l'adresse du port

La chaine config-string représente l'adresse hexadécimale du port,
suivie optionnellement par une direction, le tout répété pour chaque port.
Les directions sont _in_, _out_, ou _x_, elles déterminent la direction des
broches physiques 2 à 9 et s'il y a lieu de créer des pins d'entrée de HAL
pour les broches de contrôle physiques. Si la direction n'est pas précisée,
le groupe données sera par défaut configuré en sorties. Par exemple:
----
loadrt hal_parport cfg="0x278 0x378 in 0x20A0 out" 
----

Cet exemple installe les pilotes pour un port 0x0278, avec les broches 2 à 9
en sorties (par défaut, puisque ni _in_, ni _out_ n'est spécifié), un port
0x0378, avec les broches 2 à 9 en entrées et un port 0x20A0, avec les
broches 2 à 9 explicitement spécifiées en sorties. Notez que vous devez
connaître l'adresse de base des ports parallèles pour configurer
correctement les pilotes. Pour les ports sur bus ISA, ce n'est généralement
pas un problème, étant donné que les ports sont presque toujours à une
adresse _bien connue_, comme 0x278 ou 0x378 qui sont typiquement
configurées dans le BIOS. Les adresses des cartes sur bus PCI sont
habituellement trouvées avec _lspci -v_ dans une ligne _I/O ports_,
ou dans un message du noayau après l'exécution de _sudo modprobe -a parport_pc_.
Il n'y a pas d'adresse par défaut, si <config-string> ne contient pas au
moins une adresse, c'est une erreur.

[[fig:Parport-block-diag]] 
(((Diagramme de parport)))

.Diagrammes blocs de parport

image::images/parport-block-diag.png[]

=== Pins

* _(bit) parport.<portnum>.pin-<pinnum>-out_ -- Pilote une broche de
sortie physique. output pin.
* _(bit) parport.<portnum>.pin-<pinnum>-in_ -- Suit une broche d'entrée
physique. pin.
* _(bit) parport.<portnum>.pin-<pinnum>-in-not_ -- Suit une pin d'entrée
physique, mais inversée.
Pour chaque pin, _<portnum>_ est le numéro du port et _<pinnum>_ est le
numéro de la broche physique du connecteur DB-25.

Pour chaque broche de sortie physique, le pilote crée une simple pin de HAL,
par exemple parport.0.pin-14-out. Les pins 2 jusqu'à 9 font partie du
groupe _données_, elles sont des pins de sortie si le port est défini
comme un port de sortie (par défaut, port de sortie). Les broches 1, 14,
16 et 17 sont des sorties dans tous les modes. Ces pins de HAL contrôlent
l'état des pins physiques correspondantes.

Pour chaque pin d'entrée physique, le pilote crée deux pins de HAL, par
exemple: parport.0.pin-12-in et parport.0.pin-12-in-not. Les pins
10, 11, 12, 13 et 15 sont toujours des sorties. Les pins 2 jusqu'à 9 sont
des pins d'entrée seulement si le port est défini comme un port d'entrée.
Une pin de HAL -in est VRAIE si la pin physique est haute et FAUSSE si la
pin physique est basse. Une pin de HAL -in-not est inversée, elle est FAUSSE
si la pin physique est haute. En connectant un signal à l'une ou à l'autre,
l'utilisateur peut décider de la logique de l'entrée. En mode _x_, les pins
1, 14, 16 et 17 sont également des pins d'entrée.

=== Paramètres

* _(bit) parport.<portnum>.pin-<pinnum>-out-invert_ -- Inverse une pin de
    sortie.
* _(bit) parport.<portnum>.pin-<pinnum>-out-reset_ -- (seulement pour les
    pins 2..9) VRAIE si cette pin doit être réinitialisée quand la fonction
    de réinitialisation est exécutée.
* _(U32) parport.<portnum>.reset-time_ -- Le temps (en nanosecondes) entre le 
    moment ou la broche est écrite et le moment ou elle est réinitialisée
    par les fonctions de réinitialisation de HAL.

Le paramètre _-invert_ détermine si une pin de sortie est active haute ou
active basse. Si _-invert_ est FAUX, mettre la pin HAL -out VRAIE, placera
la pin physique à l'état haut et mettre la pin HAL FAUSSE, placera la pin
physique à l'état bas. Si _-invert_ est VRAI, mettre la pin HAL -out VRAIE,
va mettre la pin physique à l'état bas. Si _-reset_ est VRAI, la fonction
de réinitialisation va passer la pin à la valeur de _-out-invert_. Ceci
peut être utilisé en conjonction avec _stepgen doublefreq_ pour produire
un pas par période.

=== Fonctions

* _(funct) parport.<portnum>.read_-- Lit les pins physiques du port <portnum> 
    et met à jour les pins de HAL -in et -in-not.
* _(funct) parport.read-all_ -- Lit les pins physiques de tous les ports et met 
    à jour les pins de HAL -in et -in-not.
* _(funct) parport.<portnum>.write_ -- Lit les pins de HAL -out du port <portnum> 
    et met à jour les pins de sortie physiques correspondantes.
* _(funct) parport.write-all_ -- Lit les pins de HAL -out de tous les ports et 
    met à jour toutes les pins de sortie physiques.
* _(funct) parport.<portnum>.reset_ -- Attends que le délai de mise à jour _reset-time_ 
    soit écoulé depuis la dernière écriture associée _write_ puis remet à jour les 
    pins aux valeurs indiquées par _-out-invert_ et les paramètres de _-out-invert_. 
    La réinitialisation doit être plus tard dans le même thread que l'écriture.

Les différentes fonctions individuelles sont prévues pour les situations où un 
port doit être mis à jour dans un thread très rapide, mais d'autres ports peuvent 
être mis à jour dans un thread plus lent pour gagner du temps CPU. Ce n'est 
probablement pas une bonne idée d'utiliser en même temps, les fonctions -all et
une fonction individuelle.

=== Problème courant

Si, au chargement du module un message du genre suivant apparait:

    insmod: error inserting '/home/jepler/linuxcnc/rtlib/hal_parport.ko': 
    -1 Device or resource busy 

s'assurer que le module du kernel standard, parport_pc, n'est pas chargé et qu'aucun 
périphérique dans le système ne revendique les ports concernés. footnote:[Dans le
paquetage LinuxCNC pour Ubuntu, le fichier /etc/modprobe.d/linuxcnc empêche normalement que
_parport_pc_ soit chargé automatiquement.]

Si le module est chargé mais ne semble pas fonctionner, l'adresse du port est
incorrecte ou le module _probe_parport_ est revendiqué par un autre périphérique.

=== Utiliser DoubleStep

Pour activer DoubleStep sur un port parallèle, il faut ajouter la fonction
_parport.n.reset_ après _parport.n.write_ et configurer _stepspace_ à _0_ ainsi
que le _reset-time_ souhaité. Alors ce pas pourra être positionné à chaque période
dans HAL, puis voir son état basculé par _parport_ après été positionné pendant
le temps spécifié par parport.n.reset-time.

Par exemple:
----
loadrt hal_parport cfg="0x378 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf stepgen.capture-position servo-thread
...
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
----

== probe_parport[[sec:probe_parport]]

Dans les PC actuels, les ports parallèles peuvent requérir une configuration 
plug and play (PNP) avant qu'ils ne puissent être utilisés. Le module de noyau 
_probe_parport_ effectue la configuration de tous les port PNP présents. Il doit 
être chargé avant _hal_parport_. Sur les machines sans port PNP, il peut être chargé mais restera sans effet.

=== Installer probe_parport

----
loadrt probe_parport
loadrt hal_parport ... 
----

Si le kernel Linux affiche un message similaire à:

+parport: PnPBIOS parport detected.+

Quand le module parport_pc est chargé, avec la commande: _sudo modprobe -a parport_pc; 
sudo rmmod parport_pc_, l'utilisation de ce module sera probablement nécessaire.