Le vidéo suivant monntre comment programmer la carte NUCLEO-8S207K8 avec le binaire de STM8 Tiny BASIC. Cette vidéo est destinée aux utilisateurs de Windows. La procédure sur Linux est très semblable.
Le vidéo suivant monntre comment programmer la carte NUCLEO-8S207K8 avec le binaire de STM8 Tiny BASIC. Cette vidéo est destinée aux utilisateurs de Windows. La procédure sur Linux est très semblable.
Je viens de créer une pré-release pour la version 3.1 de STM8 Tiny BASIC. Cette version ajoute des commandes pour le contrôle PWM ainsi que pour le contrôle des servo-moteurs. En fait puisque les servo-moteurs sont contrôlés par PWM il s'agit du même périphérique et des même sorties. La seule différence est que les commandes SERVO configure la minuterie avec les paramètres spécifiques au servo-moteurs.
Les manuels de référence français et anglais sont maintenant disponibles en format PDF dans le dossier docs.
En plus de ça, une réécriture assesz importante du code a étée effectuée pour réduire la taille et améliorer la performance de l'évaluation des expressions arithmétiques.
Une nouvelle version de Tiny BASIC sur carte NUCLEO-8S20X est maintenant en ligne. Cette version supporte maintenant 2 cartes NUCLEO
Lorsqu'une de ces cartes est branchée sur le PC le programmeur STLINK inclus sur ces cartes crée à la fois un disque virtuel qui apparait sous le nom NOD_8S207 ou NODE_8S208 selon la carte choisie et ajoute un port sériel. Pour l'installation du firware sur la carte
Suppossons que vous utilisez Teraterm sur Windows. En lançant Teraterm la fenêtre nouvelle connexion s'ouvre. Il faut choisir Série avec le port identifié COMx STMicroelectronics STLink Virtual COM Port.
Regardez sur Youtube pour un plus grand affichage.
J'ai continuer le développement stm8_tbi. J'ai fait beaucoup de changement ce qui explique que le numéro de version passe de 1.x à 2.0. Le système est de moins en moins un TinyBASIC et ressemble de plus en plus à Microsoft BASIC tel qu'on le retrouvait sur de nombreux ordinateurs 8 bits des années 80, tel que les Apple II, Commodore C64,VIC-20,PET et les Tandy TRS-80. Je n'ai cependant pas implémenter les calculs sur virgule flottante mais les entiers sont passés de 16 bits à 24 bits.
Pour connaître tous les changements il faut consulter le manuel de référence.
Il y a 2 erreurs dans le vidéo.
Dernièrement je me suis intéressé à l'électronique utilisée dans le célèbre ordinateur PDP-8 (Programmable Data Processor) première génération de Digital Equipment Corporation (DEC). Le premier PDP-8 a été mis en marché en 1965 et il a été produit jusqu'en 1978, sur plusieurs générations technologiques. La première génération utilisait des circuit logiques DRL (Diode-Resistor-Logic) et DTL (Diode-Transistor-Logic) et une mémoire à tores magnétiques.
Puis lorsque les circuits intégrés TTL (Transistor Transistor Logic) ont été mis en marché Digital a fabriqué une version dont les circuits étaient conçu avec cette technologie. Cependant il a fallu attendre les dernières années de sa production pour que la mémoire à tore magnétique soit remplacée par de la mémoire silicium RAM en circuits intégrés. Lors de ma dernière année de collège (1977-78) j'avais un cours consacré au PDP-8. On apprenait à le programmer en assembleur et on étudiait ses circuits logiques. Ceux de la version TTL.
En 1975 la compagnie Intersil a mis en marché un microprocesseur en technologie CMOS le IM6100 qui répliquait le CPU du PDP-8. Il a été utilisé dans certaines machine comme le VT78.
De 1965 à 1977 la technologie a donc permis de passer d'un mini ordinateur pesant 113Kg à un micro-ordinateur pesant sans doute moins de 30Kg et qui tenait dans le boitier d'un terminial vidéo VT521. Et la plus grosse part de ces 30Kg revenait au tube cathotique utilisé pour l'affichage.
Mes recherches m'ont permises de retrouver plusieurs manuels publiés par DEC à cette époque sur le site bitsavers.org
J'ai donc entrepris d'étudier les circuits en question pour en comprendre le fonctionnement. Selon le site suivant https://www.pdp8online.com/straight8/functional_restore.shtml le PDP8 qu'ils ont restauré contenait
Mon intention dans cet article est d'analyser le fonctionnement de ces circuits logiques. Non pas dans leur complexité mais seulement les circuits de base. Car l'ordinateur était construit à partir d'un petit nombre de cartes logiques de base utilisées en grand nombre et interconnectées entre elles pour former la complexité de l'ordinateur. Comme mentionné plus haut il y en avait 320. C'est un peu comme si aujourd'hui on voulait reconstruire le PDP-8 avec des circuits intégrés de la série 74HCxxx et qu'on utilisait seulement des AND, OR et NON en les combinants ensemble pour former des flipflops, des latchs, des décodeurs, un ALU, etc. C'est d'ailleurs ce qu'ils ont fait dans les dernières générations en utilisant des circuits intégrés TTL au lieu d'assemblage DTL.
L'objectif principal de Digital en concevant le PDP-8 était de réduire le coût au minimum. Ils devaient donc choisir une architecture très simple appellée architecture à une adresse.
Comme on le voit il n'y a que 4 registres de 12 bits et 1 registre de 1 bit LINK. Comme vous le voyez il n'y a pas de pointeur de pile. Lors d'un appel de sous-routine l'adresse de retour était enregistrée à la première adresse de la sous-routine. Les programmeurs devaient donc réserver cette adresse dans ce but. Ceci exclus la possibilité de faire des appels récursifs. En comparaison le MOS 6502 avait 5 registres 8 bits et 1 de 16 bits pour le compteur ordinal.
De plus le PDP-8 n'avait qu'un seul bus de 12 bits pour lire et écrire dans les registres. Comme on le voit le compteur ordinal n'avait que 12 bits lui aussi donc ne pouvait adresser que 4096 mots de mémoires. De base le système se vendait donc avec 4096 mots de mémoire mais grâce à un système de sélection de plan (bank) mémoire il était possible d'ajouter des plans de mémoire en tranche de 4096 mots. Évidemment 1 seul plan (bank) était visible à la fois. En étudiant cet ordinateur je ne pouvais m'empêcher de faire le rapprochement avec le CPU de la ligne de base des microcontrôleurs PIC qui eux aussi codent les instructions sur 12 bits et divisent la mémoire RAM en plans (banks) de 128 mots. Car sur les PIC les instructions qui accèdent la mémoire code l'adresse sur 7 bits.
Ceci dit je ne m'attarderai pas plus que ça sur l'architecture de programmation du PDP-8. Voici la schématique d'une carte comprenant 7 inverseurs et une autre comprenant 3 flipflops.
Si on s'attarde à la carte des inverseurs (fonction logique NON) on constate qu'il y a 2 alimentations, l'une de +10 volts et l'autre de -15 volts. L'alimentation de +10 volts est reliée à la base de chaque transistor par une résistance de 100Kohm. Cette alimentation ne joue aucun rôle dans le fonctionnement logique des portes. Son seul rôle est de réduire le temps de commutation des transistors lors du cutoff. En effet lorsqu'un transistor est en conduction une charge électrique est accumulée dans la jonction base-émetteur. Au moment où le courant de la base est coupé cette charge doit-être dissipée. Grâce à l'alimentation +10 volts et la résistance de 100Kohm cette charge est draînée plus rapidement donc le transistor commute plus rapidement vers le cutoff. Puisque cete partie du circuit n'est pas utile à l'analyse de la fonction logique elle sera ignorée ultérieurement.
À droite du circuit on note la présence des diodes D8-D11 ainsi que le la résistance R15 branchées en série entre le GND et le -15 volts. La tension au point 6 est d'environ 4*-0,7=-2,8 volts. À partir du point 6 les diodes D1-D7 se branche au collecteur de chaque transistor. Le rôle de ce circuit est de limiter la tension au collecteur lorsque le transistor est en cutoff à environ 5*-0,7=-3,5 volts. Donc lorsque le transistor est en saturation le voltage au collecteur s'approche de 0 volts et lorsqu'il est bloqué elle s'approche de -3,5 volts. Ces valeurs correspondent aux niveaux logiques de fonctionnement de l'ordinateur. On retrouvre le même circuit sur toutes les cartes qui implémentent des fonctions logiques. Pour l'analyse du fonctionnement logique des circuits on peut ignorer ce limiteur de tension.
En éliminant de notre analyse le circuit +10 volts et le limiteur de tension au collecteur on va pouvoir redessiner un forme simplifié des circuits logiques pour fin d'analyse.
Une fois épuré un inverseur, ou si vous préférez la fonction logique NON correspond au circuit suivant:
Si l'entrée (Input) est mise au GND le transistor Q1 bloque car le courant ne circule plus dans la base. En effet pour que le courant circule dans la base de Q1 il faut 3*-0,7=-2,1 volts au point jct1. Hors si l'anode de D1 est à GND il n'y a que -0,7 volts au point jct1. Le transistor étant bloqué on retrouve -3 volts à la sortie (Out). Par contre si on laisse flotter l'anode de D1 ou si on la met à un voltage inférieur à -2,8 volts le courant peut circuler à travers R1,D2 et D3 dans la base de Q1. Le transistor entre alors en saturation et le voltage à sortie monte à 0 volts. En terme logique on obtient donc la fonction NON.On peut obtenir une fonction NON ET en ajoutant des diodes aux points de jonctions jct1 comme ceci.
On peut ajouter d'autres diodes si on a besoin de plus d'entrées. Avec des portes NON et NON ET on peut construire n'importe quel circuit logique aussi complexe soit-il. On dit que ces 2 fonctions combinées ensemble sont Turing complete2. On pourrait dire que ce sont les briques LEGO de l'informatique3.
En ce qui concerne la carte de 3 flipflops (bascule bistable). Ça a l'air compliqué n'est-ce pas? Il n'y a que 6 transistors mais 46 diodes. Vous comprenez maintenant pourquoi il y avait tant de diodes dans cet ordinateur. Ce type de circuit ne s'appelle pas DTL pour rien. Le D vient en premier. Première constatation les transistors sont de type PNP et l'alimentation principale est donc négative à -15 volts.
Puisque la carte comprend 3 circuits identiques et une partie commune j'ai simplifié en extrayant un seul flipflop. J'ai aussi enlevé le circuit à +10 volts.
La ligne verticale grise sépare la partie du circuit commune aux 3 flipflops. Cet arrangement de diodes ne sert qu'à limiter le voltage au collecteur des transistors à -3.5 volts environ (clamping) à travers les diodes D1 et D6. Les deux valeurs logiques était donc représentées par des tenstions de 0 volt et -3 volt.Le flipflop le plus simple est le RS-flipflop. On le construit en utilisant 2 portes NAND (NON ET) comme ceci.
Cependant ce RS flipflop a été modifié quelque peu. Le NAND de droite a été modifié pour ajouter une entrée spéciale constituée des composants C1,R7,R8,D10..D14,D47,D48. Selon la terminologie de Digital ce circuit spécial s'appelle un DCD (Diode-Capacitor-Diode). Ça fonction est de changer l'état du flipflop mais avec un délais et sous contrôle d'une impulsion.
Voici une représentation séparée du circuit pour analyse.
Le circuit a donc 3 entrées et une seule sortie qui va à la base d'un transistor Q2 du flipflop en passant par la diode D10.
Si on installe un circuit DCD sur chacun des transistors du flipflop on peut configurer celui-ci pour fonctionner comme un toggle flipflop.
Si on branche les points d'entrrées E et L à 0 volt et qu'on branche les points d'entrées D et K ensemble en les maintenant à -3 volts. Chaque fois qu'une impulsion positive sera envoyée aux points D,K le flipflop va basculer d'état. C'est ce qu'on appelle un toggle flipflop. Si un train d'impulsions de fréquence Fi est envoyée sur l'entrée D,K on retrouve à la sortie du flipflop un train d'impulsion de fréquence Fo=Fi/2.
Pour m'assurer que j'avais bien compris le fonctionnement du DCD j'ai fait un montage sur carte sans soudure. Ce montage comprend un multivibrateur astable qui fonctionne à 1,5 Hertz. La sortie Q du multivibrateur sert d'impulsion pour faire basculer un premier toggle flipflop dont la sortie Q et utilisée pour faire basculer un deuxième toggle flipflop. De cette façon j'obtiens un compteur binaire à 3 bits. Le compte binaire est envoyé à un décodeur qui sélectionne la sortie LED à allumer en fonction du code binaire. On a donc 8 LEDs de sortie.
Le multivibrateur astable est utilisé comme bit de poids 0 du compteur binaire.
En conclusion de ce long article je vous laisse l'opportunité d'étudier le circuit du décodeur pour en comprendre le fonctionnement qui somme toute est simple. Par exemple pour allumer la LED qui correspond au compte 0 la fonction booléenne est ~Q0*~Q1*~Q24.
NOTES:
Je viens de mettre à jour le dépôt git avec la version 1.1.4
Dans les versions antérieures pour faire appaître le menu surgissant il fallait cliquer bouton droit sur un élément de circuit. Maintenant on peut cliquez avec le bouton droit à n'importe quel endroit sur l'espace de travail de boardview pour le faire surgir. De plus 2 nouveaux éléments sont ajoutés et toujours actifs:
Une autre nouveauté est qu'on peut maintenant repositionner un fil en le tirant par l'une de ses extrémmité en gardant le bouton gauche de la souris enfoncé.
NOTE: Les projets créés avec les versions antérieures ne peuvent plus être réouvert dans cette version. En effet les composants ne seront pas situés au bon endroit.