lundi 21 septembre 2020

The uPF--2.

The Wichit Sirichote Z80 MICROPROCESSOR KIT clone : The uPF--2.

I worked on replacing the Wichit kit with an FPGA version. During this work, I said to myself that the keyboard had to be replaced. On one hand because I think that it is impossible to work under good conditions with the original micro-switches, and on the other hand, the multiplexing has not been correctly implemented and can present big problems in the event of simultaneous pressing of several keys. No protection diode and no phantom key suppression as been placed : 

The Wichit Sirichote original design.

Furthermore, I decided to recreate the keyboard as a separate part. This will allow me to develop the processor board independently. However, I also decided not to use a parallel link because it is not practical at all. I preferred to connect the keyboard with a simple serial cable to the processor board.

There are not many solutions for the choice of keys if you want something 'pro'. So I chose the Cherry type keys. For now, I have only studied the keyboard circuit. Here's what it should look like :

To be continued...



lundi 24 août 2020

The Wichit Sirichote Z80 MICROPROCESSOR KIT (uPF--1 become uPF--2).

The original Z80 kit from Wichit Sirichote :


 

This kit is a very good equipment for learning the principles of digital electronics. But, in the uPF--1 version, I had some issues with downloading files using a PC. After studying the code of the monitor, I realized that the method used for sending and receiving through the serial port is not really appropriate.
In addition, the maximum speed of 2400 baud is really too slow for transferring even small files between the kit and the PC. 

So I wondered if it might not be interesting to study a new version of this kit, more robust and more flexible. And why not, faster too if possible.

So I started to investigate the possibility of transferring all of this kit into an FPGA circuit. The study was not easy at first, because I had to understand  the code of the monitor with precision to determine the general operation of this small computer. But, it is done now : 

The monitor work on the FPGA board.

Closer with a filter on the display of the FPGA board.

Next? the most difficult : implementing a real serial converter for transmission / reception with the PC, and adapting the monitor to this new component. 

[08-24-2020] The new version of SDCC, the V4.0.0, has been successfully tested on the FPGA board. For the occasion I renamed this version "uPF - 2" because it will be necessary to write new parts of code to manage the hardware extensions of this FPGA version.


jeudi 13 août 2020

Home Automation

En période estivale, forcément, le rythme des publications à tendance à baisser. Pour autant, en ce qui concerne ce blog, ce n'est pas vraiment la raison principale de cette légère baisse d'activité.

Non. C'est plutôt que j'expérimente une solution de contrôle et d'automatisation de bâtiments. L'idée est bien évidemment de vérifier un tant soit peu ce qui se passe à l'intérieur des locaux comme l'évolution des températures et autres valeurs de ce type, mais aussi d'en commander le fonctionnement comme le démarrage ou l'arrêt de certains systèmes ou la modification de consignes de fonctionnement.

Tout ceci n'est qu'un petit exemple des possibilités qui s'avèrent pléthoriques et de plus en plus utiles en cette période de mobilité réduite.

L'idée consiste donc à trouver des matériels fiables et des systèmes de mise à disposition des informations sur page web, comme ceci par exemple : 


 

Dans l'exemple ci-dessus, j'ai trois PLCs différents, dont celui affiché en image réalisé par moi-même, qui envoient trois mesures différentes de température. l'objectif étant de vérifier le bon fonctionnement de ces systèmes, seule la température affichée par mon PLC est pertinante. Les autres valeurs ne sont la que pour validation de la chaîne de fonctionnement des autres PLCs utilisés. En fait c'est le seul appareil permettant de connecter facilement un capteur de température 1-WIRE. Pour les autres graphiques, le premier provient d'une sonde analogique faite pour mesurer des basses températures n’excédant pas 24° et le deuxième provient d'une valeur fixée par programme donc par définition stable.

Différents protocoles sont utilisés mais l'action sur le switch (bouton du bas) se fait par abonnement à un broker MQTT. 

Tout cela fonctionne parfaitement. J'en suis à tester la 'reprogrammabilité' des PLCs directement par réseau afin d'obtenir un maximum de flexibilité. 

Sujet passionnant et fort utile. Le plus difficile, en fait, consiste à faire en sorte que tout ce fonctionnement n'émane pas d'une 'usine à gaz' propre à planter au moindre petit grain de sable! 

Dans les semaines à venir, je vais aussi tester quelques autres capteurs d'ambiance et d'énergie et puis progresser dans l'établissement d'une passerelle sans fil plus destinée par exemple à l'agriculture afin de surveiller les paramètres climatiques. L'utilisation d'un système sans fil fiable n'est pas, la-aussi, aussi trivial que l'on pourrait le penser. Les solutions toutes faites ne sont pas obligatoirement adaptées à ce type d'utilisation. Bref, encore un vaste champ d'investigation mais ayant pratiqué divers protocoles et diverses fréquences de fonctionnement depuis bien des années, je pense avoir aujourd'hui trouvé une solution satisfaisante...

Ce sujet semble assez éloigné de mes sujet habituels que sont les synthés, l'audio ou le rétro-computing, mais bon dans la description de ce blog, il y a aussi: "etc..." ;-)


vendredi 24 juillet 2020

Colour Maximite 2

Après avoir passé une commande pour le module processeur à base de STM32H7 chez Waveshare ainsi qu'une autre commande pour le circuit imprimé directement chez l'éditeur de la revue australienne Silicon Chip, j'ai reçu ces deux éléments de base quelques jours plus tard : 


Il n'y a plus maintenant qu'à se procurer l'ensemble des autres composants à placer sur le circuit imprimé principal pour être en mesure de démarrer la construction de cet ordinateur fort prometteur.

Parce que, comme il est indiqué sur la couverture du magazine ci-dessus, il s'agit d'un ordinateur que l'on peut monter soi-même, certes, mais surtout que l'on peut programmer soi-même. Même s'il s'agit du langage Basic qui est utilisé ici, la puissance de ce langage adapté à ce type de matériel (j'en sais quelque chose, j'ai eu l'occasion de tester les versions précédentes sur des processeurs pourtant moins rapide) offre un potentiel d'expériences incroyables, notamment dans l'univers de l'embarqué.

Avec ce type de matériel, nous sommes loin de la culture de l'ignorance perpétuelle telle qu'imposée depuis des décennies par microsoft (à son unique bénéfice), mais bien d'un matériel en mesure de servir le potentiel créatif de tout un chacun. Au jeune qui souhaiterait se lancer dans l'aventure, qu'il ignore les programmes archaïques et propagandistes de l'Education Nationale, et qu'il commence donc par quelque chose d'un peu plus sérieux et utile que ça :

Exemple de robot et de son langage de (non) programmation associé que l'on retrouve aujourd'hui dans les programmes de l'Education Nationale.

Au début des années 80, il existait le langage Logo, utilisable sur une base matérielle présentée sous la forme d'une tortue :


J'ai du mal à imaginer les générations de programmeurs de talent qui ont fait de la france la première puissance informatique mondiale. Bien au contraire, mis à part quelques ingénieurs de haute volée officiant dans des domaines extrêmement pointus tel que l'avionique, le pays est  devenue une colonie numérique, occupée par les puissances étrangères jusqu'à aujourd'hui majoritairement américaines, très prochainement Chinoises! 

Heureusement, en ce qui me concerne j'ai débuté en assembleur sur Z80 puis en basic sur ZX81. Cela n'inscrit pas du tout dans l'esprit le même rapport à la machine. Cela ne m'a pas réussi professionnellement, mais au moins cela me permet d'appréhender le monde technologique qui m'entoure ainsi que la propagande désastreuse et bien évidemment mensongère dont en font les politiques intellectuellement corrompus!

  

jeudi 2 juillet 2020

Color Maximite 2

La saga des Micromite/Maximite a commencé il y a maintenant neuf ans, en 2011. Ce n'est que quelques années plus tard, en 2014 c'est à dire quasiment au tout début de ce blog que j'en ai parlé, en septembre 2014.

A cette époque, il existait le Maxite de base et le Maximite couleur :

Le Maximite monochrome.
Le Maximite couleur.
Plus tard, sont arrivés les Micromite, plus dépouillés mais toujours avec la même puissance de traitement. J'avais d'ailleurs réalisé une carte d'étude permettant un emploi aisé de ce type de processeur :



La caractéristique principale de la famille Micromite/Maximite est d'utiliser le langage BASIC comme moyen de programmation. Certes, cela peut faire sourire puisqu'il s'agit d'un langage quasiment oublié pour cause d'obsolescence programmée, de manque de performance et de mauvaise réputation puisque associé irrémédiablement aux machines du début des années 80.

Impossible en effet de prendre au sérieux un langage de programmation collant aux touches du ZX80 :

Source Wikipedia.
De mon avis personnel, le langage Basic n'est ni meilleur ni pire que n'importe quel autre langage. Le PHP ressemble à mon sens exactement au Basic... en pire! Il est juste particulièrement adapté à certaines situations.

Basic est particulièrement intéressant pour l'apprentissage de la programmation. Il est rapide à comprendre et à maîtriser et permet donc une mise en situation rapide. Il peut être totalement 'non structuré', ce qui permet une mise en évidence immédiate de l’intérêt de structurer son source et par la-même ses pensées. Et surtout, il permet de passer rapidement d'une idée à un prototype en autorisant des tests d' algorithmes sans devoir partir sur du matériel compliqué et des langages comme l'assembleur ou le C++, et sans avoir à tenter de pénétrer les arcanes insondables de la programmation sous Windows.

Evidemment, Basic implémenté sur une 'petite' machine sera forcément interprété, donc lent. Oui mais... Dès la fin des années 80, des processeurs rapides permettaient déjà une exécution plus véloce des programmes écrits par exemple sur un Intel 8052AH Basic :


en remplaçant ce circuit par un équivalent Dallas environ 10 fois plus rapide à 33MHz:


Ces solutions ne permettaient cependant pas l'écriture de gros programmes du au fait de sévères limitations matérielles  : peu d'entrées/sorties, pas de sortie vidéo, pas de sortie son etc... Hormis le Visual Basic proposé par Microsoft sous Windows, dès le début des années 90 ce langage était définitivement abandonné.

L'utilisation de processeur de type PIC permetta à Geoff Graham de proposer en 2011 son 'fameux' Maximite. L'appareil était équipé d'un port d’extension permettant la connexion de diverses interfaces, d'une sortie vidéo certes limitée mais permettant la-aussi une interactivité facilité avec l'utilisateur, ainsi qu'un port clavier de type PS2. Cette 'machine' ne peut s'apparenter aux Arduinos qui restent des matériels embarqués nécessitant un ordinateur sur lequel est installé le système de développement et les outils de téléchargement du programme vers la carte. De plus, Arduino se programme en C++ édulcoré (la majorité des caractéristiques objets du langage est passée sous silence). Sauf pour ceux désireux de développer une librairie particulière qui devront se conformer à sa mise à disposition sous forme de classe.

A l'époque, j'avais effectué un rapide test de performances du Basic interprété fonctionnant sur un PIC32MX à 40MHz par rapport à un SHARP PC1500A, une machine considérée comme professionnelle à l'époque.

2 200FF en 1984 soit 335€ ou dit autrement, plus d'un demi SMIC en 1984 (~550€)

Une simple boucle comptant de 0 à 100 000. J'avais obtenue ce résultat...


Le Basic du Micromite était donc environ 130 fois plus rapide que celui du SHARP.

Bien que les Micromites/Maximites n'aient pas vraiment rencontré de succès dans nos contrées, j'avais cependant nourri quelques espoirs de voir la machine décoller avec l'annonce par Microchip d'un successeur au PIC32MX, à savoir le PIC32MZ. Ce successeur de la famille MX offrait un nombre plus important de périphériques et surtout une vitesse d'exécution plus élevée.

Mais hélas, depuis 2015 il ne se passait plus grand chose autour de ce système, hormis la publication de nouvelles versions du Basic.

Et puis, il y a quelques jours de cela est apparu l'annonce du Color Maximite 2. Cette fois, la machine est basée sur un processeur ARM et les caractéristiques sont impressionnantes (informations source) :

Processor
32-bit ARM Cortex-M7 at up to 480MHz with 2MB of flash. 1MB on-chip RAM plus 8MB off-chip RAM for BASIC variable storage and video pages.
BASIC
Built in full featured BASIC interpreter with double precision floating point, 64-bit integers and string variables, long variable names, arrays of floats, integers or strings with multiple dimensions, extensive string handling and user defined subroutines and functions
Program Editor
Full screen editor includes colour coded syntax, search and copy, cut and paste.
Memory
516KB for the BASIC program, enough for large complex programs (typically 25,000 lines or more).  5MB RAM for variables, arrays and buffers
Speed
Typically executes programs at 270,000 lines per second.
Display
Colour VGA output with VGA standard timing.
VGA Resolutions
800 x 600 (default), 640 x 400, 320 x 200, 480 x 432 and 240 x 216
The last two emulate the resolutions available on the original Colour Maximite.
Graphics Colours
8-bit (256 colours; default), 12-bit (4096 colours plus 16 levels of transparency) or 16-bit (65,536 colours).
Keyboard
Standard USB keyboard with either US or UK layout.  Can be a wireless keyboard (USB).
Storage
SD Cards up to 128GB formatted in FAT16, FAT32 or exFAT
Graphics
Set pixels, draw lines, boxes, circles, etc.  Features include BLIT, Sprites, multiple video layers (with transparency).  Rotate and scale images.
Images
Load images in BMP, JPG, PNG and GIF (including animated) formats.  Images can be loaded anywhere on the screen and be scaled and rotated.
Audio
Stereo audio output for amplified speakers. Can play WAV, FLAC and MP3 files, computer generated music (MOD format), robot speech and sound effects as well as generate precise sine wave tones
Compatibility
Generally compatible with the Maximite and original Colour Maximite.  Special legacy mode for older graphics commands.
Games
Extensive features for creating computer games. These include multiple video planes, support for Blits and Sprites, the ability to create computer generated music, sound effects and computer generated speech.
Nunchuk
Full support for up to three Nunchuk games controllers with one connected via the front panel..
External I/O
Twenty eight input/output pins with 12 capable of analog input. Connector is compatible with RPi Hats.  Built in support for an IR remote control and temperature and humidity sensors.
Protocols
Communications protocols supported include I2C, asynchronous serial, RS232, IEEE 485, SPI and 1-Wire.
Remote Console
Supports serial over USB protocol so a desktop PC or laptop can access the BASIC console for entering and running programs.
PC Integration
Programs can be easily transferred from another computer (Windows, Mac or Linux) using the SD card, XModem protocol or by streaming the program over the serial console input.
Clock
Battery backed clock will keep the correct time with the power disconnected.
Firmware Updates
The firmware can be updated via USB with a desktop or laptop computer running Windows, MacOS or Linux.
Power
5 volts at approx 220mA typical (from a USB port or charger).

Tout cela, proposé sur une carte aux dimensions somme toute réduites :



La particularité de cette 'première' version du Color Maximmite 2, consiste en l'utilisation d'un module processeur disponible chez WaveShare. L'avantage de cette solution est de permettre un montage plus facile de la machine. Souder un tel processeur requiert en effet un minimum de savoir faire et d'expérience en composants cms.

Il est bien évidemment très intéressant de tester une telle machine. Je ne la possède hélas pas pour le moment. Je prévois cependant d'en monter un exemplaire rapidement. Cet ordinateur compacte et puissant possède tous les attributs nécessaires à la mise en place d'un banc de tests automatisé tel celui que j'ai du développer sous Windows pour la qualification du convertisseur CV/Gate précédemment évoqué sur ce blog.

Cette machine ne possède absolument pas d'environnement fenêtré et donc aucun dispositif de pointage. Il me faudra donc faire avec cette limitation. C'est le seul point un peu négatif que je vois. Il est vrai que pouvoir pointer un élément sur l'écran pour en changer la valeur est une fonctionalité bien pratique. Peut-être que l'utilisation du port joystick permettra de palier ce manque.

En attendant, voici quelques vidéos que j'ai pu trouver sur Internet au sujet de cette nouvelle version du Maximite :







Intéressant, n'est-il pas?


mardi 9 juin 2020

R2R diy Audio Dac.

Un peu de curiosité : quel rendu sonore peut bien produire un circuit convertisseur audio-numérique de fabrication personnelle.

Mise en garde : pas de débat théorique sur le sujet ici. Ça n'est pas le but. 

J'estime que la bataille en terme de qualité 'pure' sonore est terminée depuis le milieu des années 90. Depuis, les fabricants de matériels ne proposent plus grand chose d'innovant, les fournisseurs de composants n'en faisant pas plus si ce n'est augmenter le nombre de bits et la fréquence de conversion des composants, sans réellement d'intérêt pour le matériel grand public.

Le problème, à mon sens, réside dans le format inchangé du CD audio non tant en terme de résolution qu'en terme de fréquence de mise à disposition des échantillons sonores qui reste 'coincée' à 44,1 KHz, ce qui oblige toujours à la mise en place de filtres à sur-échantillonnage dans le but de faciliter la construction des filtres analogiques de sortie (suppression du bruit d'échantillonnage numérique).

Pour ceux qui souhaiteraient un peu de théorie, visitez les vidéos de JiPi :



Pour améliorer la restitution sonore, les principales sources potentielles de bruit et de distorsion ont depuis longtemps été 'quasi éliminées' :

  • Erreur de bruit analogique (qualité des alimentations et de conception des matériels).
  • Erreur de quantification des convertisseurs.
  • Erreur ou aberrations des filtres à sur-échantillonnage.
  • Instabilité des signaux d'horloge.
  • etc...

Je ne parlerai pas des tentatives de nouveaux formats de transport de l'information comme le SACD et son flux DSD, et de la technologie Delta-Sigma des convertisseur numériques-analogiques qui, outre le fait d'avoir apporté un semblant de nouveau Graal commercial, dans les fait n'apportait pas vraiment grande révolution dans la restitution sonore si ce n'est un coup de production 10 fois moins élevé que les convertisseurs de type R2R de l'époque, pour le grand bien financier des actionnaires.

Et pour enfoncer le clou, le très ancien convertisseur Phillips TDA1541 demeure une référence en terme de conversion numérique analogique, malgré le (ou à cause du) fait que ce soit un convertisseur de type R2R.

https://tryphonblog.com
Ce TDA 1541 faisait suite au TDA 1540 (14 bits de résolution) :

Image récupérée sur le Web.

De tous les lecteurs CD que j'ai pu tester, je n'en ai gardé que deux. Un CD104 à TDA 1540 :

http://www.lampizator.eu
et un lecteur CD Arcam Delta 70.2 à TDA 1541 de type S1 (une couronne) :



Tout ceci pour en arriver au fait qu'il y a deux façon d'envisager la restitution sonore. Soit par l'aspect technique donc purement objectif, soit pas l'aspect 'plaisir' du rendu donc purement subjectif. A partir du moment ou le taux de distorsion du signal reste dans des proportions raisonnables (inférieur à 1%) et que le rendu est plaisant, j'estime que cela vaut mieux que d'avoir engagé de grosses sommes dans un système techniquement presque parfait mais à l'écoute ennuyeuse, voire pénible.

Le champ d'expérimentation au niveau amateur existe toujours dans le domaine ou cela reste possible bien évidemment. Puisqu'il n'est pas envisageable de façon 'artisanale' (quoi que...) de créer soi-même ses propres circuits intégrés, il reste possible de réaliser des circuits de conversion de type R2R 'à la main', sur circuit imprimé.

C'est sur cette base que Monsieur Vincent Brient à commencé à concevoir il y a quelques années son Totaldac :


Cet appareil est équipé de résistances de très haute précision et de circuits intégrés logiques de base (bien que j'imagine que ce design ait évolué depuis les débuts) afin de recréer le fonctionnement d'un circuit intégré R2R de type TDA1541. Je n'ai hélas jamais pu écouter ce type de machine.

J'aurais pu me lancer dans la réalisation de ce type de DAC mais le temps a passé et je me suis orienté vers d'autres sujets. Jusqu'à ce que je découvre le projet de Dilshan R Jayakody concernant la réalisation d'un DAC 24 bits stéréo à la base pour Raspberry Pi. Ce design est cependant suffisamment flexible pour être utilisé en tant que DAC standard puisqu'il possède une interface I2S, et ressemble fortement au Totaldac si ce n'est que l'ensemble de la logique est contenue dans un CPLD et que les résistances sont de type standard donc d'un coût raisonnable, même en tolérance de 0,1% comme celles que j'ai choisies :


Ce circuit étant libre de droit, et toutes les ressources étant également disponibles sur le dépôt Git du projet, j'ai décidé d'en réaliser un exemplaire. La majorité des composants passifs de ce circuit sont en boitier cms de type 603. D'habitude cela ne me pose pas de problème de souder à la main quelques composants cms en boitier 805 (taille au dessus), mais dans le cas présent, souder au fer standard presque une centaine de boitier 603 me semblait être une 'torture' inutile. Avec le circuit imprimé, j'ai donc aussi demandé la réalisation du pochoir correspondant. Quelques semaines plus tard, j'ai donc reçu de quoi réaliser le montage :

Le circuit imprimé.

Le pochoir correspondant.
La réalisation du circuit s'en trouve grandement facilitée puisqu'en premier lieu il suffit de placer de la pâte à souder sur les plots du circuit imprimé en s'aidant du pochoir. L'opération s'effectue facilement même en n'ayant pas pris le soin de conserver ce pochoir parfaitement plat sur le circuit imprimé :


Cette façon de faire un peu 'cavalière' aura pour effet de déposer un peu trop de pâte sur les pads du CPLD. Je le savais, je savais aussi qu'une petite finition à la tresse à dessoudé aurait réglé le problème. Ce qui fût le cas :


Une fois les composants cms montés, il ne restait plus qu'à placer les quelques composants traversants comme les gros condensateurs de filtrage, les connecteurs et les deux résistances ajustables. A noter que la version des fichiers actuellement disponibles ne correspond pas totalement à l'image que Dilshan R Jayakody a publiée sur son blog puisque les deux condensateurs de sortie de blocage de la composante continue ne sont pas implémentés. Ce qui n'est pas plus mal puisque d'une part il se peut q'ils ne soient pas obligatoirement indispensables puisque souvent les entrées des amplificateurs en sont déjà pourvus, et que d'autre part cela permettra de placer des condensateurs de meilleur qualité pour effectuer des essais au casque par exemple.

Même si l'assemblage de la carte semble s'être bien déroulé, la première mise sous tension est toujours quelque peu angoissante :



Fort heureusement, pas de 'magic smoke' au démarrage. Le CPLD reste froid. Il ne reste plus alors qu'à programmer ce gros circuit pour qu'il réalise la fonction de réception de signal I2S et qu'il envoi directement aux résistances les signaux correspondant. Pour cela il reste encore à connecter le montage à un PC équipé du logiciel Altera (Intel) via l'interface de programmation adéquate :


Une fois la connexion effectuée, il suffit d'installer la version 18.1 du logiciel Quartus Lite puis à lancer la compilation du projet :



La compilation se déroule sans problème et génère le fichier nécessaire à la programmation effective du CPLD. Le 'programme' est écrit en Vérilog et non pas en VHDL dont j'ai plus l'habitude mais comme l'on dit : si vous en connaissez un, vous comprendrez l'autre!

L'ensemble du projet n'utilise que la moitié des ressources logique du CPLD et presque les trois quart de ses pattes. Le composant semble donc adapté à l'application envisagée.

La programmation du composant se déroule, elle aussi, sans difficulté :



Et voilà! Le circuit est 'potentiellement' opérationnel. Il ne reste plus qu'à le connecter à une source I2S et à le brancher sur un amplificateur audio pour en tester le résultat, non sans avoir au préalable réalisé quelques tests aux instruments de mesure sur l'état de ses sorties.

Oui, sauf qu'aux premiers tests, rien ne se passa. Dès le départ j'avais une petite idée sur le problème. L'oscillateur de 50MHz possède un brochage quelque peu étrange. Un peu trop de pâte à souder avait créé une petite connexion parasite. La aussi, un peu de tresse à dessouder a réglé le problème.

Pour effectuer mes tests, il me fallait donc un générateur de bus I2S. L'occasion de ressortir ma carte d'évaluation Wolfson WM8740 :


Je ne sais plus depuis combien de temps je possède cette carte mais cela fait un bon bout de temps. Une bonne vingtaine d'années je pense. Elle a l'avantage de posséder un convertisseur de bus SPDIF vers différentes formats dont l'I2S, grâce à un CS8414. D'ailleurs ce circuit est aujourd'hui obsolète, la date de son datasheet annonce 1998!

Il va sans dire que pour tester un flux SPDIF de type Compact Disc ce récepteur SPDIF convient tout à fait. Le système de test consiste donc en une source SPDIF (une sortie de PC) et le récepteur SPDIF qui envoi directement ses signaux vers la carte DAC R2R. A noter que j'ai du installer deux diodes en série sur chaque signal du bus I2S de façon à ce que leurs niveaux haut passe de 5V à 3,6V. Ce n'est pas les 3,3V imposés par les entrée du CPLD, mais cette légère surtension ne pose pas de problème :


La petite carte en bas à gauche est une carte d'adaptation de tension des signaux. A l'origine, j'avais prévu de m'en servir pour convertir les signaux de 5V en provenance de la carte Wolfson vers les 3,3V des entrées du CPLD. Evidemment, cette carte ne monte pas assez en fréquence et déforme totalement les signaux de données et d'horloge au nouveau bits, d'ou le remplacement par le système de diodes.

J'ai aussi disposé deux gros condensateurs de type MKS de 2,2µF en sortie qui, avec les 560 Ohms de résistance de sortie des AOP, permettent de descendre suffisamment en fréquence pour restituer un signal de bonne qualité.

Evidemment, difficile de rendre compte de la qualité de sortie de ce DAC sans en faire au moins une capture de la sortie audio. Au casque le signal sonore est absolument parfait. Et pourtant nous ne sommes 'qu'en qualité CD', sans le moindre sur-échantillonnage, sans filtre efficace de sortie des harmoniques d'échantillonnage, ni la moindre correction de jitter...

Conclusion (provisoire).  Dans la conclusion de son article, Dilshan R Jayakody indique que son DAC fournit un signal de bonne qualité. Force est de constater qu'effectivement, c'est le cas. Il me reste à effectuer une capture de la sortie de ce DAC, et puis à éventuellement étudier quelques améliorations possibles de la qualité de sortie audio.

Cette petite digression audio-numérique sentait bon le milieu des années 90 ;-)


jeudi 28 mai 2020

Interface MIDI / CV-GATE terminée!

Cette fois ça y est, l'interface est enfin finalisée. Il m'a fallu un peu de temps pour peaufiner la programmation du système :


L'interface propose 8 canaux CV-GATE.

Quatre switchs permettent de modifier le comportement de l'interface.

  • 1 switch permet la sélection des canaux MIDI bas (1 à 8) ou haut (9 à 16).
  • 1 switch permet le basculement du mode monophonique / polyphonique. On passe alors de 8 canaux MIDI, à 8 notes possibles sur le canal 1 ou 9.
  • 1 switch permet le mode DUAL. La capacité de l'interface en terme de canaux MIDI est alors divisée par 2 car chaque sortie est doublée. 
  • 1 switch permet de modifier le comportement des sorties CV, soit en mode note-ON / note-OFF, soit en mode trigger.

La linéarité de l'interface est très bonne. Pour l'instant elle est à la norme 5V/octave mais peut être câblée en 10V/octave au besoin, avec étendue d'un clavier 61 notes standard.

Le développement de cette interface n'a pas été très facile. Passer d'une idée simple à la base à une solution opérationnelle et fiable tout en sélectionnant au mieux les composants afin de garder un design simple et efficace n'est en fait, pas aussi simple que cela!

De plus, pour ce genre de réalisation, il faut aussi mettre en place tout un environnement de test sans lequel il est impossible de progresser sérieusement dans le développement et éventuellement le débug. Cela faisait très longtemps que je n'avais pas programmé d'interface sous windows. J'ai développé sous Dev C++ :


Cet environnement est largement obsolète mais pour développer du natif windows cela reste une des solutions les plus simples face à l'usine à gaz que sont les outils de développement microsoft, et au moins cela m'a permis d'élaborer mon environnement de test 'assez' rapidement:


Je me demande si l’environnement de programmation JAVA ne serait pas plus adapté à ce type d'application. J'ai installé avec succès l'environnement Eclipse de développement Java en version 64 bits...