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
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 !
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 !
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.
Le premier essai !
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/ttyACM0et l'utiliser en faisant genre:
date | banner | usbprintSous 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 modemmanagerFichiers du projet, pas tout dans un gros zip pour changer:
- Typon (TOP)
- Typon (BOT)
- Schéma
- Implantation
- Fichier .hex (image µC)
- Petit driver pour windows
- Code source (programme principal)
- Projet code source (avec tous les fichiers annexes)