samedi 29 avril 2023

reverse engineering crusader mini

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

    Comme j'ai l'habitude de le dire, il ne faut pas se fier aux apparences. Ce radio multibandes AM/FM/SW1/SW2 Grunding YB-P2000 à l'air tout numérique avec son affichage LCD et son pavé de touches. Il n'y à même pas de roulette pour la sélection des postes. La sélection se fait avec les boutons H et M à droite de l'affichage. Ce récepteur date de la fin des années 90.

    Il s'agit pourtant d'un récepteur super-hétérodyne. La seule différence avec les récepteurs superhétérodynes des années 70 ou 80 est que le condensateur variable a été remplacé par des diodes varicap et les circuits sont intégrés et montés en surface. Aucun traitement numérique du signal dans ce récepteur.

    J'ai enlevé le circuit imprimé du MCU de contrôle et on aperçois sur cette photo the usual suspects, si je peux dire, qu'on retrouvait sur les circuits des années 70. Transformateurs IF, condensateurs ajustable,inductances.

    Sur l'autre face du circuit imprimé on aperçoit les composants montés en surfaces.

    Voici la schématique de la partie radio-fréquence.

    La sélection des bandes est entièrement mécanique. IC1 est un front end pour la bande FM et IC2 sert d'amplificateur IF et démodulateur pour le FM ainsi que de front end, ampli IF et démodulateur pour les bandes AM/SW1/SW2.

    Dans ce récepteur le microcontrolleur ne sert qu'à afficher l'information, mémorisation des stations, alarmes et à contrôler le voltage qui est appliqué sur les diodes varicap. Ce voltage détermine la capacitance des diodes et donc la fréquence d'accord des circuits. Il y a 2 varicaps pour la bande FM et 2 autres pour les bandes AM/SW1/SW2.

    Il serait impossible de fabriquer de nos jour un récepteur multibandes de ce type à faible coup, ce récepteur m'avait d'ailleurs coûté bien plus cher que le crusader mini. Je dirais même qu'il serait probablement impossible de les fabriquer car il n'y a plus de fabriquants pour ces anciens composants.

    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).

    jeudi 27 avril 2023

    STM8 Tiny BASIC V4.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 mascotte 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:

    samedi 22 avril 2023

    STM8 Tiny BASIC V3.2R1

    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  
    

    mercredi 19 avril 2023

    vérificateur de continuité

    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éaliser ce type de circuit, Il aurait pu être réalisé 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 s'allume 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. En effet la tension aux bornes de cette DEL demeure constante à environ 2 volts même si la pile faiblie. Les valeurs de R2 et R3 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'ils conduisent 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 contribuer 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 diminuer rapidement jusqu'à couper complètement. Encore une fois le phénomène est très rapide donc la tension tombe à la verticale en C. À 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 TP2 Q1 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 aux 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 demeuré à 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.

      Pour ceux qui aiment le 555

      Voici une autre version réalisée avec une minuterie TLC555CP. La particularité de ce circuit est qu'il accepte de fortes résistances en produisant une fréquence de plus en plus basse à mesure que la résistance entre les sondes augmente. Par exemple si on pince entre les doigts de chaque main les sondes ça produit une série de clics.

      Voici une variante utilisant encore le TLC555CP. Cette version ne produit qu'une seule tonalité et l'alarme ne déclenche que pour les faibles résistances. Elle utilise la broche ~reset qui est maintenue à 0 volt à travers R4. Lorsque l'anode de D1 est mise à +9V le voltage sur la broche ~reset monte à environ 7 volt ce qui est suffisant pour activer la minuterie. D1 doit-être une DEL rouge.

      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.

    mardi 18 avril 2023

    STM8 Tiny BASIC V3.2R0

    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.

    mercredi 5 avril 2023

    détecteur de clou

    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

    lundi 3 avril 2023

    À l'antipode

    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 faisait 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.