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

STM8 Tiny BASIC Version 3.1

$
0
0

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.

Commandes ajoutées

  • PWM.EN Pour activer ou désactiver le contrôle PWM.
  • PWM.CH.EN Pour activer ou désactiver un canal spécifique. Il y en a 4.
  • PWM.OUT Pour contrôler la largeur d'impulsion sur un canal.

  • SERVO.EN Pour activer ou désactiver le contrôle servo-moteur.
  • SERVO.CH.EN Pour activer ou désactiver un canal spécifique. Il y en a 4.
  • SERVO.POS Pour envoyer une commande de position au servo-moteur.

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.


Installation de STM8 Tiny BASIC sur carte NUCLEO-8S207K8

$
0
0

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.

localisateur de métal

$
0
0

Ce metal-pointer est basée sur un carte d'expérimentation NUCLEO-S207K8 avec STM8_TBI installé en firmware.

Il s'agit d'un localisateur de métal. La différence entre un localisateur et un détecteur est que le premier sert à localiser avec précision un petit objet métallique. La sensibilité est plus faible mais l'erreur sur la position de l'objet est aussi beaucoup plus faible. Habituellement les chercheurs de trésor utilise un détecteur de métal pour localiser un objet dans un rayon d'environ 30 cm et ensuite ils utilisent le localisateur pour préciser la position à l'intérieur de cette zone d'un petit objet comme une pièce de monnaie.

Schématique

prototype

Principe de fonctionnement

Les composants C6-L1 forment un circuit résonnant série. dont la fréquence de raisonnance est
Fr=1/(2*π*√(C6*L1))
Pour les valeurs utilisées ça donne: Fr=1/(2*π*√(10E-9*10E-3))=50329 Hertz.
Le générateur PWM du stm8 Tiny BASIC est utilisé pour générer une onde rectangulaire correspondant à cette fréquence. Puisqu'à la fréquence de résonnance l'impédance d'un circuit résonnant série est minimale le voltage à la jonction de R3-C6 est minimal.

Cependant si un objet métallique est à proximité de l'inductance la valeur de celle-ci est modifiée et en conséquence la fréquence de raisonnance est aussi modifiée et ne correspond plus à celle générée par le PWM. L'impédance du circuit C6-L1 augmente ansi que le voltage à la jonction R3-C6. Ce voltage est redressé par la diode D3 et charge C4à la tension de crête. Cette tension est mesurée sur l'entrée analogique A3. Lorsqu'un variation rapide de cette tension est détectée une alarme est sonnée et la LED verte D2 s'allume pour 10 msec.

mise à jour 2023-03-08

J'ai modifié le programme et le circuit. J'ai fait une erreur au niveau de l'alimentation. J'avais branché l'alimementation de la pile sur CN4:4 (5V) alors qu'elle doit-être branchée sur CN4:1 (Vin).

Vidéo de démonstration

Alimenté à 6 volt le circuit tire entre 40 et 50 mA. La plus grosse part de ce courant est draînée par le programmeur ST-LINK qui n'est pas désactivé.

À l'antipode

$
0
0

De nos jours, à l'aire du numérique, tous les récepteurs radio (ou presque) sont entièrement basés sur la technologie numérique. Autrefois, à l'aire de l'analogique, la sélection des postes de radio se fait par un circuit accordé à fréquence ajustable. En fait les récepteurs superhétérodyne utilisaient 2 circuits accordés variables, un pour l'oscillateur local et l'autre pour la sélection de la station. Les 2 circuits devaient être adjusés en accord car dans le superhétérodyne la fréquence intermédiaire est obtenu par produit de la fréquence de l'oscillateur local avec la fréquence du signal reçu pour obtenir une fréquence intermédiaire fixe. Donc la différence entre les deux fréquences doit-être constante quel que soit la station sélectionnée.

,

Dans tous les récepteurs radios de ma jeunesse cet accord se faisait avec un condensateur variable à 2 sections d'axe commun. Donc en tournant le bouton de sélection des stations les plaques mobiles des deux sections tournaient ensemble assurant la synchronisation entre l'oscillateur local et la fréquence de réception.

condensateur variable pour récepteur superhétérodyne

Pour voir un condensateur variable en action allez à 3:30 minutes.

En australie il faisait autrement

Cependant il semble qu'à l'antipode, c'est à dire en Australie, il faisait autrement. Au lieu d'utiliser un condensateur variable ils utilsaient des inductances variables. En effet la fréquence d'un circuit accordée dépend du produit de la capacitance par l'inductance. la formule:
Fa=1/2π√(LC)
Donc pour varier la fréquence de l'accord on a le choix, modifier la valeur de L ou celle de C.

Alors que dans l'hémisphère nord on utilisait un condensateur variable il semble qu'à l'antipode ils utilisaient des inductances variables mécaniquement reliées ensemble comme on le voit dans la photo suivante d'un récepteur Astor datant de 1955.

récepteur superhétérodyne avec accord par inductance variable

Ce récepteur utilise des inductances à coeur de ferrite. En retirant ou enfoncant les ferrites la valeur des inductances varie ce qui permet la sélection des stations. j'ai annoté la photo extraite d'un vidéo Youtube. Si vous voulez voir le fonctionnement de ce circuit d'accord en action vous pouvez visionnez la vidéo en avançant le curseur à 5:30 minutes.

détecteur de clou

$
0
0

Mes expérimentations avec les pointeurs de métal ont abouties à ce détecteur de clou qui permet de détecter des clous ou vis masqués dans une planche ou un mur. Ce détecteur contrairement au premier prototype est programmé entièrement en assembleur sur un MCU STM8S103F3M.


projet finalisé

Finalement pour l'inductance j'ai utilisée une ferrite semi-cylindrique pour le bobinage de l'inductance. Deux rangs de fil 30 AWG sur cette ferrite donne une inductance de 644µH. La ferrite provient d'une coquille de ferrite conçue pour les cables d'alimentation.

coquille de ferrite pour cable d'alimentation

Cette inductance permet d'augmenter la surface de détection par rapport à la tige de ferrite utilisée auparavant.

ferrite collée dans le fond du boitier avec de l'époxy.

J'ai découpé 2 fentes dans le fond pour que les extrémités affleurent à l'extérieur du boitier.

circuit dans la boite

démonstration

source du projet: https://github.com/Picatout/metal-pointer/tree/main/bare-metal

STM8 Tiny BASIC V3.2R0

$
0
0

J'ai repris le travail sur mon projet STM8_Tiny BASIC. J'en suis rendu maintenant à la version 3.2R0. Cette version consiste pour l'essentiel à un travail d'optimisation de la machine virtuelle qui exécute le bytecode, pour la rendre plus rapide. J'ai obtenu une amélioration intéressante comme le montre les résultats suivants.

Programme de test


   10 ' for next speed test 
   12 LET T = TICKS 
   14 FOR I = 1 TO 10000 
   16 NEXT I 
   18 ? TICKS - T ; " MSEC" 
   20 ' DO UNTIL TEST 
   22 LET I = 1 , T = TICKS 
   24 DO LET I = I + 1 : UNTIL I > 10000 
   26 ? TICKS - T ; " MSEC" 
   28 ' GOTO LOOP 
   30 LET I = 1 , T = TICKS 
   32 LET I = I + 1 : IF I <= 10000 GOTO 32 
   34 ? TICKS - T ; " MSEC" 
program address: $91, program size: 241 bytes in RAM memory

Résultats de la version antérieure V3.1R13

>RUN
115  MSEC
771  MSEC
846  MSEC

Résultats obtenus avec cette version V3.2R0

>run
84  MSEC
451  MSEC
513  MSEC

Autre test

Un autre bon test est l'exécution du programme pwm-soft.bas. En mesurant la fréquence PWM avec un oscilloscope j'Obtient 95 Hertz pour la version antérieure et 144 Hertz pour cette version. Cet un bon test car la vitesse PWM est directement lié à la vitesse d'exécution de la boucle LOOP. Donc en général la machine virtuelle exécute le code 144/95=1.5 fois plus rapidement.

vérificateur de continuité

$
0
0

Projet éducatif sans microcontrolleur

Vérificateur de continuité

Voici un petit projet simple à réaliser pour un débutant en électronique. Il ne requiert que 2 transistors d'usage général facilement disponible ainsi que quelques composants passifs.

Matériel requis

  • 1 petite plaquette de bakélite pour le montage.
  • 1 transistor NPN 2N3904
  • 1 transistor PNP 2N3906
  • 1 transistor céramique de 10nF
  • 1 résistance 1/4 watt 100 ohm
  • 1 résistance 1/4 watt 1Kohm
  • 2 résistances 1/4 watt 10Kohm
  • 1 résistance 1/4 watt 18Kohm
  • 1 résistance 1/4 watt 51Kohm
  • 1 DEL rouge 3mm ou 5mm, pas bleu ou blanche, voir texte.
  • 1 petit haut-parleur 8 ohm
  • 1 petit commutateur simple pôle
  • 1 pile 9 volt
  • 1 porte pile
  • 1 petit-boitier

montage sur plaquette sans soudure

Je n'ai pas fait de montage permanent mais voici le schéma de montage sur une plaquette sans soudure.

Principe de fonctionnement

Le circuit est basé sur 2 transistors bijonction, Q1 de type NPN et Q2 de type PNP. Les transistors NPN fonctionnent avec le collecteur positif par rapport à l'émetteur alors que les PNP fonctionnent avec le collecteur négatif par rapport à l'émetteur. C'est pour ça que Q1 est monté avec l'émetteur à V- de l'alimentation alors que Q2 est monté avec l'émetteur au V+ de l'alimentation.

Ce type de circuit porte plusieurs noms, bascule astable, oscillateur RC ou multivibrateur. Il existe plusieurs façons de réalisé ce type de circuit, Il aurait pue -être réalisté avec 2 transistors NPN je préfère ce modèle qui ne requiert qu'un seul condensateur.

L'image suivante représente une capture des signaux au points TP1 en jaune et TP2 en bleu.

Commençons du côté gauche du schéma électronique. On a la pile BT1évidemment avec le commutateur de mise sous tension SW1. Les étiquettes probe+ et probe- indique les points de branchement des fils qui servent à sonder le circuit ou composant à vérifier. La résistance R1 en série avec la diode électroluminescente, i.e. DEL rouge D1 donne une indication visuelle de la continuité du circuit sous vérification. En effet lorsqu'on touche ensemble probe+ et probe- la D1 et une tonalité se fait entendre si la résistance entre probe+ et probe- n'est pas trop élevée, je vais revenir sur ce point.

Cependant D1 ne sert pas seulement d'indicateur visuel, elle sert aussi comme voltage de référence pour le circuit de polarisation de la base de Q1. La effet la tension au borne de cette DEL demeure constant à encviron 2 volts même si la pile faiblie. Les valeurs de R2 et R3 qui forment le diviseur de tension qui polarise la base de Q1. Si la DEL rouge est remplacée par une DEL bleu ou blanche le circuit ne fonctionnera pas car ces diodes fonctionnent à une tension supérieure à 3 volts, alors Q1 et Q2 entreront en saturation et le multivibrateur ne fonctionnera pas.

Avec les valeurs utilisées pour R2 et R3 lorsqu'on mets en contact les 2 fils de sonde le voltage à la base de Q1 est juste suffisant pour que le transistor commence à conduire.

  1. Au point A sur les courbes, lorsque Q1 commence à conduire, il injecte du courant dans la base de Q2 via son collecteur. Donc Q2 commence à conduire lui aussi. Le voltage aux bornes de R6 commence donc à monté. À travers R5 et C1 cette élévation de tension est transférée à la base de Q1. En conséquence Q1 conduit encore plus et Q2 de même. Cette boucle de renforcement s'appelle une rétro-action positive, On voit que ce phénomène est très rapide puisque le voltage au point TP1 monte à la verticale sur le tracé jaune au point A.
  2. Dans la partie B de la courbe jaune les 2 transistors sont en saturation, c'est à dire qu'il conduise le maximum de courant qu'ils peuvent. Pendant cette phase C1 continue à se charger et maintient ainsi les 2 transistors en saturation par le courant qui passe à travers lui. Cette rétro-action va cessée lorsque le condensateur aura atteint sa pleine charge et qu'il ne pourra plus contribué au courant dans la base de Q1.
  3. Au point C, au moment où C1 ne passe plus aucun courant dans la base de Q1, la conduction de ce dernier diminue ainsi que celle de Q2 et la tension sur R6 commence à diminuer. Cette fois c'est la baisse de tension qui est transmise à la base de Q1. par le même phénomène de rétro-action positive la conduction des 2 transistors va diminuée rapidement jusqu'à couper complètement. Encore fois le phénomène est très rapide donc la tension tombe à la verticale en TP1. À ce moment puisque C1 a accumulée une charge électrique pendant la phase précédente, le voltage aux bornes de C1 est positif au point TP1 par rapport à l'autre côté du condensateur. Puisque cette extrémitée est maintenant au niveau de tension 0 volt, ça implique que l'autre extrémitée est à une tension négative à par rapport à V- de la pile. C'est bien ce qu'on observe sur la courbe bleu en point C
  4. durant la phase D le condensateur commence à se décharger à travers R2,R5,R6 et le haut-parleur LS1. Jusqu'au point ou le voltage à ses bornes va s'inverser pour devenir légèrement positif, à environ +0,6 volt en TP2Q1 va recommencer à conduire. Alors le cycle recommence.
  5. Comme on le voit sur la courbe jaune, la durée de la partie B est plus courte que la partie D. C'est du au fait que les constantes de temps sont différentes pour ces 2 phases. En effet lorsqu'on applique une tension bornes d'un circuit formé par une résistance en série avec un condensateur le condensateur se charge à une vitesse qui dépend du produit R*C. Ce produit s'appelle constante de temps. Cette constante de temps détermine combien de temps il faut au condensateur pour se charger ou décharger. En phase B on a Tb=R5*C1
    En phase D on a Td=(R2+R5+R6+LS1)*C1. La valeur de la constante de temps est donc plus grande.
    La période de la fréquence audio est la somme des périodes B+D.

    Autre source d'alimentation

    Supposons que voulez alimenter ce circuit à 3 volts plutôt qu'à 9 volts. Il suffit alors de remplacer la résistance R1 par une valeur de 120 ohm alors le voltage sur l'anode de la DEL va à 2 volts et les résistances R2, R3 n'auront pas besoin d'être modifiées. Le résultat sera une fréquence audio différente et un volume sonore plus faible. Je l'ai vérifié et ça fonctionne.

    Conclusion

    Cet appareil simple et économique à fabriquer est utile pour vérifier s'il y a une coupure dans un circuit mais aussi pour vérifier des diodes et même des transistors à jonctions.

STM8 Tiny BASIC V3.2R1

$
0
0

J'ai continué mon travail sur STM8 Tiny BASIC pour l'améliorer. Cette révision consiste simplement en la continuation de la modification de la machine virtuelle pour améliorer sa performance. Ce changement de modèle d'exécution a entraîné son lot de bogues régressifs. J'ai corrigés tous ceux qui se sont manifestés lors de mes tests. Maintenant tous les programmes dans le répertoire BASIC fonctionnent correctement. Suivre le lien suivant pour télécharger la dernière révision.
dépôt du projet.

Démonstration conversion de la lecture ADC en voltage

Le programme suivant démontre comment faire une lecture analogique et la convertir en voltage. Bien que Tiny BASIC ne supporte que les entiers il est tout fait possible de convertir la lecture en voltage avec 3 décimales fractionnaires. Le voltage de référence est de 3,3 volts et puisque qu'il s'agit d'un convertisseur à 10 bits la lecture maximale est de 1023.


1 ADC.TO.DEC 
2 ' CONVERT ADC READING TO 3 DIGITS DECIMAL 
10 CONST VREF=33,ADC.RES=10240 
14 ADCON 1
20 DO 
30 LET V=ADCREAD(0)
40 ? char(27);"c";V,; :GOSUB CONVERT 
50 PAUSE 50:GET K : UNTIL K 
60 ADCON 0 
90 END 
99 ' D digit to print {0..9}
100 PRT.DIGIT 
110 ? D;CHAR(8);
120 RETURN 
199 FRAC.DIGIT' get next digit from remainder R 
200 LET R=R*10, D=R/ADC.RES,R=R%ADC.RES 
210 RETURN 
299 CONVERT ' ADC READ VALUE V 
300 LET D=V*VREF/ADC.RES, R=V*VREF%ADC.RES
310 GOSUB PRT.DIGIT:?"."; 
320 GOSUB FRAC.DIGIT: GOSUB PRT.DIGIT 
330 GOSUB FRAC.DIGIT: GOSUB PRT.DIGIT
340 GOSUB FRAC.DIGIT: GOSUB PRT.DIGIT   
350 ? 
360 RETURN  


STM8 Tiny BASIC V4.0

$
0
0

Je viens de livrer la dernière version de STM8 Tiny BASIC. Il s'agit d'une révision majeure incompatible avec les versions antérieures.

  • La machine virtuelle a subie des transformations majeures pour la rendre plus performante.
  • la fonction BIT() a été retirée car la même chose peut-être accomplit avec la function LSHIFT().
  • Les commandes BRES, BSET et BTOGL ont une sémantique différente incompatible avec les versions antérieures.
  • La commande RANDOMIZE a étée ajoutée.
Pour plus d'information il faut consulter le manuel de référence qui est dans le dossier DOCS.

Après avoir exécuter avec succès tous les programmes qui se trouvent dans le dossier BASIC, je considère qu'il n'y a pas de bogues majeurs donc j'ai publié cette version comme un release.

Réflexion

Je songe à renommer le projet, quelque chose comme mcu BASIC ou encore spider BASIC. J'ai même créé une mascote mais je ne suis pas encore décidé.


Les araignées ont 8 pattes, les STM8 ont 8 bits et les plus petits sont au format SOIC-8. Juste une idée comme ça, sans doute influencé par les araignés que je rencontre occasionnellement dans la salle de bain. Voici ma source d'inspiration prise en flagrant délit d'invasion domiciliaire:

reverse engineering crusader mini

$
0
0

Je magasinais sur Amazon lorsque m'est apparût la présentation d'un récepteur radio AM/FM/WB de poche. Le crusader mini. Il le vende maintenant 20$CAN alors qu'il y a à peine quelque semaines lorsque je l'ai commandé il était affiché à 17$CAN. L'inflation galopante. Si j'ai acheté ce petit récepteur c'est par curiosité, un affichage analogique à l'aire du tout numérique! Je me suis dit: ce récepteur n'est certainement pas analogique, je veux voir ce qu'il a dans le ventre.

Quelques bonnes et moins bonnes surprises

La première surprise sur réception fut la qualité de l'emballage. Beau design, une jaquette noire avec la photo de la radio. Glissée à l'intérieur de cette jaquette une boite orange à penture, qui s'ouvre comme un livre. À l'intérieur la radio est bien encadrée par les replis du carton qui épousent parfaitement sa forme la protégeant ainsi des chocs lors du tansport. Je suis étonné de retrouver un tel emballage pour un appareil de si petit prix. La boite inclue une dragone et 2 piles.

Je test la réception, je capte parfaitement le transmetteur météo du gouvernement Canadien situé à plus de 100Km. La bande FM offre aussi une bonne sensibilité. Pour la bande AM j'ai du attendre la tombé de la nuit car il n'y a pas de station AM à des centaines de kilomètres à la ronde. Pas déçu de la sensibilité l'a non plus. Et l'audio est de bonne qualité.

Puisque je l'ai acheté pour voir ce qu'il a dans le ventre, je l'ai donc ouvert. Comme je m'y attendais il s'agit d'un circuit 100% numérique. Seulement 2 circuits intégrés et 6 transistors. Presque que tous les composants sont de type montage en surface.


Sur l'autre face du circuit imprimé il n'y a que 7 composants:
  1. Le potentiomètre de 100Kohm pour la sélection des postes.
  2. Le potentiomètre de 50Kohm pour le volume.
  3. Le commutateur de mise sous tension et sélection de la bande WB/FM/AM.
  4. Un condensateur électrolytique de 100µF, pour le filtrage de l'alimentation.
  5. Le cristal Y1 de 32768 Hertz utilisé par AKC-6952, récepteur radio DSP.
  6. La DEL rouge indicateur d'alimentation
  7. La prise d'écouteur 3,5mm

Les fils du compartiment piles étaient tellement fragiles que le fil rouge a coupé presque immédiatement au niveau du PCB. j'ai remplacé les 2 fils par des plus robustes.

Lorsque j'ai souvelé le circuit imprimé pour voir le dessous, deuxième surprise. La méthode utilisée pour l'affichage analogique je ne l'avais jamais vue. Une chenille à crémaillère en plastique glissant dans une rainure est entrainée par un par la roulette de sélection des stations qui possède sur sa face extérieure un engrenage comme on le voit sur les 2 photos suivantes. Je trouve l'idée originale mais pour la durabilité je ne suis pas convaincu.

reverse engineering

Lorsque j'ai regardé ce circuit imprimé avec tous les composants en surface sur la face supérieure du PCB ainsi que le tracé du circuit sur la même face je me suis dit que ce serait facile de dessiner le circuit dans KiCAD. Avec un circuit de cette complexité il est impossible de tracer le circuit au complet sur une seule face sans faire des coupures de tracé. J'ai donc compté 12 résistances de 0 ohm qui ne servent que de pont là où les traces de cuivre devait-être coupées.

La première étape a été d'identifier les circuits intégrés et les 6 transistors:

  • AKC6952, est un récepteur complet multibandes allant des LW aux VHF. La sélection utilise un système de diviseur de tension et de potentiomètre.
  • NS8002, est un amplificateur audio simple canal.
  • Q1 RM3401, est un P channel MOSFET, utilisé comme commutateur d'alimentaion.
  • Q2 S9018 est un transistor bijonction NPN, VHF utilisé comme amplificateur pour le signal radio reçu par l'antenne télescopique.
  • Q3,Q4,Q5,Q6 S9014, sont des transistors bijonction NPN utilisé dans ce circuit comme commutateur pour la sélection de la bande de fréquence.

  • En conclusion

    Il serait impossible de fabriquer de nos jour un récepteur multibandes de ce type avec la technologie analogique à si faible coup. D'ailleurs ce serait probablement impossible de les fabriquer car il n'y a plus de fabriquants pour ces anciens composants comme les condensateurs variables. Il y a une vingtaine d'années j'avais acheté un récepteur AM/FM analogique super-hétérodyne pour père mais même à cette époque ils se faisaient rare.

    Franchement il n'y a rien à regretter de ce cette vieille technologie analogique. C'est vraiment étonnant ce qu'un simple petit circuit intégré peut accomplir en utilisant le traitement numérique du signal (DSP).

    STM8 Tiny BASIC V5.0R1 disponible

    $
    0
    0

    La version V5.0R1 de STM8 Tiny BASIC est maintenant disponible. Elle implique des changements au jeu de commandes, des optimisations de code et des corrections de bogues.

    SCR et TRIAC

    $
    0
    0

    Dans cet article j'explique ce que sont les SCR et les TRIAC ainsi que leur utilisation.

    SCR

    SCR est l'acronyme anglphone pour Silicon Control Rectifier et le symbole électronique est celui-ci:

    Comme on le voit il s'agit d'une diode dont la conduction est contrôlée par une 3ième électrode Gate(2). Normalement la diode ne conduit pas du tout et ce dans aucune direction. Cependant si l'anode est positive par rapport à la cathode et qu'on applique une impulsion positive sur la Gate(2). La diode entre en conduction dans le sens normal pour une diode et continue à conduire même après la fin de l'impulsion. Mais si la tension sur l'anode devient nulle par rapport à la cathode la diode cesse de conduire même si par après le voltage redevient positif. Il faudra envoyer une autre impulsion sur la Gate(2) pour qu'elle recommence à conduire.

    Utilisation du SCR

    Voici un exemple d'utilisation, la charge peut-être un élément chauffant dont on veut contrôler la température. Je ne montre pas ici le circuit de contrôle qui envoie les impulsions sur la Gate.


    À la sortie du pont redresseur on a une onde sinusoïdale redressée donc l'alternance normalement négative se retrouve dans le positif. On voit que les impulsions sont envoyées avec un certain délais après le début de chaque alternance et donc la charge ne reçoit que la partie après le début de l'impulsion lorsque le SCR entre en conduction. On peut retarder les impulsions autant que l'on veut et ainsi on contrôle la quantité d'énergie transmise à la charge. On appelle ça un contrôle de phase.

    Vérifier un SCR avec un multimètre

    Aujourd'hui Adrian se demandait comment vérifier un SCR. Voici comment faire avec un multimètre.

    1. En placant le multimètre sur continuité diode. Entre la Gate(2) et la cathode(3)ça doit conduire lorsque le fil rouge est sur la Gate(2) et le noir sur la cathode(3). Ça ne doit pas conduire si on inverse les fils.
    2. Entre l'anode(1) et la cathode(3)ça ne doit conduire dans aucun sens.
    3. Si à travers une résistance on applique un voltage positif entre la Gate(2) et la cathode(3) alors ça devrait conduire entre l'anode(1) et la cathode(3) seulement si l'anode(1) est positive par rapport à la cathode(3)

    TRIAC

    Le problème avec les SCR est qu'il faut redresser le AC afin de contrôler les 2 alternances, positive et négative d'une alimentation AC. Imaginez maintenant qu'on utilise 2 SCR et qu'on les connecte ensemble comme suit:


    Alors on n'a plus besoin de pont redresseur. Pendant l'alternance positive l'impulsion fait conduire le TRIAC dans un sens et pendant la négative dans l'autre sens.
    Inutile de se compliquer les choses car les manufacturiers de semi-conducteurs ont déjà penser à ça et vendent un composant appeller un TRIAC exactement dans ce but. Si vous ouvrez un thermostat électronique pour les plaintes chauffantes fonctionnant sur le secteur, vous allez en trouver un à l'intérieur. Le symbole du TRIAC est le suivant:

    Pour vérifier un TRIAC avec un mulitimiètre en mode conduction diode, si on place le fil rouge sur la Gateça doit conduire entre la Gate et A1 ainsi que A2 mais si c'est le fil noir qui est sur la Gate ni l'un ni l'autre ne doit conduire. Entre A1 et A2ça ne doit pas conduire non plus.

    détecteur de métal le plus simple

    $
    0
    0

    Hier j'ai regardé sur Youtube un vidéo présentant le détecteur de métal le plus simple que j'ai vue. Il n'utilise qu'un seul transistor. Le vidéo est en espagnol, langue que je ne comprend pas mais j'ai reconstitué la schématique du circuit à partir de l'image du circuit et des sous-titres.

    Principe de fonctionnement

    Il s'agit d'un oscillateur Hartley, la rétro action se fait de l'émetteur vers la base. RV1 doit-être ajusté de sorte que le gain soit insuffisant pour déclencher l'oscillation. Cependant lorsqu'un objet métallique est approché des bobines le couplage entre celles-ci augmente ce qui permet à l'oscillation de démarrer. À ce moment le buzzer entre en action car il y a suffisamment de courant qui passe dans le collecteur pour l'activer. Même si ce courant est hachuré à la fréquence de l'oscillateur ce n'est pas perceptible au niveau auditif.

    Notes personnelles

    1. Le choix du transistor est inutilement puissant pour ce circuit. Un transistor 2N2222 ferait tout aussi bien l'affaire mais il faudrait augmenter la valeur de R1 car le gain d'un 2N2222 est plus élevé. Pour que ce circuit fonctionne correctement le courant injecté dans la base à travers RV1 et R1 doit-être juste à la limite inférieur pour permettre l'oscillation du circuit.
    2. Avec les changements de température il est à prévoir que le gain du transistor change donc RV1 doit-être ajustable de l'extérieur du boitier. À ce sujet il serait préférable d'utiliser un potientiomètre plutôt qu'un trimmer.
    3. Étant donné que l'ajustement du gain est critique il est préférable que le potentiomètre soit multi-tours plutôt que simple tour. Une autre solution est d'utiliser 2 potientiomètres en série. Le premier de 100K et l'autre de 1K pour l'ajustement fin.
    4. Dans le vidéo l'auteur utilise une pile de 9 volts. Je l'ai remplacé par 4 piles AA. Donc une alimentation de 6 volts au lieu de 9 volts. Je n'ai pas fait le montage mais je suis confiant que ça fonctionnerait quand même en ajustant RV1 à une valeur de plus basse résistance. L'avantage est la durée de vie des piles.
    5. Pour la résistance R2 j'ai mis une résistance de 1K au lieu de 470 ohm comme dans le vidéo, question d'économiser les piles, sans diminution d'intensité lumineuse notable.

    Wozmon sur STM8

    $
    0
    0

    Après avoir regardé la vidéo de Ben Eater Running Apple 1 software on a breadboard computer (Wozmon) je me suis intéressé à l'histoire du Apple I et j'ai fait des recherches à ce sujet. J'ai trouvé le manuel d'opération du Apple I en format pdf. Dans ce manuel on retrouve le code du moniteur du Apple I

    Un peu d'histoire

    En 1975 Steve Jobs invite l'ingénieur Steve Wozniak à fonder une compagnie pour vendre l'ordinateur conçu par ce dernier. C'est Steve Jobs qui a eu l'idée d'appeller cette compagnie Apple . Ce nom réfère à la légendre (vrai ou fausse?) selon laquelle Isaac Newton aurait eu l'inspiration de la théorie de la gravitation lorsqu'assie au pied d'un pommier il aurait reçu une pomme sur la tête. C'est pour ça qu'on retrouve cette image sur la page couverture du manuel d'opération du Apple I.

    Si le Apple II est célèbre il n'en va pas de même pour le Apple I. Il ne s'en est vendu qu'environ 200. Mais cette rareté même fait que les collectionneurs se les arrachent à prix d'or. Selon mes recherches en 2018 quelqu'un offrait un Apple I aux enchères pour un prix de départ de 1.5 millions US$.

    Les raisons pour lesquelles le Apple I ne s'est pas très bien vendu sont d'abord qu'il ne s'agissait pas d'un produit grand public. Seul la carte mère était vendue.

    CopsonApple1 2k cropped.jpg
    By Achim Baqué - <a rel="nofollow" class="external free" href="https://www.apple1registry.com/en/press.html">https://www.apple1registry.com/en/press.html</a>, CC BY-SA 4.0, Link

    L'acheteur devait fabriquer le bloc d'alimentation lui-même ou bien trouver quelqu'un pour le faire. De même pour le boitier. Il devait aussi trouver un clavier, et un moniteur. À ses début Apple Computer n'avait pas de réseau de distribution. C'est Steve Jobs qui faisait le démarchage pour convraincre les boutiquiers d'informatique (secteur naissant) de vendre le Apple I. Certains de ces détaillants complétaient l'offre d'Apple en vendant le Apple I dans un boitier en bois avec l'alimentation et le clavier inclus. Il y avait donc de la variété dans l'apparence.

    L'autre raison est qu'Apple a mis en marché le Apple II très tôt après le Apple I et s'est désintéressé du premier laissant les acheteurs se débrouiller avec le Apple I.

    Qu'est-ce que Wozmon

    L'ingénieur qui a conçu les Apple I et Apple II c'est Steve Wozniak. Steve Jobs s'était un homme d'affaires pas un ingénieur. Pour en revenir au Apple I, la mémoire était coûteuse à cette époque donc pour couper dans les coûts Wozniak a fait 2 choses Il a utilisé dans le Apple I de la RAM dynamique plutôt que statique comme on retrouvait à l'époque dans la plupart des petits ordinateurs 8 bits. Ce qui lui a permit de fournir la carte mère avec 4K octets de RAM et il y avait de la place sur la carte pour en ajouter 4K de plus. Pour la mémoire ROM le Apple I ne disposait que de 256 Octets. Quoi installer comme programme dans un espace aussi réduit? À cette époque on installait un petit programme appellé un moniteur. Ce programme faisait peu de choses.

    • Examiner le contenu de la mémoire
    • Modifier le contenu de la mémoire
    • Lancer un programme écris en langage machine
    Le moniteur du Apple I, qui a finit par être affublé du nom de Wozmon contraction de Wozniak et monitor. ne faisait rien de plus que ça. Mais faire entrer ce programme dans moins de 256 octets est déjà difficile. D'abord le cpu 6502 du Apple I utililse 6 octets pour les vecteurs
    • NMI, adresse 0xFFFA..0xFFFB, c'est l'adresse de la routine d'interruption non masquable.
    • RESET, adresse 0xFFFC..0xFFFD, est chargée dans le compteur ordinal au démarrage.
    • IRQ, adresse 0xFFFE..0xFFFF, c'est l'adresse de la routine d'interruption.
    Donc Wozniak ne disposait que de 250 octets pour installer le moniteur il a réssie à le faire entrer dans 248 octets. Ce n'était pas une mince affaire d'autant plus qu'il ne disposait d'aucun outil de programmation dont nous disposons aujourd'hui. Il a écris le code assembleur sur des feuilles de papiers et générer lui-même le code binaire à partir de ce listing. J'ai connu cette époque sauf que moi je travaillait avec un mcu RCA CDP1802. Il faillait être vraiment passionné pour travailler de cette façon.

    STM8 Wozmon

    Après avoir trouver le manuel d'opération du Apple I je me suis mis à étudier le code du Wozmon qui s'y trouve et me suis demandé combien d'octets ce programme occuperait sur STM8. La question est pertinante puisque l'architecture du STM8 est une extension de celle du cpu 6502, mais le jeu d'instructions est complètement différent. J'ai d'abord écris une première version en travaillant dans mon style de programmation habituel pour voir qu'elle taille ça aurait. J'ai bâptisé ce programme stm8_picmon.asm et le binaire a une taille de 357 octets.

    Dans un deuxième essaie j'ai collé au modèle du moniteur de Wozniak autant que possible, compte de tenu des différences entre les architectures matérielle et du jeu d'instructions plus étendu qu'offre le STM8. J'ai bâptisé ce programme stm8_wozmon.asm. Le binaire de ce programme a une taille de 260 octets soit 12 octets de plus que celui de Wozniak. Il serait probablement possible de supprimer quelques octets supplémentaire en faisant quelques compromis mais je n'ai pas cherché à le faire.

    Le code source du programme est sur https://github.com/Picatout/stm8_wozmon

    Vidéo de démonstration

    projet pomme I

    $
    0
    0

    Après avoir adapter le moniteur Wozmon du Apple I sur le STM8 j'ai poursuivie sur ma lancée et créer le nouveau projet pomme I. Je veux créer un petit ordinateur 8 bits avec la carte NUCLEO-8S207K8. Cet ordinateur aura en mémoire flash le moniteur du Apple I ainsi que le BASIC du Apple I. En plus bien que ce n'était pas nécessaire j'ai ajouter un noyau système. D'ailleurs l'écriture de celui-ci m'a posé un problème auquel j'ai trouvé la solution suivante.

    Pas d'interruption

    Le noyau système utilise l'instruction machine TRAP du STM8 pour affectuer les appels syscall, hors cette interruption a la priorité la plus élevée. Donc quand l'ordinateur est en train d'exécuter un syscall les interruptions pour la minuterie des millisecondes et celle sur réception d'un charactère du UART de peuvent pas être déclenchées. Hors ces interruptions sont nécessaires à l'exécution de certaines fonctions du noyau. Comment résoudre ce problème?

    La solution

    Voici la solution que j'ai trouvé:

    
      TrapHandler::
        ldw x,(8,sp) ; get trap return address 
        _strxz trap_ret 
        ldw x,#syscall_handler 
        ldw (8,sp),x 
        iret 
     
         .macro _syscode n, t 
        cp a,#n 
        jrne t   
        .endm 
    
    ;---------------------------------
    ;  must be handled outside 
    ;  of TrapHandler to enable 
    ;  interrupts 
    ;---------------------------------
    syscall_handler:      
        _syscode SYS_RST, 0$ 
        _swreset
    0$:
        _syscode SYS_TICKS,1$
        _ldxz ticks 
        jp syscall_exit      
    1$:
        _syscode PUTC, 2$  
        ld a,xl 
        call uart_putc
        jp syscall_exit 
    2$:
        _syscode GETC,3$ 
        call uart_getc 
        jp syscall_exit
    3$:
        _syscode QCHAR,4$ 
        call qgetc  
        jra syscall_exit
    4$:
        _syscode CLS,5$ 
        call clr_screen
        jra syscall_exit 
    5$: 
        _syscode DELBK,6$ 
        call bksp  
        jra syscall_exit 
    6$: 
        _syscode GETLN , 7$
        call readln  
        jra syscall_exit 
    7$: 
        _syscode PRT_STR , 8$
        call puts 
        jra syscall_exit
    8$: 
        _syscode PRT_INT , 9$
        call print_int
        jra syscall_exit      
    9$: 
        _syscode SET_TIMER , 10$
        bres sys_flags,#FSYS_TIMER 
        _strxz timer 
        jra syscall_exit 
    10$:
        _syscode CHK_TIMOUT, 11$
        clr a 
        btjf sys_flags,#FSYS_TIMER,syscall_exit  
        cpl a 
        jra syscall_exit
    11$: 
        _syscode START_TONE , 12$    
        call tone 
        jra syscall_exit 
    12$: 
        _syscode GET_RND , 13$
        call prng 
        jra syscall_exit 
    13$: 
        _syscode SEED_PRNG , 14$
        call set_seed 
        jra syscall_exit 
    14$: 
    
    ; bad codes ignored 
    syscall_exit:
        jp [trap_ret] 
    
     
    Normalement à l'exécution de l'instruction IRET le programme devrait continuer à l'adresse qui suis l'instruction TRAP. Lorsqu'une interruption est déclenchée tous les registres du STM8 sont sauvegardés sur la pile, incluant l'adresse de retour qui est située à la position (8,sp) sur la pile. Donc le gestionnaire d'interruption logicielle va chercher cette addresse et la sauvegarde dans la variable système trap_ret. Ensuite il remplace sur la pile l'adresse original par l'adresse de la sous-routine qui gère les appels syscall et puis il quitte avec l'instruction IRET. Puisque l'adresse de retour a étée modifiée le programme continue non pas à l'endroit où il aurait du mais au début de la routine syscall_handler.

    Notez que la sous-routine syscall_handler se termine par un jp [trap_ret]. trap_ret est une variable pointeur et cette instruction fait un saut à l'adresse contenue dans la variable pointeur qui se trouve être l'adresse où normalement le programme aurait du continuer à la sortie de TrapHandler. Et voilà le problème est résolu.


    STM8 terminal

    $
    0
    0

    Dans le cadre du projet pomme-I j'ai créer un terminal ASCII avec une carte NUCLEO-8S207K8. Ce terminal texte peut affiché 64 caractères par ligne et 25 lignes par écran. La sortie est un signal compositive selon le standard Nord-Américain NTSC.

    stm8 terminal

    $
    0
    0

    Puisque je viens de mettre à jour le projet stm8 terminal vers la version 1.0R14. Je vais parler de la génération d'un signal composite au standard NTSC à partir d'un microcontrolleur 8 bits.

    Qu'est-ce que le standard NTSC

    Ce standard prend son origine aux U.S.A. en 1941 pour la première version noir et blanc et en 1953 pour la version couleurs. NSTC est l'acronyme de National Television System Committee. Il s'agit d'un signal vidéo composite, c'est à dire que toute l'information est contenue dans un seul signal, i.e. synchronisation, luminance et chrominance. Il s'agit d'un signal analogique qui à l'origine était transmit par radiodiffusion.

    Générer un signal NTSC monochrome comme pour le projet stm8 terminal est relativement simple et peut se faire même avec le plus petit des microcontrolleurs 8 bits. Dans le passé j'ai réalisé ce genre de signal sur un PIC12F322 pour le projet pong. Comme le projet stm8 terminal ce projet était réalisé entièrement en assembleur.

    Comme à l'époque où a été créer ce standard, la télévision était entièrement analogique, l'image était recréé grâce à un tube cathodique par balayage d'un faisceau d'électrons sur une surface phosphorencente appliquée sur la face avant du tube cathodique. Chaque image est constituée de 2 trames entrelacées de 262,5 lignes et le taux de répétition est de 30 images par seconde (60 trames).

    Ce qui complique un peu la génération de ce signal est justement cet entrelacement de trames car les trames paires et impaires sont décalées d'une demi-ligne l'une rapport à l'autre.

    Le balayage commence en haut à gauche de l'écran en allant vers la droite et se termine en bas à droite.

    Balayage entrelace affichage trames.svg
    Par <a href="//commons.wikimedia.org/wiki/User:Cdang" title="User:Cdang">Christophe Dang Ngoc Chan</a> — <span class="int-own-work" lang="fr">Travail personnel</span>, CC BY-SA 3.0, Lien

    Chaque ligne horizontal de balayage débute par une impulsion de synchronisation qui dure 4,7µSec. La partie visible qui affiche l'information vidéo dure 52µSec.

    Une autre complication est la façon dont la synchronisation verticale qui indique le début de chaque trame est générée. Habituellement j'utilise une minuterie avec sortie PWM pour générer le signal de synchronistation. Hors la synchronisation verticale oblige à reprogrammer la minuterie pour réduire la période de la minuterie de moitier lors de la synchronisation verticale. En plus cette synchronisation se fait en 3 étapes. pré-égalisation, synchronisation, post-égalisation. Et chacune de ces phase oblige une reprogrammation de la minuterie et pour finir il faut revenir à la génération pleine ligne à la fin de la synchronisation. Comme les trames sont décalées d'une demi-ligne l'une par rapport à l'autre, le signal est différent entre trame paire et impaire.

    Pourquoi NTSC plutôt que VGA

    Pourquoi ne pas utiliser le standar VGA au lieu du standard NTSC ce serait tellement plus simple à générer comme signal, signal de synchronisation plus simple, pas de trames entrelacées. En effet c'est plus simple sauf que la fréquence du signal vidéo est plus élevée. en VGA pour générer 640 pixels par ligne il faut une fréquence de 25.1Mhz (pixel clock frequency). Pour le signal VGA on ne dispose que de 25,4µSec visible pour afficher tous les pixels d'une ligne de balayage. La moitié de ce qu'on dispose en NTSC.

    Le mcu du stm8 terminal utilise une fréquence système de 20Mhz et le périphérique SPI utilisé pour sérialiser les pixels sur la ligne vidéo fonctionne à 10Mhz ce qui permet d'afficher 496 pixels par ligne de balayage (62 caractères par lignes). En utilisant le standard VGA on ne pourrait qu'afficher 254 pixels soit 31 caractères par ligne.

    Ce que j'ai dit jusqu'ici ne concerne que le NTSC noir et blanc. S'il faut ajouter la couleur à ça, c'est d'autant plus complexe même si j'ai réussi à le faire sur un microcontrôleur PIC12F1572 pour mon projet breakout, ce qui sans me vanter m'a demander de faire preuve d'imagination avec l'utilisation des périphériques.

    Donc avec un microcontrôleur à une fréquence système de 48Mhz ou plus il est plus intéressant d'utiliser le standard VGA cependant. Mais en bas de cette fréquence vaut mieux s'en tenir au NTSC malgré la difficulté de générer un tel signal.

    Difficultés de la génération d'un signal de qualité.

    Je m'en tiendrai ici qu'au monochrome. La façon la plus simple que j'ai trouvé de générer un signal NTSC est d'utiliser une minuterie avec périphérique PWM (Output Compare) pour générer le signal de synchronisation et la sortie MOSI d'un périphérique SPI pour sérialiser les pixels vidéo. Évidemment cette méthode utilisant un SPI n'est valide que pour les signaux vidéo monochromes.

    La gigue

    La précision de la synchronisation du signal vidéo est fondamentale pour obtenir un signal de qualité. Le problème est d'obtenir un délais constant au niveaux des interruptions vidéos. En effet le temps de réponse aux interruptions, ce qu'on appelle la latence, n'est pas constant. Alors que pour les µC PIC cette latence ne varie que d'un cycle pour les STM8 elle peut variée de plusieurs cycles car l'instruction en cours d'exécution au moment ou le signal d'interruption est généré doit-être complétée avant de répondre à l'interruption. Pour les µC PIC le temps d'exécution des instructions est constant sauf pour les sauts et appels de sous-routine qui prennent un cycle de plus. Pour les µC STM8 le temps d'exécution d'une instruction varie entre 1 et 5 cycles. Il y a donc une plus grande variabilité de la latence. Ce qui génère la gigue (jitter en anglais). Dans le cas d'un signal vidéo cette gigue est très visible et embêtante. Heureusement il y a une méthode pour la contrecarrer.

    Dans la routine ntsc_video_interrupt qui est une interruption générée par la minuterie TIM1 qui synchronise le signal vidéo. j'utilise le code suivant pour annuler la gigue.

    
         ld a,TIM1_CNTRL 
        and a,#7 
        push a 
        push #0 
        ldw x,#jitter_cancel 
        addw x,(1,sp)
        _drop 2 
        jp (x)
    jitter_cancel:
        nop 
        nop 
        nop 
        nop 
        nop 
        nop 
        nop
     
    Le principe de fonctionnement est le suivant. Le compteur de la minuterie demeure régulié même si le temps de latence varie. Donc si au moment d'entrée dans la routine d'interruption on lit la valeur du compteur (il suffit de lire l'octet faible), le compte va varier en fonction de la latence. Si la latence prend 3 cycles supplémentaire le compte aura augmenter de 3. Comme cette latence ne variera jamais plus que de 5 cycles on ne tiens compte que des 3 derniers bits avec l'opératipon and a,#7. On charge le registre X avec l'adresse cible jitter_cancel. On fait un saut indirect en utilsant la valeur dans X indixé par la valeur des 3 bits les moins significatifs du compteur. Si le compte est nul 6 instructions nop seront exécutées avant de débuter l'envoie des pixels vidéo. Chaque nop s'exéctute en un seul cycle. Si le compte est de 7 le saut se fera après les nop. Il s'agit donc de créer un délais supplémentaire variable inversement proprotionnel à la durée de la latence pour annuller la variabilité de celle-ci. Ainsi l'envoie des pixels vidéo débute toujours au même point par rapport au début de la ligne de balayage.

    Interférence

    Un problème plus difficile à résoudre est celui des interruptions qui se produisent avant le début d'une ligne vidéo et n'ont pas le temps de se terminer avant le début de la ligne vidéo. La révision V1.0R14 de stm8 terminal avait pour but de corriger un tel problème causé par l'interruption de la minuterie TIM4 qui était générée à un intervalle de 1 msec. Cette interruption se produisait donc plusieurs fois pendant la période visible du signal vidéo ce qui produisait un glissement des pixels vidéos sur les lignes affectées par cette interruption. La seule façon que j'ai trouvé de régler ce problème est de simplement ne plus utiliser la minuterie TIM4. Celle-ci ne servait qu'à synchroniser le clignotement du curseur texte. Hors cette opération pouvait tout aussi bien être réalisée en utilisant l'interruption de la minuterie TIM1 qui sert pour générer la synchronisation vidéo. J'ai donc modifier le code dans ce but.

    Problèmes non résolus

    Il reste 2 problèmes qui interfèrent encore avec le signal vidéo et pour lesquels je n'ai pas de solution. Le premier est l'interruption de lecture du clavier PS/2 et le second est l'interruption sur réception d'un caractère sur le UART.

    1. Sur l'ordinateur pomme I qui utilise le stm8 terminal, si on écris un programme BASIC qui envoie en boucle des caractères au terminal sans arrêt on voit très nettement que la réception de ces caractères crée de l'interférence dans l'affichage vidéo.
    2. Lorsqu'on saisie une ligne au clavier sur le pomme I on voit aussi que le signal vidéo est perturbé mais dans une moindre mesure.

    stm8 gamepad

    $
    0
    0

    Il s'agit d'une petite console de jeux rétro fabriquée à partir d'un microcontrôleur STM8S207K8 ou d'une carte NUCLEO-8S207K8 qui utilise le même µC mais inclu un programmeur ST-LINK. J'ai fabriqué 2 prototypes un de chaque modèle.

    Prototype 1

    Prototype 2

    Spécifications

    • Sortie vidéo composite NTSC monochrome
    • Résolution graphique de 200x192 pixels
    • Sortie son générant des tonalités ou du bruit blanc
    • Pad de 6 boutons, croix et boutons A,B.
    • Les programmes de jeux doivent-être compilés avec le projet et réside dans la mémoire flash du µC.

    Source du projet

    Comme tous mes projets celui-ci est sous licence GPLv3 et le dépôt est sur github.

    démo

    Pour le moment je n'ai écris qu'un seul jeu appellé SNAKE. Dans la vidéo il manque un élément à droite qui a été coupé par Youtube lors de la conversion du format. Il s'agit d'une barre de chronomètre qui décroit. Lorsque cette barre arrive à zéro il y a un TIME OUT et la parti est terminé. Ce chronomètre est réinitialisé chaque fois que le serpent mange la souris.

    SNAKE

    règles

    1. Si le serpent entre en collision avec un des murs la parti se termine.
    2. Si le serpent se mort lui-même la parti se termine.
    3. Si le serpent entre en collision avec avec une crotte la parti se termine.
    4. Le serpent doit manger la souris avant que le chronomètre expire.

    Contrôle

    • FLÈCHE HAUT Augmente la vitesse du serpent.
    • FLÈCHE BAS Diminue la vitesse du serpent.
    • FLÈCHE GAUCHE Le serpent vire à gauche.
    • FLÈCHE DROITE Le serpent vire à droite.

    Pointage

    Le nombre de points gagné dépend de la vitesse du serpent. Celle-ci peut-être ajustée entre 1 et 9.
    Si la souris est le long d'une barrière le nombre de points est doublé.
    Si la souris est dans un coin le nombre de points est triplé.
    Pour les vitesses supérieures à 5, le serpent laisse une crotte chaque fois qu'il mange la souris. Ces crottes sont mortelles pour le serpent. La vitesse par défaut est 5.

    Vidéo

    stm8 gamepad v1.1R0

    $
    0
    0

    J'ai continué à travaillé sur la console stm8-gamepad

    • Ajout d'un splash screen au démarrage.
    • Ajout du simulateur du jeu de la vie de John H. Conway.

    Vidéo de démonstration

    Turing complete

    Game of life est Turing complete c'est à dire qu'un ordinateur peut-être réalisé dans un univers game of life et ça a été fait. Dans le vidéo suivant réalisé par Nicolas Loizeau on voit un tel ordinateur ordinateur dessiner un carré à l'intérieur d'un cercle. L'auteur ne nous donne pas la dimension de la grille mais elle est énorme. Ce n'est pas le grenre de truc qui peut-être réalisé dans une grille de 32x22 cellules.

    Game of life in Game of life

    Et puisque game of life est Turing completeça veut aussi dire qu'on peut créer un univers game of lifeà l'intérieur d'un autre. Ça aussi a été fait. .
    Imaginez on peut répéter ça à n'importe quel niveau de récursion la seule limitation étant le matériel requis. Jusqu'à quel niveau de récursion pourrait-on aller sur un super ordinateur?

    jeu CADENA sur stm8 gamepad

    $
    0
    0

    J'ai ajouté un nouveau jeu sur la console stm8-gamepad. Il s'agit d'une variante du jeu Mastermind qui consiste à deviner la combinaison d'un cadena à 4 chiffres. Le joueur dispose de 12 essais et une parti dure 3 manches.

    Viewing all 192 articles
    Browse latest View live