L’ORDINATEUR ET L’INTERFACE

L’un des points forts des caméras CCD astronomique est qu'elles sont conçues par essence pour fonctionner avec un ordinateur. Non seulement le CCD est intrinsèquement très sensible et possède des qualités photométriques et astrométriques remarquables, mais en plus, l'usage de l'ordinateur ajoute une souplesse d'utilisation considérable en aidant par exemple à révéler la plus infime information contenue dans l’image.

La famille d’ordinateurs retenue pour la caméra Audine est celle des PC. Cela paraîtra arbitraire aux yeux de certains, mais est-il possible d'ignorer que le PC est le standard d’aujourd’hui (mais de quoi sera fait notre avenir ?) ? Ce choix garantit une certaine pérennité et facilite l’échange de données. Un PC de milieu de gamme est suffisant pour piloter Audine (Pentium 200 Mhz par exemple). Il faudra mettre l'accent, lors du choix de l’ordinateur, sur la quantité de mémoire vive (32 Mo) et plus encore sur la capacité de la mémoire de masse (quelques Go). Un graveur de CD-ROM est un très bon investissement pour l'archivage (quasi indispensable).

Les inconditionnels d'ordinateurs Macintosh pourront se sentir floués par le choix du PC pour commander Audine. Ceci est aujourd'hui l'exemple type du faux problème, grâce par exemple à des technologies telle que l'Intranet. Il est en effet possible d'installer un PC au pied du telescope dédié uniquement au pilotage d'Audine (et du télescope) et de relier via un réseau Ethernet cet ensemble à votre ordinateur, quelque soit son type et sa marque. L'opération est relativement peu couteuse car un PC succeptible de commander Audine se trouve à moins de 5000 F aujourd'hui. Une carte réseau avec un câble vous sera facturé 200 ou 300 F tout au plus. Les choix retenus lors du développement du logiciel AUDACE facilitent et encouragent même cette architecture informatique.

Le type d'interface utilisé par la caméra est essentiel. Il y a deux alternatives : soit plonger dans les entrailles de l’ordinateur pour y installer une carte d’interface spécifique, soit exploiter l’un des ports d’entrée/sortie dont sont dotés les PC. La première solution offre à priori l’opportunité d’optimiser le fonctionnement général de la caméra qui s'y raccorde, par exemple en termes de vitesse ou par la possibilité offerte d'utiliser un long câble de liaison entre le PC et la caméra. Malheureusement elle est aussi synonyme de complexité, de surcoût, et surtout, elle n’autorise pas l’usage d’un ordinateur portable, ce qui est terriblement pénalisant à la vue des bienfaits que peut apporter une telle machine. L’ordinateur portable est une véritable bénédiction pour quiconque souhaite s’éloigner de la pollution lumineuse avec une installation mobile. C’est un choix rentable, même en travaillant dans un observatoire fixe, car bien des astronomes rechignent à laisser sur place un matériel aussi délicat qu’un ordinateur aux prises avec l’humidité et les petites bestioles. La puissance des portables est telle qu’il n’est pas utile de transférer les données acquises sur un ordinateur de table pour effectuer les traitements. Bref, vous avez bien compris, la caméra Audine est prévue pour être pilotée aussi bien par un ordinateur de bureau que par un ordinateur portable, via une interface externe...

Il y a pléthore d’interfaces externes, dites standards, dans le monde de l’informatique. Par exemple, une interface répandue et puissante sur les portables, comme la norme PCMCIA, ne répond pas à un des fondements de notre projet, à savoir une conception aisée. Dans la même veine, nous pouvons citer des interfaces parallèles comme le SCSII ou le bus IEE488-GPIB. Mais ici encore les contraintes du protocole de communication réservent la mise en oeuvre à des professionnels.

L’interface RS232 est une candidate sérieuse. Elle est au coeur d’une foule d’applications faisant intervenir la communication entre l’ordinateur et des appareillages les plus divers ou encore le transfert de données sur le réseau téléphonique via un modem... Malheureusement l’interface RS232 utilise un protocole de communication série très lent, accusant en cela le poids de son âge. Songez que la communication sérielle sous entend que l’information transite dans un seul fil et que dans ce fil passent les uns derrière les autres les bits d’information. La fréquence de communication maximale est le plus souvent de 19200 bits/secondes. A ce rythme, sachant qu’une seule image issue du KAF-0400 numérisé sur 12 bits pèse environ 5,9 millions de bits, le temps de transfert atteint 5 minutes. C’est beaucoup trop, la patience de l’utilisateur ayant de sérieuses chances d’être mise à rude épreuve. Il n’est pas raisonnable en effet de passer plus de temps à transférer des données qu’à observer un ciel magnifique.

Les progrès dans le domaine de la transmission série permettent à présent des vitesses de transfert de plusieurs mégabits par seconde, ce qui est autrement plus efficace. Ces interfaces ont pour nom RS422, Ethernet, IEEE 1394 (ou FireWire, une interface spécialisée pour la transmission d'images vidéo et que vous retrouvez sur la plupart des camescopes numériques), ...  Une de ces interfaces, l'USB (pour Universal Serial Bus), tient une place particulière car elle a des chances de devenir le moyen privilégié par lequel l'ordinateur va dialoguer avec des périphériques tels qu'un clavier, un scanner, un modem, un appareil photo numérique, une imprimante... Avec un taux de transfert de 12 Mbits/seconde, elle peut même être utilisée pour l'audio haute fidélité ou la vidéo MPEG-2. Le fait que le mot bus apparaissent dans sa désignation signifie qu'il est possible de connecter jusqu'à 127 périphériques sur la même interface !

Malheureusement, toutes ces interfaces nécessitent la mise en oeuvre de puces spécialisées qui s'apparentent à des microprocesseurs, avec pour conséquence une mise au point pouvant être délicate, la nécessité d'outils spécialisés et un certain bagage technique. Cependant, l'USB se détache du lot, car en raison de son importance stratégique potentielle, on voit apparaître des produits prometteurs qui semblent à terme rendre cette technologie accessible aux amateurs d'électronique.

Finalement, à l'heure actuelle, la seule interface très simple à utiliser, mais en même temps suffisamment efficace, est l’interface parallèle, encore appelé interface Centronics, du nom du constructeur qui l'a introduite. Initialement sa destination était le pilotage des imprimantes. Elle se reconnaît fort bien à l’arrière des ordinateurs avec un connecteur 25 points femelles (connecteur type DB25). Rien ne prédestine à priori cette interface à communiquer avec une caméra CCD. Nous allons donc commettre un acte caractérisé de détournement de fonction. Mais nous le ferons avec d’autant moins de scrupules que l’interface parallèle est déjà employée couramment pour tout autre chose qu’envoyer des caractères à une imprimante : communications entre ordinateurs, stockage de masse, scanner et plus généralement le contrôle de processus dans le domaine domestique, voire industriel. Le protocole de communication est extrêmement souple car il peut être géré intégralement par logiciel. La contrepartie est une vitesse de transfert qui ne sera pas nécessairement à la hauteur des espérances (une limitation de base provient du taux de transfert sur le bus ISA d’un PC qui limite les échanges à 1 Mhz environ). Une autre difficulté va surgir du fait que, si l’interface Centronics de base peut communiquer avec des mots de 8 bits de large dans le sens ordinateur vers le monde extérieur, seul 5 bits sont utilisables dans le sens inverse. Cette limitation tombe depuis que des améliorations du port parallèle ont été proposées. Elles constituent à présent une véritable norme (IEEE 1284). Par exemple le mode EPP (pour Enhanced Parallel Port) de cette norme autorise un transfert bidirectionnel sur 8 bits aussi bien en entrée qu’un sortie avec une fréquence pouvant aller jusqu'à 2 Mhz par mot de 8 bits. L’aspect extérieur de l’interface ne change pas et elle reste compatible avec le standard initial. Le choix d'utiliser ou non le mode EPP se fait par la programmation de certains registres ou en modifiant le programme de démarrage de l’ordinateur. Le mode ECP (pour Extended Capabilities Port) est une autre alternative qui affiche des performances encore plus élevées grâce à l’usage d’un canal DMA (Direct Memory Access) et d’une procédure de compression de données.

Les modes EPP et ECP de l’interface parallèle constituent des améliorations significatives du bon vieux standard Centronics. Toutefois, un certain nombre de composants externes sont nécessaires pour les utiliser, avec à la clef une mise au point parfois un peu délicate, en particulier pour assurer une bonne synchronisation entre les flux de données entrant et sortant. Bien que ces interfaces équipent la plupart des ordinateurs récents, elles ne sont pas totalement universelles et le problème de la compatibilité est bien réel sur du matériel ancien ou très bas de gamme. Enfin, le gain en vitesse de lecture d’une caméra n’est pas aussi important qu’il y paraît au premier abord, en tout cas il n’est pas d’un facteur 2 à partir du moment où les horloges pilotant la lectures du CCD sont produites directement à partir de l’ordinateur. Nous n'exploiterons dans Audine que l'interface parallèle d'origine pour une sûreté de fonctionnement maximale.

L'informatique évoluant très vite, il n'est pas impossible qu'à moyen terme l'interface Centronics disparaisse de nos PC, pour être probablement remplacée par l'USB. Mais que l'on se rassure, compte tenu du parc de périphérique dialoguant via le port parallèle, des solutions réalisant la conversion UBS vers le port parallèle seront proposées, et cela encore durant fort lontemps. Déjà aujourd'hui, il est possible d'émuler une véritable interface parallèle à la norme IEEE 1284, avec une simple puce et un minimum de composants externes, via l'USB. Votre caméra Audine ne se démodera pas de si tôt !
 

LA GÉNÉRATION DU CHRONOGRAMME

Le chronogramme est la transcription sous une forme graphique de la séquence cyclique de signaux qu’il faut envoyer au CCD afin d'assurer le transfert des charges électriques à la fin du temps de pose. Ces signaux périodiques sont appelés des horloges et prennent le plus souvent deux niveaux, dits haut et bas. Outre la fonction de transfert de charges proprement dite, le chronogramme sera chargé d'orchestrer des opérations telles que la conversion analogique/numérique ou le dialogue avec l’ordinateur via son interface.

Le chronogramme déroule une partition répétitive. Celle-ci peut être complexe : dans Audine il ne faudra pas moins de 8 horloges distinctes, ou si l’on préfère, 8 voies instrumentales. La qualité du chef d’orchestre est ici déterminante pour éviter la cacophonie. La synchronisation sera assurée par un logiciel tournant sur l’ordinateur de commande.

Cette approche purement logicielle pour produire le chronogramme confère une souplesse considérable tant au niveau de la mise au point de la caméra que lors de son utilisation. Toutes les fantaisies de fonctionnement de la caméra sont autorisées, il suffit de ré écrire quelques lignes de code.

La seul grief sérieux à opposer à la production des horloges par voie logicielle par rapport à une solution matérielle (séquenceur câblé), est que le temps de lecture du CCD sera directement tributaire de la vitesse d'exécution du programme.

 Le code permettant de générer une horloge aura la forme :

FOR I=1 TO 1000
   OUT 767,255
   OUT 767,0
NEXT

Ce simple code produit 1000 successions de 1 et de 0, qui apparaissent simultanément sur les 8 lignes de données du port parallèle. Si vous examinez le signal produit avec un oscilloscope, il apparaît que :

LA PROGRAMMATION DU PORT PARALLÈLE

Le connecteur du port parallèle d’un PC est du type DB25 femelle avec 17 lignes actives et 8 lignes de masse. Les lignes actives sont divisées en 3 groupes : Lorsque le port parallèle est utilisé pour piloter une imprimante, les 8 lignes de données transmettent le code de caractère à imprimer. Les lignes de statut sont utilisées pour synchroniser l’imprimante avec le PC (handshake en anglais) et informent le PC sur l’état de l’imprimante (plus de papier, imprimante en attente, erreur matérielle...). Enfin, les lignes de contrôle servent à commander et synchroniser l’imprimante dans le sens PC vers imprimante.

La nécessité d’un dialogue entre le PC et l’imprimante implique que certaines lignes de l’interface sont exploitées en entrée et d’autres en sortie. Les lignes en sortie (vue du côté PC) serviront à piloter la caméra (génération du chronogramme). Les lignes en entrée permettront de réceptionner les pixels images numérisés. Les 5 lignes en entrée sont un peu justes pour digérer une information codée sur 16 bits en provenance de la caméra (en vérité 15 bits, mais la différence n’est pas significative). La technique pour forcer le passage consiste à réaliser un multiplexage. Les 16 bits sont divisés par un circuit électronique en 4 groupes de 4 bits (un groupe de 4 bits s’appelle un nibble) pour être présentés successivement sur quatre des cinq lignes d’entrée du port imprimante. Le logiciel de pilotage de la caméra rassemble les 4 nibbles pour reconstituer le mot original sur 16 bits (c’est l’opération de démultiplexage).

Le niveau binaire observé sur les lignes de données et de contrôle dépend de l’état de bits en correspondance dans deux registres mémoires spéciaux du PC. En entrée, un autre registre spécifique voit l’état de ces bits modifiés en fonction du signal appliqué sur les 5 lignes de statut. En fin de compte, le port imprimante est géré par 3 registres de 8 bits situés à des adresses contiguës dans l’espace mémoire du PC. Normalement l’adresse mémoire du premier registre, que l’on appelle adresse de base, est 378h (soit 888 en décimal). Les deux autres registres sont alors aux adresses 379h et 37Ah (889 et 890 en décimal). Cependant, un PC pouvant disposer de plusieurs ports imprimante (LPT1, LPT2, LPT3) il faut s’attendre à ce que l’adresse de base change en fonction du numéro de port. Officiellement on devrait avoir pour les adresses des différents ports imprimante :
 

Port
Registre de données
Registre de statut
Registre de contrôle
LPT1
3BCh
3BDh
3BEh
LPT2
378h
379h
37Ah
LPT3
278h
279h
27Ah
 

Dans les faits, l’adresse de base de LPT1 est très souvent 378h. Cette information apparaît généralement brièvement sur l’écran lors du démarrage de l’ordinateur.

Voici pour les 3 registres, l’attribution des bits et le numéro correspondant des broches du connecteur DB25 :
 

REGISTRE DE DONNÉE
BIT
SIGNAL 
BROCHE
D7
Data 7
9 (s)
D6
Data 6
8 (s)
D5
Data 5
7 (s)
D4
Data 4
6 (s)
D3
Data 3
5 (s)
D2
Data 2
4 (s)
D1
Data 1
3 (s)
D0
Data 0
2 (s)
 
REGISTRE DE STATUT
BIT
SIGNAL
BROCHE
D7
Busy
11 (e)
D6
ACK*
10 (e)
D5
PE
12 (e)
D4
Select
13 (e)
D3
Error*
15 (e)
D2
IRQ*
/
D1
Réservé
/
D0
Réservé
/
 
REGISTRE DE CONTRÔLE
BIT
SIGNAL
BROCHE
D7
Réservé
/
D6
Réservé
/
D5
Direction
/
D4
IRQ Enable
/
D3
Select_In*
17 (s)
D2
INIT
16 (s)
D1
Auto Feed*
14 (s)
D0
Strobe*
1 (s)
 

Les broches de 18 à 25 sont toutes reliées à la masse.

La lettre E ou S en regard du numéro de broche informe si la ligne en question fonctionne en entrée ou en sortie.

Un symbole * à la suite d’un nom de signal signifie que la ligne est du type à logique inverse. Ainsi pour obtenir l’état 1 sur une broche de cette catégorie il faudra programmer à 0 le bit correspondant dans le registre. Le principe est différent en entrée car c'est l'imprimante qui fixe le type de logique. Cependant il est important de noter que le signal Busy (bit 7 du registre d’état) est câblé en logique inverse : si vous configurez la broche 11 du connecteur au niveau logique bas,  le bit 7 sera au niveau logique haut.

 
La numérotation de broches du port imprimante côté femelle.

Lorsque le port parallèle est utilisé pour piloter une imprimante voici la signification des principaux signaux : Select_In (Select Input) indique à l’imprimante qu’elle est sélectionné, INIT permet de l’initialiser, Auto Feed ordonne l’avancement du papier, Strobe passe au niveau bas lorsqu’un caractère est envoyé, PE (Paper Empty) indique au PC que l’imprimante n’a plus de papier, ACK (Acknowledge) signale que l’imprimante a bien reçu le caractère envoyé, Busy indique que l’imprimante n’est pas prête à recevoir un caractère, Select indique que l’imprimante est en ligne, Error prévient qu’une erreur d’impression s’est produite (si se signal est au niveau 0). Notez que les bits liés aux processus d’interruption ne sont pas utilisés dans Audine (ils n’ont pas de correspondance directe sur le connecteur).

Pour écrire dans un des registres de sortie vous devez utiliser une instruction telle que OUTP (en langage C) ou encore OUT (en Basic). Voici un exemple en C qui écrit la combinaison binaire 10011101 dans le registre de données et affecte ainsi directement l’état logique des broches correspondantes du connecteur imprimante :

#define DATA 0x0378
#define STATUS DATA+1
#define CONTROL DATA+2

int value=0x9D;   // 1001101
outp(DATA, value);

En Basic vous pourriez écrire :

OUT 888,157

Si vous souhaitez transmettre des données au travers du registre de contrôle il faut considérer que seul les 4 bits de poids faibles sont significatifs. Supposons que vous voulez que la broche 17 (signal Select In) prenne l’état 1, que la broche 16 (signal INIT) prenne l’état 0, que la broche 14 (signal Auto Feed) prenne l’état 0 et que la broche 1 (signal Strobe) prenne l’état 1, un raisonnement rapide vous amènera peut être au code suivant :

Value=0x09;     // 1001
outp(CONTROL, value);

Cela ne marche pas car, rappelez-vous, les signaux Select In, Auto Feed et Strobe fonctionnent en logique inverse (les bits 0, 1 et 3). Ce que vous obtenez en fin de compte c’est la combinaison binaire 0010 au lieu de 1001. Pour avoir un résultat correct vous devez inverser au moment de l’écriture dans le registre les bits fonctionnant en logique négative grâce à une opération de ou exclusif avec le motif binaire 1011 (0x0B ) :

outp(CONTROL, value ^ 0x0B);

En Basic vous ferez par exemple :

OUT 890, (9 XOR 11)

Pour une opération de lecture il faut relever l’état des 5 bits de poids fort du registre d’état. Une bonne précaution consiste à inverser l’état du bit 7 (signal Busy) après la lecture du registre pour éviter les surprises (rappelez-vous que ce bit est inversé par le hardware). Les instructions à utiliser sont INP en C out en  Basic. Exemple :

unsigned int inp_value ;
inp_value = inp(STATUS) ^ 0x80) >> 3;

Remarquez le ou exclusif avec 0x80 (1000000) pour inverser l’état du bit 7 puis les 3 décalages vers la droite afin que les 5 bits de poids fort deviennent 5 bits de poids faible, ce qui donne un résultat plus facilement interprétable.

En Basic, le programme s'écrira :

V = (INP(889) XOR 128) \ 8
 
Pour d'autres informations sur le port parallèle, consultez les adresses suivantes :
http://www.doc.ic.ac.uk/~ih/doc/par/
http://www.senet.com.au/~cpeacock/