Vendredi, mai 6 2011

Fabriquer un sniffer série compatible 3V / 5V

Lors du développement d'interface série, il est toujours utile de savoir qui dit quoi, qu'envoi l'hôte à l'esclave, qu'envoi l'esclave à l'hôte, ça se fait très bien avec 2 interfaces séries mais encore faut-il en avoir 2, pour des signaux compatibles RS232 fluctuant entre -12V et +12V, pas de souci avec l'aide de 2 diodes comme dans le schéma ci-dessous, par contre, cela se corse lorsque les signaux sont à des niveaux TTL, voir en 3V.

rs232 sniffer (image de Embedded Freaks)

Mes essais avec des diodes rapides n'ont rien donné pour des tensions de 3 ou 5V, j'ai donc cherché une autre méthode pour coupler les lignes RX et TX, j'ai alors fouillé dans mes tiroirs et ai fini par dégoter un CD4001 (une quadruple porte NOR) qui attendait son tour, mais rien n'y a fait, cette série est bien trop lente, il me fallait du HEF, appel des réparateurs du coin, rien, passage express chez un pote, non plus, que des CD40XX, enfin, mon salut à été mon ancien lycée qui a pu me fournir un HEF4001 (fin de la paranthèse, « aventure pour un CMOS ») et là, aucun souci, la porte est suffisamment rapide, cela fonctionne parfaitement bien !

Voici le schéma de principe :

Rs232 sniffer Cmos

On oublie pas d'alimenter le CI et ça roule, on connecte les entrées RX et TX sur les lignes de données à sniffer et on retrouvera en sortie le mix des 2 permettant ainsi de voir les commandes envoyées par l'un et l'autre dans le bon ordre, rien de tel pour débugguer tranquillement... Notez que j'ai utilisé une quadruple porte NOR mais vous pouvez bien sûr utiliser n'importe quelle portes combinées ensemble du moment qu'au final, votre montage réalise bien une fonction OU, le mieux étant de se procurer un HEF4071 (quadruple porte OU) et éventuellement utilisé les portes restantes en buffer.

rs232 sniffer montage

Utilisé conjointement avec un Bus Pirate, on connecte l'alimentation du CMOS sur les broches GND et +5V du Bus Pirate, on active la ligne +5V (commande W), puis on branche la sortie de notre montage sur l'entrée RX (MISO), on entre dans le mode UART, on configure le tout, vitesse, etc...on bascule en mode « Live UART Monitor » et voilà, vous verrez alors défilez toutes les données circulant dans les lignes RX et TX de votre liaison série...

Rs232 sniffer Bus Pirate

Lundi, décembre 21 2009

Librairie Arduino pour afficheur Oled : Oled4d

Voici une librairie libre de gestion d'afficheur OLED de la société 4D Systems pour Arduino.

Comme leur nom l'indique très bien, ils utilisent la technologie OLED avec tous les avantages de cette technologie : pas besoin d'un rétroéclairage, ils ont un angle de vue de 180°, bonne consommation, très bon contraste, vous pouvez les trouver entre autres chez Lextronic ou encore chez Sparkfun.

Le jeu d'instructions n'est pas toujours très logique mais est assez complet, le principal défaut de ces afficheurs est le prix, à 65€ l'unité, j'imagine mal comment espérer faire de la petite série...

Ces afficheurs sont pilotables directement par le biais d'une connection série dans lequel on envoie directement des commandes d'assez hauts niveaux :

  • Set Background Color
  • Put Pixel
  • Erase Screen
  • Draw Rectangle
  • Place String of ASCII Text
  • ...

Ils disposent également d'un port microSD permettant ainsi de charger des images ou encore des bouts de programmes, attention cependant, car n'espérez pas mettre des images jpg dans la microSD ou autre et les afficher comme ça, d'un coup, ça ne fonctionnera pas, tout d'abord, car le chip de 4D ne gère pas les images compressées mais uniquement des champs de bits et surtout car il n'y a aucune gestion de FAT gérée par le controleur, ainsi, il est possible d'accéder au contenu de la microSD depuis votre programme mais uniquement en brut : à nous de gérer la couche du système de fichiers...

Tester la libraire

Voici la marche à suivre pour tester cette librairie avec Arduino (la librairie peut parfaitement fonctionner hors du projet Arduino...) :

  1. Créer un dossier Oled4d dans le dossier Libraries de votre installation Arduino et copiez dedans le fichier Oled4d.h.
  2. Créez un nouveau projet Arduino et copiez le contenu du fichier oled4d.pde dedans.
  3. Compilez le source, envoyez dans la cible et voilà, vous devriez avoir quelque chose de ce genre s'afficher :

Oui, il s'agit bien de Tux ! ;)

Comment ça fonctionne ?

Voici un petit bout de code :

// Créer l'objet en interface série logiciel
Oled4dSoft oled = Oled4dSoft(serial, 8);

// Pour utiliser l'uart « hardware », procéder ainsi :
//Oled4dHard oled = Oled4dHard(Serial, OLED_RESET_PIN);

// Initialise l'écran
oled.init();

// Efface l'écran
oled.clear();

// Dessine un cercle
oled.drawCircle(64, 64, 20, RGB(255, 255, 0));

// Affiche du texte
oled.drawText(1, 3, SMALL, GREEN, "Hello world !");

Voilà, je pense que l'exemple est assez explicite et logique...

Vour remarquerez qu'il est possible de passer par l'uart intégré à l'Atmel ou de passer par l'uart logiciel avec la libraire NewSoftSerial (cette librairie dispose de fonctions avancées et est bien supérieure à la librairie d'uart fourni par défaut dans le projet Arduino).

Démo

Voici une petite démo affichant en vrac des lignes, des triangles, des cercles, des polygones, des rectangles...
La vidéo reflète assez mal les couleurs de l'écran qui sont bien vives en réel.

Écran Oled de 4D System piloté par Arduino

Futures évolutions

Actuellement, cette librairie supporte uniquement les instructions standards (General Command Set), les autres (Extended Command Set), qui permettent entre autre un accès au contenu de la microsd, ne sont pas encore gérées mais le plus gros du travail est fait...

Téléchargement

Cette librairie est mise à disposition sous license GPL.
Vous pouvez télécharger la toute dernière version de cette librairie depuis mon compte GitHub à l'adresse suivante : http://github.com/hugokernel/Oled4D

Je mettrai à jour également la page sur le wiki : http://www.digitalspirit.org/wiki/projets/oled4d.