PhotographieJ'aime les imprimantes matricielles et le papier continu. Surtout les vielles à aiguilles, qui font ce si caractéristique bruit avec leurs petites aiguilles chacune tapant de façon répétée sur le ruban encreur afin de laisser de petits points sur le papier. Mais il faut reconnaître que le port parallèle n'est plus aussi courant qu'avant sur nos ordinateurs d'aujourd'hui. Voilà donc une petite interface pour piloter ces vielles imprimantes en RS232, ou même par un port USB. Même si j'ai utilisé les libliothèques de mon compilateur et que j'avais déjà fait quelques tests avant il y a une demi-douzaine d'années, c'était mon premier "vrai" projet µC avec un port USB.

Le microcontrôleur utilisé est un 18F4550 afin de profiter du contrôleur USB intégré à la puce, en squattant le VID 0xF055 (de toutes façons, ça apparait automatiquement en /dev/ttyACMn quelque soit le VID/PID, au moins sous Linux).
Et si on veut de la fiabilité, il y a aussi un port série RS232, avec - parce que c'est quand même indispensable pour piloter une imprimante - du contrôle de flux hardware (signal CTS) et logiciel (XON/XOFF). Bref, on s'en sert un peu comme on veut. Surtout que comme même en USB, c'est un port série virtuel (même sous windows mais il faut le driver), on fait vraiment ce que l'on veut avec des pipes dans tous les sens, bien que ça marche aussi avec CUPS s'il connaît l'imprimante.


Le schéma. Comme d'hab, cliquez dessus pour mieux voir.


Le connecteur Centronics, récupéré d'un vieux câble, est monté sur le bord de la carte de circuit imprimé. Il y a bien plus de pins du port de l'imprimante reliées au microcontrôleur que ce qu'il y aurait eu besoin, mais de toutes façons, le double face était déjà nécessaire à cause du montage en bord de carte, autant avoir le contrôle sur le maximum de lignes, quite a les laisser en haute impédance dans le firmware. Faire bien attention aux quelques soudures chiantes a souder aussi du coté top (en jaune), entre les deux circuits intégrés et au niveau du connecteur DE-9 du port série. Pas de soudure top à faire sous des composants genre condensateurs, donc c'est largement jouable sans trous métallisés. :3

CAOPhotographie
La CAO de la carte, avec le connecteur Centronics-36 monté en bord de PCB.
Le plus rigolo c'est de récupérer des connecteurs sur de vieux câbles parallèles à grand coups de pince coupante!


L'auriez-vous deviné ? Si le nom de fichier de cette page HTML est si courte, c'est que je n'ai pas décemment réussi a mettre une URL plus longue sur les zones sans pistes de cette carte !

Typon du dessus Typon du dessous
Pour ceux qui veulent refaire le projet, voilà les typons. Cliquer dessus pour avoir les versions qu'il faut imprimer en 600dpi, et alignez les bien !


Photographie
Les cartes une fois réalisées... C'est-t'il pas meugnon ! Un exemplaire avec le blindage qui fait détrompeur, et une version sans.

PhotographiePhotographie
Le premier essai !

Photographie
L'importance de scruter l'état de l'imprimante. Et puis de lui parler avec le bon jeu de caractères, aussi. Celle que j'avais était en CP850.


Un truc que j'ai constaté, c'est qu'en plus du remplacement LF -> CRLF et du transcodage de charset, il ne fallait pas fermer le port série virtuel de suite après avoir envoyé le dernier octet, sinon les données encore "dans le tube" de l'USB étaient perdues.. un workaround possible est de faire un petit script (par exemple enregistré dans /usr/local/bin/usbprint) :
#!/bin/sh
{
  iconv -t CP850 | awk '{print $0 "\r"}'
  sleep 10
} > /dev/ttyACM0
et l'utiliser en faisant genre:
date | banner | usbprint
Sous Debian quand modemmanager est installé, ce dernier va avoir tendance a envoyer "AT" de temps en temps vers l'imprimante... La solution :
sudo apt-get --purge remove modemmanager
Fichiers du projet, pas tout dans un gros zip pour changer: