Avenir OpenWork pour l'électronique et l'informatique libre
Vendredi 25 Juillet 2008 Sitemap | Fr | En

Menu

Le projet FS22-647

Hardware

Afin que vous puissiez vous aussi réaliser cette machine, vous pouvez télécharger le projet complet - ndlr: schémas, PCBs, layouts au format Gerber274-X, fichier de perçage - développé sous Altium DXP2004 (anciennement Protel). Ils sont commentés ci-dessous afin de mieu les comprendre, si néanmoins des aspects resteraient mistérieux, n'hésitez pas alors à passer par le fomulaire de contact. Les téléchargements des datasheets, schémas et PCB du projets sont tout en bas, dans le chapitre ressources.

Accès rapide aux chapitres.

La carte mère

Vue d'ensemble de la carte mère dans sa version 2.2c
Vue d'ensemble de la carte mère dans sa version 2.2c - cliquez pour agrandir.

Le processeur

Ce sous-chapitre détaille le fichier CPU.SchDoc. La première partie du circuit abordée est le reset. Il peut être commandé soit par pression sur S1 ou en envoyant une impultion sur A1 (Il ne s'agit pas formellement d'une antenne, mais d'un fil flottant pour y connecter une sortie d'un générateur de fonction par exemple). R1 joue le rôle de pull-up, et C1 absorbe le rebond lorsque l'on appuie sur le bouton. U10A (qui est une porte AND) est à comprendre comme une porte OU avec entrées et sorties inversées. En effet, si un 0 logique est passé sur l'une ou l'autre de ses deux entrées, alors la sortie sera à 0 et le reset sera commandé. La sortie à 1 logique n'étant actif que lorque les deux entrées sont à 1.

La deuxième partie concerne la génération et le réglage du clock. U11 est un EXO-3C-20.000. Il s'agit d'un générateur d'onde carrée avec un rapport cyclique de 50% à une fréquence de base de 20.000 divisible par 2n où n est la valeur binaire entrée sur D1 à D3. R8 est un réseau de pull-ups et S2 sert à choisir n et si la division est activée ou non.

Viennent ensuite les deux latches U9A et U9B, elles sont actives chaque fois qu'un appel par IORQ est fait. Alors elles créent un retard d'un cycle horloge, ce qui permet d'éviter des erreurs de latences dues à la faible vitesse de certains périphériques. La batterie de portes logiques U6A, U6B, U10B et U10C, servent à vérifier qu'il s'agisse bien d'un appel au hardware externe. Les résistances R3 à R7 sont des pull-ups qui servent à garder à 1 les signaux du bus de commande non utilisés.

Le démultiplexeur U7A sert à décoder les adresses pour la mémoire. En effet, la ROM est située tout en bas de la plage mémoire. Son adresse commence à à 0000h et se termine à 3FFFh, il s'agit d'une EPROM de 16 ko. La RAM, elle se situe au dessus, elle est donc adressable dès 4000h et se termine à BFFFh; en effet, elle fait 32 ko. Pour que ''adressage soit discret et fonctionne de cette façon pour le software, il faudra que l'adresse 4000h du bus d'adresse entre en 0000h sur la RAM. Aussi, lorsque A14 ET A15 sont à 0 - condition vérifiée par U17A - nous nous situons à une adresse forcément inférieure à 4000h, donc c'est la ROM qui sera sélectionnée par U7A. Pour adresser la RAM de façon correcte, il faut que A15 du CPU soit sur A14 du chip mémoire, afin de soustraire à chaque fois 4000h de la valeur d'adressage et de plus, la mémoire ne peut être sélectionnée uniquement si A14 OU EXCLUSIVEMENT si A15 est à 1, condition vérifiée cette fois-ci par U18A. En effet, lorsque les deux sont à 1, alors nous nous adressons à une adresse supérieure à BFFFh, puisqu'au moins égal à C000h. Ceci permet une future extension possible de 16 ko de RAM supplémentaires.

U8 décode les adresses pour les accès aux périphériques. En utilisant A5, A6 et A7, on peut obtenir toutes les sorties du démultiplexeur en allant par pas de 20h, ainsi chaque périphérique dispose de 32 adresses pour lui. Et il est donc possible d'avoir en tout 32 x 8 périphériques, soit 256, ce qui est somme tout, largement suffisant pour une petite machine. U6C sert juste à avoir une entrée de validation inverse sur U8, afin de vérifier qu'il n'y aie pas d'erreurs.

Les autres condensateurs sur ce schéma servent au découplage des ICs.

Le processeur zilog z80a avec les mémoires à ses côtés
Le processeur zilog z80a avec les mémoires à ses côté - cliquez pour agrandir.

Les mémoires

Dans le fichier MEMORIES.SchDoc, les condensateurs C10 et C11 servent au découplage des deux mémoires. Le reste n'étant que de la connectique entre les deux chips et les bus de données, adresses et contrôles.

Les connecteurs sériels RS-232

sont dessinés dans le schéma PERIPHERALS.SchDoc. Ils communiquent avec le CPU par le z80 SIO/2, U4, lui-même découplé par C12. Il met les signaux en forme mais sous une tension de 5V. Ils sont adaptés à une tension d'environ 12V par les MAX232 U13 et U14 pour le premier connecteur et U16 et U17 pour le second, 2 par canaux car un pour l'émission et un pour la réception des données. Ils élèvent la tension par charges capacitives C13 à C31. CON1 et CON2 sont les deux connecteurs à proprement parler.

MUBUS et LCD alphanumérique

MUBUS est un connecteur d'extension général utilisé à l'EPFL notamment par le LAP (Laboratoire d'Architecture des Processeurs, anciennement LAMI), Il permet de connecter, une imprimante, un programmateur d'EPROMs, un autre ordinateur, etc. Sur la feuille MUBUS_LCD.SchDoc, U5A, U5B et U6E servent à activer sa broche de validation en lecture ET en écriture. Le reste des fils est directement connectés aux différents bus.

La carte de test du port MUBUS
La carte de test du port MUBUS - cliquez pour agrandir.

Pour l'écran LCD, Le principe est le même. U12A, U12B et U10D valident la communication avec l'écran en lecture et en écriture. Les trois portes NOT U6D, U6F et U15A servent à inverser la logique état bas à une logique état haut. Le réglage du contraste et de la lumino'ité est assuré directement par des potentiomètres inclus dans le boitier de l'écran, et n'est pas mis sur la carte, pour des raisons de commodités. C33 et C34 servent au découplage d'ICs.

Petit message sur l'écran LCD texte
Petit message sur l'écran LCD texte - cliquez pour agrandir.

Le BUS FS22-647

Il sert à connecter les cartes d'extensions sur la carte mère. CON5 à CON9 sont les connecteurs d'extension, On voit sinon les borchages avec les bus de données, adresses et contrôles. Des cartes pour ce bus ont été réalisés, telles qu'un port parallèle supplémentaire, et un port AT, PS/2 pour clavier PC.

Les PCBs

Il n'y a pour l'instant pas de typons, car les fichiers de fabrication sont au format GERBER274-X et détourage et perçage CNC. Toutefois, dans un soucis de popularisation, il y en aura prochainement.

Retour au haut de la page

Le port parallèle

Ses avantages

Simple à mettre en œuvre, le port parallèle est un atout précieux. En ajouter un tel qu'il est connu dans le monde du PC permet notamment de pouvoir connecter une imprimante avec le FS22-647. Pourquoi ne pas tester un programamteur ou encore tester votre appareil que vous aviez développé il y a tant de temps sur ce port parallèle et dont vous ne voulez pas adapter la connectique au port FS22-647. Bref, vous l'avez compris, les possibilités apportées sont énormes.

La carte d'extension du port parallèle
La carte d'extension du port parallèle - cliquez pour agrandir.

Fonctionnement

La simplicité est due au fait même que le port soit parallèle, il n'y a pas besoin de «sérialiser» les données comme avec les ports RS-232 ou le clavier. Le port parallèle tel qu'il existe sur PC est composé de trois registres. Ils sont commandés par par U1A. Ce DEMUX est actif lorsqu'on essaie des accès en lecture ou en écriture sur un port entre E0h et FFh grâce aux portes AND de U6 et OR de U5. Toutefois A0 et A1 ne rendent que 4 adresses valides E0h, E1h, E2h et E3h. Le premier rgistre, à l'adresse E0h est en écriture uniquement, il sert à écrire les données sur 8 bits. C'est U2 ici qui s'occupe de transmettre les données s'il est sélectionné.Le deuxième, E1h est un registre en lecture seule, dont U3 s'occupe d'ouvrir ou non la ligne. Il permet à lire les FLAGS du port parallèle. E2h et E3h forment le dernier. Ils sont en écriture uniquement, E2h affecte RESET avec D0 et E3h affecte AUTOFEED avec D1. C'est U4 qui s'occupe de vailder ces lignes. Les résistances R1, R2, et R3 à 10kΩ sont des pull-ups pour des lignes non utilisées. R4 est un réseau de résistances de 10kΩ aussi et sert de pull-down, pour garantir un état par défaut défini sur les lignes du FLAG. C1 à C6 servent à découpler respectivement les ICs U1 à U6. Toutes les portes logiques non utilisées sont misent à la masse pour éviter des perturbations.

Tableaux des registres

Registre de données
D7 D6 D5 D4 D3 D2 D1 D0
Données transmises par packets de bytes.

 

Registre de FLAG
D7 D6 D5 D4 D3 D2 D1 D0
x x x ERROR SELECT PE ACK BUSY

x = inutilisé

Retour au haut de la page

L'écran LCD graphique

Au niveau hardware, l'implémentation de l'écran LCD graphique est très simple. On lit et écrit les données à l'adresse C0h. On lit les états (status) et écrit les commandes à l'adresse C1h. Le bus de donnée est directement lié via le bus FS22-647 à l'écran. Le potentiomètre R6 avec les résitances R1 et R5 permet de régler le contraste de l'écran. R7 sert à régler le rétro-éclairage à LED. On peut choisir de l'activer ou non avec un jumper mis soit sur W3 ou W4. R3 et R4 servent respectivement de pull-down et pull-up. Attention! Ne jamais connecter W3 et W4 en même temps! Un jumper sur W1 ou W2 permettra de choisir si on souhaite utiliser un signal externe pour appliquer un reset sur l'écran. Par défaut, c'est le réseau RC R2,C1 qui doit être connecté à RST. Le temps de montée suffira à assurer un reset suffisament long au départ, et à garantir un état haut par la suite. Ce sont les lignes RD et WR du z80 qui servent directement à spécifier si on est en lecture ou en écriture. le CE est produit par le décodeur d'adresse de périphériques le 74LS138 de la carte mère.

V'e détaillée sur les jumpers
Vue détaillée sur les jumpers - cliquez pour agrandir.

Au niveau hardware, c'est tout. Il n'y a rien de plus, les connections sont très simples. Ceci est dû au fait que tout est intégré dans l'écran, y compris 32 ko de RAM vidéo, de type statique, que l'on peut paginer comme on le souhaite, entre mémoire texte, graphique et ainsi que pour générer des caractères.

Bienvenue sur le FS22-647
Bienvenue sur le FS22-647 - cliquez pour agrandir.

Retour au haut de la page

Le port clavier A/T

Préambule

Cette carte permet de connecter un clavier pour compatible IBM PC-AT ou PS/2, néanmoins, elle ne gčre ni les claviers XT ni USB. Le software de la carte travaille le scan-code set 2.

Carte clavier montée sur print veroboard
Carte clavier montée sur print veroboard - cliquez pour agrandir.

Fonctionnement

Le port clavier dans la norme A/T ou PS/2 édictée par IBM avec la venue de l'IBM PC-AT permet une communication sérielle grâce à 5 fils entre le clavier et le FS22-647. À savoir un VCC de +5VDC (fil 5), un GND (fil 4), un reset, qui est inutilisé ici (fil 3), la ligne de donnée ou data (fil 2) et enfin la ligne d'horloge ou clock (fil 1). Les lignes de data et clock sont à collecteur ouvert, c'est-à-dire qu'il faut les maintenir à un état logique haut, grâce à R1 et R2 de 4.7 kΩ. Les clavier IBM AT étaient munis, à l'origine, d'un micro-contrô intel i8048. Depuis, il existe de nombreux contrôleurs compatibles. C'est toujours lui qui s'occupe de générer le signal d'horloge sur la ligne d'horloge. La fréquence, relativement lente, entre 10 et 15 kHz permet de gérer aisément le clavier. Sur le FS22-647, le clavier est adressable en 60h et lisible en 61h. Les trois portes NAND U4A à U4C permettent de valider l'accès au périphérique indépendament que la requête soit en lecture ou en écriture. C'est U1A qui s'occupe de décoder cela, avec A0 sur sa pin 2.
Si l'accès est en écriture, c'est U3 qui s'en charge, le pulse sur sa pin 9 (clk) est directement géné par la sortie Y0 (4) de U1A, via la porte NOT U4D. D7 sert à transmettre les données rendue en série. D1 permet de soumettre la requête en forçant le clock à 0 avant de le relâcher. D2 et D3 servent à valider la sortie des fils D7 et/ou D1 sur ceux du clavier par U2. En lecture, il n'y a pas besoin de U3, son but étant uniquement de continuer à transmettre la valeur pendant que le CPU effectue d'autres tâches. Y1 (5) de U1A valide directement les lignes d'horloge et données du clavier par U2 et les dépose sur D7 et D1.
Le reste de la carte, sert à permettre le déclenchement de l'interruption, si le clavier tente d'envoyer des données au FS22-647. Le mode d'interruption du z80 choisi, est le mode 0, car il est compatible avec les processeurs i8080 et i8085 d'intel. Cela signifie que l'interruption doit être masquée. C'est-à-dire qu'une fois que la demande d'interruption a été signalée au z80, et qu'il l'a acceptée, il faut placer sur le bus de donnée la prochaine instruction qu'il va entreprendre. Il s'agit là généralement d'un saut à un vecteur d'interruption. Plus concretement Les deux bascules D de U9 servent à permettre ou interdire les interruptions en provenance du clavier. Les portes OR de U6 sont en fait des portes AND en logique basse. Nous avons vu que les lignes de donnée et d'horloge sont aux repos é l'état logique haut. Lorsque le clavier voudra envoyer des données, ces deux lignes vont descendre à 0. Lorsque ça sera le cas, l'interruption sere déclanchée. Une fois que le processeur va y répondre, en mettant M1 et IORQ à 0, U9B va faire passer sa sortie à 1, ce qui va empêcher jusqu'à ce que l'on envoie un 0 à l'adresse 62h, de déclencher une nouvelle interruption. Les lignes du clavier étant toujours à 0, ceci va permettre d'ouvrir U8 sur le bus de donnée et envoyer l'instruction RST 10h au processeur, qui est formé par les résistances R8 à R15. Une fois que le processeur va couper ses lignes M1 et IORQ, la bascule U9A va elle aussi passer un 1 en sortie, ce qui empêchera U8 d'accéder au bus de donnée jusqu'à ce qu'il y soit à nouveau autorisé par une instruction logicielle. Une fois ceci que tout ceci s'est bien déroulé, le z80 va trouver en 10h, la routine d'interruption qui lui permettra de lire le clavier. Il est bien entendu, que lorsque l'on veut écrire des données au clavier, il faut d'abord envoyer un 1 à l'adresse 62h, afin d'empêcher de lancer une routine d'interruption qui n'aurait pas de sens, ou couper les interruptions. Par précaution, il est mieu de couper les interruptions et d'envoyer un 1 aux bascules. Puis de rétablie les interruptions et envoyer un 0 en fin d'écriture.
Quant aux condensateurs C1 à C11, ils servent à découpler les circuits-intégrés de la carte. Leur valeur de 100 nF est standard. R3 à R7, R16 et R17 servent à garder leurs lignes à 1 par défaut.
Il n'y a pas de PCB, car la carte est relativement simple à réaliser. Elle a été entièrement faite sur du veroboard. Faites-en de même ou si vous préférer faire un PCB, envoyez-moi le layout :)

Arrière de la carte clavier enfichable sur le socket du bus FS22-647
Arrière de la carte clavier enfichable sur le socket du bus FS22-647 - cliquez pour agrandir.

Retour au haut de la page

La carte sonore

Description

Son fonctionnement est très simple et repose quasi entièrement sur le générateur de son programmable AY-3-8912 de General Instruments. Le signal d'horloge est divisé par les deux bascules JK (74LS112) de U3. ainsi, avec le jumper, on peut choisir d'envoyer une fréquence de base identique à celle du processeur, ou bien 1/21 fois la fréquence de base ou jusqu'à 1/22. C'est la fréquence choisie par défaut avec la fréquence du processeur à 5 MHz. Le AY-3-8912 se base donc sur une fréquence de 1.25 MHz, et est donc capable de jouer des sons et bruits d'une fréquence de 19 Hz à 78125 Hz. Les three-states de U2 servent à valider l'accès à U1. Les pull-down servent à le maintenir inactif le reste du temps. Le son est filtré en sortie avec R13, R14 et C4 afin d'éviter un trop gros bruit. Toutes les autres résistances sont des pull-ups afin de maintenir stables les états des pins non utilisées sur U1 et devant être à un état logique haut sur U3.

La carte son avec son fameux chip AY-3-8912 de General Instrument
La carte son avec son fameux chip AY-3-8912 de General Instrument - cliquez pour agrandir.

Extrait musical

Voici un extrait des performances (largement sous-exploitées) du chip sonore du FS22-647, au travers d'une célèbre musique de Martin Galway.

Retour au haut de la page

L'alimentation

Mise en garde
Attention, ce montage est relié au secteur. Soyez donc prudent et particulièrement sûr de ce que vous faites. Ne mettez pas inutilement votre vie en danger. Pensez à bien connecter toute masse métalique à la terre. Avenir OpenWork ne saurait être tenu responsable ou engagé en cas d'accident. Vous êtes seuls responsable de ce que vous faites. La conformité aux normes de sécurité électrique dépendra de la façon dont vous réaliserez le montage. Mettez-le dans un boîtier fermé avant de l'utiliser.

Commutateur principal du FS22-647
Commutateur principal du FS22-647 - cliquez pour agrandir.

Présentation

Choisie pour sa simplicité et son apport de courant supérieur aux traditionnels régulateurs LM78xx limités à 1 A en boîtier TO-220. Cette alimentation repose sur le circuit à découpage LM2569T-5.0.

Fonctionnement

Le secteur arrive par le connecteur J1, une protection contre la surintensité est assurée par le fusible F1 avec une valeur à 0.5AT. Le transformateur doit avoir une puissance de 50VA environ et abaisser à 15 VAC. Valeur assez haute, mais très pratique, si par la suite, une alimentation 12 VDC veut être ajoutée. Pour l'instant le +5VDC suffira. Un pont de diode D1, pouvant supporer le courant redressé, est directement filtré par C1 avec ses 1000 µF - Le taux d'harmoniques généré par D1 étant si faible, qu'il n'est pas nécessaire de filtrer la phase. Vient ensuite le régulateur. La sortie est de +5VDC, lissé par le filtre LC (L1, C2). L1 doit avoir une valeur minimale de 33 µH, plus elle est haute, mieux elle lissera. Une valeur trop haute, n'apportant plus d'améliorations. C2 est fixé à 220 µF. D2, une schottky 1N5820 agit comme rectificateur. La LED D3, avec R1 sert à indiquer si l'alimentation est sous tension ou non. La sortie propre et régulée est sur J2.

La carte d'alimentation
La carte d'alimentation - cliquez pour agrandir.

Retour au haut de la page

Ressources

Les datasheets

Vous pouvez télécharger ci-dessous les datasheets utilisés pour la réalisation du FS22-647.

Circuit/Composant Datasheet Taille
z80A-CPU Z8400A.pdf 2'147'824 octets
z80A-SIO/2 um0081.pdf 2'401'861 octets
27128 27C128.pdf 149'780 octets
NEC 43256 D43256BCZ.pdf 236'822 octets
EXO-3C EXO3c.pdf 61'195 octets
LCD Alphanumérique HD44780LCD.pdf 770'258 octets
LCD Graphique T6963C.pdf 1'279'154 octets
LCD Graphique, app. note T6963_App_note.pdf 236'871 octets
Portes NAND 74LS00.pdf 200'396 octets
Portes NOT 74LS04.pdf 61'047 octets
Portes AND 74LS08.pdf 75'766 octets
Portes OR 74LS32.pdf 79'976 octets
Portes XOR 74LS86.pdf 57'396 octets
Octal DEMUX 74LS138.pdf 83'775 octets
Quad DEMUX 74LS139.pdf 118'112 octets
Quad 3-States Buffer 74LS125.pdf 162'184 octets
Octal 3-States Buffer 74LS541.pdf 76'951 octets
D-type FLIP-FLOP 74LS74.pdf 94'496 octets
MAX232CPE MAX220-MAX249.pdf 405'748 octets
Regulator 5VDC LM2596T-5.pdf 753'884 octets
Tous les datasheets datasheets.zip 7'479'354 octets
Tous les datasheets datasheets.tar.gz 7'484'806 octets

Retour au haut de la page

Les fichiers du projet FS22-647

Retour au haut de la page

Sondages

Comment avez-vous connu Avenir OpenWork?
 
 Par un-e ami-e
 Par Google
 Autre
 
Souhaiteriez-vous un forum de discution?
 
 Oui
 Non
 

Valid XHTML 1.1

Version 1.4 - Avenir OpenWork concept - février 2008 - Fait depuis kubuntu Linux
Les marques, logos, services et produits cités dans ce site sont la propriété de leurs sociétés et auteurs respectifs.

Valid CSS!