Quantcast
Channel: PICatout
Viewing all 192 articles
Browse latest View live

jeu FALL sur stm8 gamepad

$
0
0

J'ai ajouté le jeu **FALL** sur la console stm8 gamepad. Comme le jeu TETRIS est bien connu ça se passe d'explication.

vidéo démonstration

Oui je sais, je joue très mal.


p1Forth sur ordinateur pomme-I

$
0
0

J'ai ajouté le langage Forth à l'ordinateur pomme-I.

démo

Dans ce démo je fait une comparaison entre la vitesse d'éxécution du p1BASIC versus p1Forth.

POMME-I version de base

$
0
0

Le projet complet POMME-I comprend 3 modules, l'ordinateur proprement dit basé sur une carte NUCLEO-8S207K8, le terminal basé aussi sur une carte NUCLEO-8S207K8 et enfin l'alimentation 5VDC. Cependant il est possible d'expérimenter le POMME-I simplement en construisant le premier module. J'ai dessiné le schéma de base de ce module.

liste du matériel requis

  • 1 Carte NUCLEO-8S207K8
  • 1 EEPROM SPI 23LC1024 de 128KO pour sauvegarder des fichiers programmes BASIC et Forth.
  • 1 RAM SPI 25LC1024 de 128KO pour augmenter la mémoire RAM.
  • 2 résistances de 10Ko 1/4 watt.
  • 2 Condenstateur céramique de 100nF
  • 1 Petit haut-parleur piézo ou électromagnétique de 130 ohm.
  • 1 condensateur électrochimique de 10µF/16Volt.
  • 1 Cable USB avec connecteur A et micro C pour connecter la carte à l'ordinateur .

La carte NUCLEO-8S207K8 comprend un programmeur STLINK-V2.1 donc tout ce qu'il faut pour la programmer c'est un cable USB pour la relier à l'ordinateur. Lorsque la carte est reliée à l'ordinateur. Un lecteur apparaît ainsi qu'un port série virtuel qui peut-être utilisé avec un émulateur de terminal pour communiquer avec le POMME-I. Pour programmer le mcu il suffit de copier le fichier pomme_1.bin sur le lecteur créé par l'insertion de la carte.

Montage sur carte sans soudure

Pour un montage permanent le circuit peut-être transféré sur une carte comme cell-ci

POMME-I: comment je programmais en 1978

$
0
0

Steve Wozniak le créateur du Apple-I a programmé le moniteur de celui-ci sans utiliser d'assembleur. Quelque années après lui j'ai fait la même chose sur le premier micro-ordinateur que j'ai acheté. Ce dernier était basé sur un processeur RCA CDP1802. Pour le programmer il n'y avait qu'un clavier hexadécimal et l'affichage était constitué de LEDs. Dans la vidéo suivante j'utilise le POMME-I pour montrer comment on programmait sans assembleur.

Écrire un programme en utilisant le moniteur.

À travailler de cette façon on mémorise assez rapidement les codes machines ce qui évite d'avoir à consulter le manuel de référence fréquemment. De plus en ce qui concerne l'ordinateur que j'avais le clavier était hexadécimal mais l'affichage LED était binaire donc j'ai aussi appris à traduire les codes binaires en hexadécimal au premier coup d'oeil.

POMME-I version 1.2r0

$
0
0

Ces derniers jours j'ai apporté plusieurs améliorations au projet.

  • Dans le moniteur on peut maintenant entrer une chaîne de caractères directement dans la mémoire RAM sans avoir en convertir en codes ASCII.
  • Dans le moniteur on peut afficher une aide rapide sur les codes de service du noyau avec la commande ?.
  • Le BASIC a maintenant accès à la mémoire RAM SPI par le tableau XRAM().

Démonstration de la version 1.2

POMME-I V1.2R2 sauvegarde d'un programme en langage machine.

$
0
0

Dans le vidéo suivant je montre comment:

  • créer un programme en langage machine dans le moniteur en se servant des appels aux services noyau.
  • Comment créer un autre petit programme pour sauvegarder le premier comme fichier binaire.
  • Comment recharger dans le moniteur le fichier binaire pour l'exécuter.

POMME-I, V1.2R4 , améliorations du moniteur

$
0
0

Dans la version précédente du moniteur, assembler le code pour les appels système était un peu compliqué et encore plus compliqué lorsqu'il s'agissait d'opérations sur les fichiers. J'ai simplifié tout ça en ajoutant la commande S. De plus j'ai ajouté la commande ] pour assembler l'instruction machine RET qui indique la fin du programme en langage machine et le retour vers le moniteur.

En MS-DOS il y avait un programme appellé debug.exe qui était un moniteur avec un assembleur et un désassembleur ainsi que d'autre fonctions pour examiner et modifier la mémoire RAM. Il y avait 2 types de fichiers exécutables en MS-DOS, les fichiers *.COM et les fichiers *.EXE. L'application debug.exe permettait de créer des fichiers *.COM. Avec le p1Monitor mon objectif est de m'approcher des fonctionnalités de debug.exe en permettant de créer des fichiers en assembleur qui pourront être chargés et exécuter à partir de p1Monitor. Le désassembleur existe déjà puisque je l'avait créé en 2019 avec le projet MONA, ce ne sera pas trop compliqué d'intégrer ce désassembleur à p1Monitor et ensuite il ne me restera qu'à créer l'assembleur.

Démonstration de la commande S de p1Monitor

POMME-I, le désassembleur

$
0
0

Le moniteur possède maintenant un désassembleur accessible avec la commande @. L'affichage pause à chaque page et il faut appuyer sur la barre d'espacement pour voir la page suivante. Toute autre touche revient à la ligne de commande du moniteur. Le STM8S207K8 possède un boot loader en ROM à l'adresse 0x6000. Voici les premières lignes de code tel que désasssemblées par stm8_dasm.

#6000@

6000: 9B
6000	9B               SIM
6001	AD 0C            CALLR 600F 
6003	25 19            JRC 601E 
6005	CE 48 7E         LDW X,487E 
6008	A3 55 AA         CPW X,#55AA 
600B	27 11            JREQ 601E 
600D	20 16            JRA 6025 
600F	C6 80 00         LD A,8000 
6012	A1 82            CP A,#82 
6014	27 06            JREQ 601C 
6016	A1 AC            CP A,#AC 
6018	27 02            JREQ 601C 
601A	99               SCF
601B	81               RET
601C	98               RCF
601D	81               RET
601E	C6 48 00         LD A,4800 
6021	A1 AA            CP A,#AA 
6023	26 09            JRNE 602E 
6025	5F               CLRW X
6026	4F               CLR A
6027	4B 28            PUSH #28 
6029	86               POP CC
602A	AC 00 80 00      JPF 8000 

La prochaine étape est l'écriture d'un assembleur simple. Lorsque l'assembleur sera intégré au moniteur je vais changer les commandes du moniteur. Toutes les fonctions qui ne font pas parti du moniteur de base comme S,] et @ seront accessible par une interface de commande dérivée accessibles par la lettre X. X pour extension puisque que ces fonctionnalités ne faisait pas partie du p1Monitorà lorigine.

Cette version V1.3R0 est disponible sur le github mais je vais attendre que l'assembleur soit complété avant de présenter un vidéo de démonstration.


réparation d'une déchiqueteuse

$
0
0
Je viens de compléter la réparation d'une déchiqueteuse de marque STAPLES modèle SPL-TXC12A
  1. Approche du problème
  2. Reverse engineering
  3. Description du circuit
  4. Fonctionnement du TRIAC

Approche du problème

Après avoir ouvert le boitier et extrait le circuit imprimé il est apparut évident que le fusible était brulé. Il ne suffit pas de le remplacer, il faut se demander pourquoi il a brûlé? Même si on ne possède aucune information sur le circuit on peut figurer que la cause la plus probable est une déficience dans le circuit de puissance. Il y a 2 composants montés sur des dissipateurs de chaleur. Il faut donc chercher à identifier ces composants et vérifier si l'un d'eux ou les 2 ne serait pas la cause de la défectuosité.

Circuit imprimé, fusible F1 et TRIAC retiré. Le pont redresseur est monté sur le petit dissipateur de chaleur et le boitier orange est un relais.

J'ai d'abord porté mon attention sur le composant au format TO-220 monté sur le plus gros dissipateur de chaleur. Sur le circuit imprimé c'est inscrit in sur la broche de gauche, out sur la broche du centre et g sur la broche de droite. Je croyais qu'il s'agissait d'un régulateur de tension pour alimenter le circuit intégré. l'ohmètre indiquait un court circuit entre les broches in et out. Je l'ai donc retiré du circuit. L'indication ne me disait rien, je m'attendais à quelque chose comme 7805 pour un régulateur linéaire de 5 volt, mais ce n'était pas ça.

composant mystère

SanRex?T8E6?. Recherche dans l'internet, rien! pas de datasheet sur le site du fabriquant! Examen du circuit imprimé, je vois que ce composant est branché au neutre de l'alimentation 120 VAC à travers une résistance de puissance de 0,1 ohm qui arrive sur sa broche in et que sa broche out va sur une broche de l'autre composant de puissance monté sur un dissipateur de chaleur. Ce composant avec ces 4 broches ressemble à un pont redresseur que je me dis. Vérification de l'étiquette du moteur, c'est un moteur qui fonctionne à 120VDC. Ça fait du sens, le AC doit-être redressé pour alimenter le moteur et il faut contrôler sont alimentation et le composant que j'ai retiré ne peut-être qu'un TRIAC dans ce cas car il est monté du côté AC du pont redresseur et on utilise normalement un TRIAC pour contrôler une alimentation AC en puissance.
120V/60hertz convertie en DC

Je suis donc au prise avec un TRIAC inconnu que je dois remplacer. L'étiquette à l'arrière de la déchiqueteuse indique que l'appareil consomme 3 ampères. Le fusible est de 5 ampères. Donc un TRIAC capable de passer un courant 8 ampères (paramètre It(rms)) et d'un voltage de coupure répétif maximum (paramètre Vdrm) de 600VAC devrait faire l'affaire. Il me reste à vérifier comment est alimenté le gate du TRIAC. Reverse ingeneering du circuit. Je constate qu'il est alimenté directement par le micro-contrôleur HT46R47 par la broche GPIO PA5à travers la résistance R4 de 200 ohm. J'ai trouvé le feuillet de spécification du microntrôleur dans l'internet et j'ai pu vérifier que les GPIOs peuvent sourcer un courant (paramètre Ioh) maximum de 10mA lorsque le MCU est alimenté à 5Volt. Donc il me fallait un TRIAC avec les paramètres suivants:

  • Vdrm (repetitive peak off state voltage) minimum de 400VAC pour avoir une marge de sécurité.
  • It(rms) (non repetitive on state current) minimum de 5 ampères pour avoir une marge de sécurité.
  • Igt (gate trigger current) maximum de 5mA pour avoir une marge fonctionnelle.
J'ai arrêté mon choix sur le BT127-600D.
  • Vdrm 600 volt
  • It(rms) 8A
  • Igt maximum 5mA
  • De plus le gate est conçu pour être branché directement à un microcontrôleur comme indiqué dans le feuillet de spécifications:
    This very sensitive gate "series D" triac is intended to be interfaced directly to microcontrollers, logic integrated circuits and other low power gate trigger circuits.
Composants commandé et reçus. Fusible et TRIAC installé appareil réparé.

Reverse engineering

Un coup parti je n'allais pas m'arrêter là. Comme le circuit imprimé est simple face qu'il y a peu de composants j'ai décidé de faire le reverse engineering du circuit.

Description du circuit

Il s'agit d'un appareil conçu pour l'Amérique du nord et fonctionne donc sur une alimentation secteur de 120VAC. Il y a 2 protections contre les accidents réalisées par les microswitch SW1 et SW2. La première (schredder on bin) coupe l'alimentation lorsque la déchiqueteuse est soulevée du bac de réception. La deuxième (emergency key) coupe l'alimention lorsque la clé rouge est retirée de sa fente.

Au point de vue électrique, il y a 2 protections:

  1. Le fusible F1 de 5 ampères a bien joué son rôle lorsque le TRIAC a flanché pour devenir court-circuit.
  2. Le fusible F2 est une protection contre la surchauffe du moteur et ouvre le circuit au cas ou il y a surchauffe. Le microcontrôleur mesure le courant qui passe à travers la résistance de 0,1 ohm et lorsque le TRIAC est commandé mais qu'aucun courant n'est détecté dans le circuit le MCU en détuit que F2 est possiblement ouvert et indique une surchauffe en allumant la LED over heat.

Il y a 2 opto-coupleurs.

  • Paper detection est installé en travers de la fente de réception des feuilles et informe le MCU qu'il faut démarrer le moteur. Tant qu'il y a détection de papier le moteur tourne.
  • bin full detection est installé au fond de l'unité de déchiquetage et lorsque le bac est plein la LED full s'allume.
    photo détecteur bac plein

Le relais avec contacts DPDT sert à inverser la rotation du moteur lorsque l'appareil et en mode REV. Cette fonction est ulitisée lorsqu'il y a bloquage de l'appareil et qu'on veut faire ressortir les feuilles bloquées.

L'alimentation du MCU est régulée par la zener diode ZD3. Une seule diode 1N4007redresse la tension AC, donc le redresseur fonctionne en demi-phase ce qui nécessite un bon filtrage assuré par plusieurs condensateurs. Il y a les 2 électrolytics E3 et E4 de 470µF/16V ainsi que les condensateurs céramiques montés en surface C5 et C6.

Le relais nécessite 24VDC pour contrôler sa bobine. Cette alimentation est fournie par les composants D5 diode redresseuse. E2électrolytique de 220µF/35V et régulé par 2 zener en série ZD1 et ZD2.

La bobine du relais est contrôlée à travers le transistor Q3 de type PNP qui lui-même est contrôlé par le transistor Q1 de type NPN. C'est la sortie GPIO PA2 du MCU qui contrôle la base de Q1.

Le MCU possède 4 entrées de convertion analogique/numérique.

  • AN0 utilisée par l'optocoupleur qui détecte un bac plein.
  • AN1 mesure le courant à travers la résistance de 0,1 ohm. Le MCU allume la LED over heat s'il n'y pas de de courant.
  • AN2 pas utilisée.
  • AN3 utilisée par l'optocoupleur qui détecte la présence de feuille dans la fente.
  • Fonctionnement du TRIAC

    symbole du TRIAC

    Triac.svg
    Par Auteur inconnu — Source inconnue, Domaine public, Lien

    Les cadrants

    Triacquadrants.svg
    By <a href="//commons.wikimedia.org/wiki/User:Krishnavedala" title="User:Krishnavedala">Krishnavedala</a> - <span class="int-own-work" lang="en">Own work</span>, CC0, Lien

    Cette image nous montre la polarité du gate et de A2 par rapport à l'électrode A1, aussi nommée MT1. selon les différents modes d'opérations. Dans le cas de cette déchiqueteuse le TRIAC est utilisé dans les modes (cadrants) 2,3. Si on regarde la schématique on constate que le Vdd du MCU est connecté au neutre de l'alimentation secteur et que Vss est négatif par rapport au neutre. Bien que j'ai oublié de l'indiqué sur la schématique l'électrode du TRIAC du côté de la résistance est A1 et celle du côté de F2 est A2. Ceci est nécessaire pour que le MCU puisse contrôler le TRIAC car comme on le voie sur l'image dans les cadrants 2 et 3 G doit-être négatif par rapport à A1 pour faire entrer le TRIAC en conduction. Donc lorsque le MCU veut bloquer le TRIAC il met la GPIO PA5à Vdd et lorsqu'il veut déclencher la conduction du TRIAC il envoie une impulsion négative sur la broche.

    Pour qu'un TRIAC demeure en conduction il faut qu'un courant minimum circule entre A1 et A2. Comme en courant alternatif le voltage repasse à zéro à toutes les demi-période il faut que le MCU envoie une impulsion sur le gate au début de chaque demi-cycle, c'est à dire 120 fois par seconde. Dans le but de synchroniser ces impulsions avec le fréquence du secteur la ligne est monitorée au point A par le MCU sur l'entrée PA4à travers les résistances R10 et R11.

    POMME I moniteur version 1.4R0

    $
    0
    0

    J'ai recommencé à travailler sur le moniteur du pomme I en ajoutant des fonctions au moniteur. Il s'agit de la version 1.4R0 Dans cette version j'ai ajouter les commandes:

    • xxxxS nom nnnn permet de sauvegarder la plage mémoire débutant à l'adresse xxxx et de nnnn octets dans le fichier nom.
    • xxxxL nom permet de charger en mémoire RAM le fichier nomà l'adresse xxxx.
    • La touche rapide CTRL+D permet d'afficher la liste des fichiers.
    • xxxxZ nnnn permet de mettre à zéro une plage mémoire à partir de l'adresse xxxx et d'une taille de nnnn octets.

    Vidéo de démonstration

    Traceur de cable

    $
    0
    0

    Le traceur de cable est un outil très utile lorsqu'on travaille sur les réseaux cablés ou les systèmes téléphoniques. On s'en sert pour identifier un cable dans le panneau de jonction à partir de la prise murale dans un local. Comme tous les fils des prises murales aboutissent dans ce panneau et que la plupart du temps ils ne sont pas indentifiés cet outil a été inventé dans le but de simplifier cette identification. Il est constitué de 2 modules.

    • Un générateur de tonalité. Généralement il émet 2 tonalités en alternance rapide pour que le signal soit facilement reconnaissable à travers le bruit.
    • Une sonde qu'on balait le long des barettes du panneau de jonction. Il n'y a pas de contact physique entre la sonde et les cables. La détection se fait par coupable électromagnétique.

    Lorsque la sonde s'approche du bon cable on entend la tonalité du générateur. La sensibilité est habituellement de 3 à 4 centimètres mais ça dépend de la résistance de terminaison de la ligne. Si la ligne est ouverte en extrémité le signal est plus fort que lorsqu'elle est en court-circuit.

    Le générateur de tonalité

    Ce module est très simple à réaliser avec une minuterie double TLC556 (2 minuteries 555 dans le même boitier 14 broches).

    La première minuterie fonctionne en basse fréquence et est utilisée pour commuter les tonalités. Dans ce montage la période est d'environ 0,65 seconde. La sortie de cette minuterie est branchée à travers la résistance R10à l'entrée CV de la deuxième minuterie. Cette entrée contrôle la fréquence en modifiant le point de bascule des 2 comparateurs de la minuterie. Dans mon montage les tonalités sont d'environ 570 et 630 hertz.

    réalisation

    Le montage est fait sur une plaquette à pastille de 5x7cm. Les pastilles de cuivre sont sur une seule face. La plaquette est montée dans un petit boitier en plastique de 98H x 58L x 22P mm.

    La sonde

    La sonde se compose d'un amplificateur et d'un préamplicateur contenu dans des boitiers différents. L'ampli est basé sur un LM386-N.

    Le préamplificateur est contenu dans un tube d'aluminium de 21mm de diamètre intérieur et de 10cm de long. Le préamplificateur est branché à l'amplificateur par un connecteur mini-DIN 3 broches.

    J'ai utilisé un transistor NJFETà l'entrée du préamplificateur pour avoir une impédance d'entrée maximale puisque le couplage avec le signal se fait par couplage capacitif il est important que l'impédance d'entrée soit très élevée. Un circuit avec transistor bijonction n'aurait pas une impédance d'entrée suffisante.

    Les condensateurs C4, C5 ainsi que la résistance R5 forme un filtre passe-bande. J'ai utilisé ltSpice pour simuler le circuit du préamplificateur et obtenir sa courbe de réponse.

    Le gain en voltage du préamplifcateur est d'environ 5DBv selon la simulation.

    réalisation

    Une carte identique de 5x7cm a été utilisée pour le montage de l'amplificateur. Celui-ci nécéssitant un boitier plus gros de 120H x 65L x 38P mm.

    Le tube d'aluminium est récupéré d'un balais à neige pour auto et il est bouché à chaque extrémité par 2 morceaux de liège coupés dans un bouchon de bouteille de vin. Une languette de 21mm de largeur a été découpé dans une carte 5x7cm pour le préamplificateur inséré dans le tube d'aluminium. L'antenne de la sonde est un fil de cuivre calibre 14 AWG recouvert d'une gaine thermorétrécicante (shrink tubing). La longueur est arbitraire.

    démonstration

    alarme d'inondation simple

    $
    0
    0

    Ce petit circuit simple permet de détecter une inondation et de déclencher une alarme sonore.

    Fonctionnement

    Ce multivibrateur utilise 2 transistors, Q12N3904 qui est un petit transistor NPN d'usage général dans un boitier TO-92 et Q2 TIP32C qui est un transistor de puissance PNP dans un boitier TO-220 qui alimente le haut-parleur.

    Lorsque les 2 électrodes sont mise en contact à travers un milieu conducteur comme l'eau, Q1 reçoit un courant dans sa base et entre en conduction. Le collecteur de Q1 fournie à son tour du courant à la base de Q2 qui lui aussi entre en conduction. Cependant à travers C1 et R2 il y a une rétro-action positive qui fait entrer les 2 transistors en saturation rapidement. C1 se charge et lorsqu'il a atteint sa pleine charge le courant dans la base de Q1 dimininue donc sa conduction aussi et entraîne Q2 dans la même direction. La conséquence est que le courant dans le collecteur de Q2 diminue et donc le voltage sur le haut-parleur. Encore une fois par rétro-action positive à travers C1 et R2 le voltage à la base de Q1 diminue rapidement et les 2 transistors coupent rapidement. À ce moment la tension à la base de Q1 est négative à cause de la charge qui s'est accumulée dans C1 durant la phase 1. Cependant C1 va se décharger à travers R1, R2 et les sondes. Lorsque le voltage aux bornes de C1 deviendra légèrement positif Q1 va se remettre à conduire pour débuter un nouveau cycle. La durée de la première phase est déterminée par la constante de temps (R2+résistance de la base de Q1)*C1 et la durée de la seconde phase est déterminée par la constante de temps (R1+R2+résistance entre les sondes)*C1. Avec les valeurs des composants choisis on on obtient une fréquence d'environ 990 Hertz lorsqu'on met les 2 fils de sonde en court-circuit. Cependant dans l'eau la conduction entre les 2 fils est moins bonne donc la fréquence diminue.

    Aperçu du signal

    Dans cette capture de l'image à l'oscilloscope la courbe en jaune est le signal sur la base de Q1 et celle en bleu est le signal aux bornes du haut-parleur. Cette capture a étée réalisé avec C1 de 4,7nF et les sondes en court-circuit. L'oscilloscope indique une fréquence 990 Hertz et un rapport cyclique près de 50%. Lorsque les sondes sont dans l'eau la résistance de décharge de C1 augmente donc la phase 2 rallonge, ce qui diminue la fréquence ainsi que le rapport cyclique.

    La phase 1 est lorsque les transistors sont en saturation et que C1 se charge et la phase 2 celle ou ils sont bloqués et C1 se décharge.

    Dans ces conditions l'alimentation draine 100ma à 3 volts.

    démonstration

    Dans ce démo on voit que la fréquence lorsque les 2 fils sont en court-circuit est plus élevée que lorsque les fils sont dans l'eau. Ceci est du au fait que la résistance de l'eau s'ajoute à celles de R1 et R2.

    Viewing all 192 articles
    Browse latest View live