Correspondances schéma électrique So.co.tel S63

Bonjour tout le monde!

Je suis actuellement sur un projet de résurrection de mon bon vieux téléphone à cadran So.co.tel S63 (PTT for ever :post_office: ).

Cependant, je suis une grosse bille en ce qui concerne les schémas électriques/électroniques :electric_plug: .

J'ai réussi, tant bien que mal, avec mon multimètre, à déterminer plus ou moins où se trouvaient les connectiques dont j'avais besoin (Interrupteur combiné, interrupteur cadran, impulsions... ).

Mais là ou je suis moins sûr de moi, c'est sur les emplacements de la masse... il y a bien un schéma:


J'ai l'impression que les v en bout de schéma la représente... mais je n'en suis pas sûr.

Autre question: j'ai parfois des parasites dans le circuit (il est vieux le pauvre bougre), pensez vous qu'il serait judicieux, dans le cas ou je configure des pins en INPUT de mettre un condensateur ou une résistance?

Je vous remercie infiniment d'avance!

Thomas

Attention à ces antiquités.

Ces terminaux sont prévus pour le réseau commuté de grand-papa.
C'est-à-dire qu'ils étaient autoalimentés à partir du central en moins 48V.

=> ils sont totalement incompatibles avec les abonnements actuels.
L'abonnement réseau commuté n'est plus commercialisé depuis plusieurs années.
Digression : l'ADSL sera éteint en 2030.

Le 48 V des centraux avait LE PLUS à la masse.
C'est pour cela que l'on parle de moins 48 V.
Pour quelle raison il y avait le plus à la masse ? Je n'ai pas la réponse.

La norme pour la numérotation était 60/40 en France et 50/50 à l'international.
60/40 => c'est comme une PWM : 60ms de "1" et 40 ms de "0".
le "0" est la masse
le "1" est le moins 48 V

Quand il y avait de l'électronique, elle était alimentée en moins 24 V.

Les premiers équipements sur lesquels j'ai travaillé, au tout début des années 70, utilisaient des "vénérables" transistors PNP 2N2907, 50 ans après, on les trouve encore, toujours pas démodés.

Edit wikipédia :
La moitié du parc installé en 1991 (quinze millions de postes) est équipée d'une numérotation à fréquences vocales. De nos jours, le S63 à fréquence vocale est totalement compatible avec les box Internet, ceux à numérotation décimale fonctionnent uniquement en réception d'appel.

Merci beaucoup pour ces précisions :slight_smile:

Je sais qu'il ne fonctionne plus sur le réseau actuel, mon projet est de transformer les impulsions en signaux DTMF pour que la box le comprenne, un vrai challenge, d'autant que je tente de n'utiliser aucun composants autre que ma bonne vieille UNO.

J'ai trouvé la "vraie" masse (apparemment le fil jaune) mais à cause de l'UNO, il y a toujours un courant résiduel dans le circuit du téléphone, donc c'est chaud de détecter avec les pins digitaux.

Bonsoir harkhenon

Je ne pense pas qu'il soit nécessaire de trouver la masse, pour autant que je me souvienne, on pouvait croiser les fils A et B sans problème (PTT suisse), donc pas de position équivalent à une masse.
Le mieux à faire, au départ est d'isoler le contact NF du cadran du reste de la station, en prenant les fils arrivant sur I et II et de ponter ces anciennes positions (I et II) afin de maintenir la boucle.
Au moyen du contact NF, d'un côté au GND de l'Arduino, l'autre sur une entrée digitale en PULL_UP, compter les ouvertures (à traiter comme un très mauvais contact :wink:) afin de générer les numéros, en DTMF.
Ainsi. la partie Arduino est isolée de la partie téléphone.

Comment pense tu générer le DTMF et l'injecter sur la ligne, tu sera presque obligé de passer par un transformateur pour injecter ce signal.
Pour la partie "audio", pas sûr que ton routeur soit vraiment adapté.

Cordialement
jpbbricole

Alors là a cette époque il n'y avait pas deux pays qui avaient les mêmes normes.

Refusé :laughing:

Bonsoir 68tjs

Au vu du schéma du post #1, rien n'empêche de croiser les fils?

Cordialement
jpbbricole

Méfiance, le réseau français était téléalimenté.

@harkhenon ne nous a pas dit sur quel type d'abonnement il veut mettre son S63.

Abonnement non commercialisé ne veut pas supprimé pour ceux qui le possède déjà.

Bonsoir 68tjs

C'était aussi le cas en Suisse comme partout ailleurs, sauf exception.

Cordialement
jpbbricole

Oulà, il y a eu de la conversation durant mon absence! :smiley:

Concernant le DTMF (je commence par la fin), je suis en train de me renseigner sur le type de données que l'on peut envoyer soit de manière vocale, soit de manière électriques/numériques, et par où. De ce que je sais, le signal audio fonctionne, puisque en passant un son à la bonne fréquence via le micro du S63, le routeur Free les détecte (Pas tous hein, le micro est antédiluvien...) et je suis connecté en fibre.

Ce projet est une expérimentation, pas un projet d'avenir, ça me fais passer le temps et j'apprends énormément avec ce circuit à la fois simple et complexe.

Pour le moment, mon expérience fonctionne plus ou moins:

  • Connecté au 15 (""""masse"""") et au IV en pullup, je détecte les décrochages/raccrochages
  • Sur le II en pullup, j'ai l'interrupteur cadran
  • sur le I en pullup, j'ai les impulsions
  • Découverte de cet après midi, le 13 me donne tout ça, avec une sortie des pulsations, un 5V en décrochage et un 48V en raccrochage, je cherche encore comment je pourrais m'en servir (car passer 48V dans l'UNO... je ne donne pas cher de sa peau).

Je suis quelqu'un de sentimental, ce téléphone était celui de l'atelier de forgeron de mon défunt oncle, je l'ai toujours connu, fiable et jauni (surtout par la clope...), si je peux le faire revivre ne serait-ce qu'un peu, quel bonheur!

La bande passante, pas seulement des micros mais de tout le système etait 300 Hz- 3400 Hz. Elle est dite a 4 kHz.
C’est la bande passante suffisante pour comprendre un interlocuteur.
Dans les liaisons téléphoniques sousmarines cette bande passante était abaissée à 3 kHz.

Je ne connais pas les normes helvètes, je sais que chaque pays qui avait une industrie dans "le téléphone " faisait du protectionnisme déguisé en adaptant ses normes.

Bonjour harkhenon

Je procède de la même façon :wink:

Pour le DTMF et Arduino, il y a un article ici, montage qui pourrait être extrapolé.

Une solution pourrait être, pendant la sélection, de dévier, au moyen d'un relais, les lignes A et B du téléphone, sur l'installation Arduino qui aurait, elle, pour remplacer le téléphone, un petit transformateur audio 600/600,
image

qui servirai pour l'injection du DTMF. Ainsi on touche un minimum à la station (respect dû à l'âge), il suffirait

Cordialement
jpbbricole

@68tjs Merci pour ce morceau d'histoire et ces specs :nerd_face:

@jpbbricole Excellent article sur le DTMF, je l'ai survolé (je suis au travail) et je l'ai trouvé bien intéressant et bien construit.

Qu'appelles-tu le NF, le A et le B? Je ne les vois pas sur le téléphone.
J'ai suivi ton conseil et ai retiré le I et le II et connecté à l'UNO à part, en pontant les deux, en effet ça va mieux!

Bonjour harkhenon

NF veut dire contact Normalement Fermé, ce qui est le cas du contact du disque
image
Les impulsions du disque coupent la boucle établie lors du décrochement du combiné. Ce qui veut dire que si tu as configuré l'entrée de l'Arduino en PULL_UP, tu vas "lire" des 1 (HIGH) lors d'une impulsion.
A et B sont une terminologie "suisse" ça représente les 2 fils du raccordement téléphonique
image
2 et 1

Cordialement
jpbbricole

Oui, je vois! Comme les relais 220V que j'utilise, NC/NO (Normally Closed/Normally Opened) c'est bien ça?

Ah, merci de l'info, je viens de voir la correspondance des fils. Désolé! J'apprends à lire les schémas électroniques mais quelques trucs m'échappent encore :face_with_hand_over_mouth:

Avec tout ça, si je n'y arrive pas, autant me mettre au tricot... :joy:

Encore merci, je n'ai jamais autant appris!

Bonne nouvelle, j'ai réussi, grâce à vos conseils et aux ressources que vous m'avez fournis, à générer un signal DTMF (carré pour le moment, je vais faire le montage pour le passer en sinusoïdal) via le haut parleur du téléphone (je l'ai débranché pour l'essai).

Je fais actuellement des tests pour tout re-détecter car le fait d'avoir débranché I et II m'a ôté la possibilité de détecter le cadran , je cherche donc via le schéma comment le rechoper.

Bonsoir harkhenon

Ne pas oublier de ponter I et II. Pour ce qui est la détection du cadran, celui-ci doit être directement connecté à l'Arduino comme préconisé dans le post #4

Ainsi fait, le cadran est directement connecté à l'Arduino et tu peux traiter ses impulsions.
Le reste du téléphone n'est pas nécessaire pour le programme.

Cordialement
jpbbricole

Je viens aux nouvelles !

Après quelques essais, j'ai abandonné les signaux de décrochage et du cadran, pour ne garder que les impulsions.

J'ai quelque peu modifié mon code et cela fonctionne!

J'ai chopé le code que tu m'a donné via le lien @jpbbricole et je l'ai adapté sur le mien, je peux donc envoyer des signaux DTMF sur la box.

Il ne me reste plus "qu'à" transformer ces signaux carrés en sinusoïdes grâce au montage du même lien, puis de le connecter.

J'ai dû également adapter le delay() en décrémentant des millisecondes car l'UNO perds du temps entre chaques boucles, j'ai donc réutilisé les impulsions dans ma fonction :

void detectPulses(int pulsePin) {
  int pulseDelay = 99;
  if(digitalRead(pulsePin)) {
    pulsesBuffer += 1;
    delay(pulseDelay - (pulsesBuffer + 4));
    detectPulses(pulsePin);
  } else {
    nbOfPulses = pulsesBuffer;
    pulsesBuffer = 0;
  }
}

En prenant en compte que les impulsion "Hautes" font 66ms et les "Basses" font 33ms (donc 99ms) mais que l'UNO laisse passer ~5ms à chaque boucle j'ai décrémenté pulseDelay par le nombre d'impulsions moins 3 (après tests, je n'ai pas de formule).

J'ai ensuite testé la connexion des deux fils des sons DTMF, sur le 7, le 13 et le II pour voir lequel serait le plus efficace. Pour le moment, les 13 et II me semblent les plus prometteurs, car brancher sur le 7 enlève de la puissance au micro et à l'oreillette.

Et ça fonctionne! (Bon, sans amplificateur et sans les sinusoïdes, il arrive parfois que j'appelle des numéros autres que le mien... oups! :sweat_smile: ).

L'étape suivante sera de monter ces deux éléments et de tester.

La suite au prochain épisode!

(Et merci encore pour les ressources!!!!)

Et un petit aperçu :

https://drive.google.com/file/d/1e61vAMTrV6J_vcMx0YNSNlQah-8MOiy9/view?usp=sharing

Bonsoir harkhenon

En fait le décrochage n'est pas utile dans cet exercice, puisque l'on peut "envoyer" du DTMF n'importe quand, seuls les signaux arrivés au bon moment seront utiles.

Je m'était amusé à l'exercice, je te donne le résultat de mes cogitations.

/*
    Name:       Test_PhoneDial.ino
    Created:	30.08.2022
    Author:     jpbbricole
*/

const int dialPulseOpen = 60;     // Temps d'ouverture de la boucle
const int dialPulsePeriod = 100;     // Temps d'une période
unsigned long dialPulsePeriodTimer = 0;     // Timer d'action des impulsions
const int dialPulseStateOn = HIGH;     // Etat de l'impulsion
const int dislPulsePin = 8;     // Entrée des impulsions

int dialPulsesCounter = 0;     // Compteur d'impulsions

void setup()
{
	Serial.begin(115200);
	delay(500);
	
	pinMode(dislPulsePin, INPUT_PULLUP);
}

void loop()
{
//Serial.print(digitalRead(dislPulsePin));
	if (digitalRead(dislPulsePin) == dialPulseStateOn)     // Si impulsion du disque
	{
		delay(20);     // Anti-rebonds
		dialPulsePeriodTimer = millis();     // Démarrage ou redémarrage timer de sélection
		dialPulsesCounter ++;     // Ajouter l'impulsion
		while(digitalRead(dislPulsePin) == dialPulseStateOn){}
	}
	
	// Sélection en cours terminée
	if ((dialPulsePeriodTimer > 0 ) && (millis() - dialPulsePeriodTimer >= (dialPulsePeriod * 3)))
	{
		dialNumberToDtmf(dialPulsesCounter);
		dialPulsesCounter = 0;
		dialPulsePeriodTimer = 0;     // Désactiver le timer
	}
}

void dialNumberToDtmf(int number)
{
	Serial.println("DTMF " + String(number));
}

Cordialement
jpbbricole

Ah oui, ton code est plus pointu que le mien :sweat_smile:

#include <Tone.h>

// Uncomment next line to enable serial console debugging.
 #define DEBUG 9600
 
const byte ROWS = 4; 
const byte COLS = 4;

char keyMatrix[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6}; 
byte colPins[COLS] = {5, 4, 3, 2}; 

// Tone frequencies
const int dtmfRow[ROWS] = {697, 770, 852, 941};
const int dtmfCol[COLS] = {1209, 1336, 1477, 1633};

Tone rowPlayer;
Tone colPlayer;

const int ROW_TONE_DIO = 9; // Row pin
const int COL_TONE_DIO = 8; // Col pin

const long TONE_DURATION = 250;   // Milliseconds

#define PULSE 12

int nbOfPulses = 0;
int pulsesBuffer = 0;

void setup() {
  
  #ifdef DEBUG
    Serial.begin(DEBUG);
  #endif
  
  // pinMode(DECROCHAGE, INPUT_PULLUP);
  pinMode(PULSE, INPUT_PULLUP);
  // pinMode(CADRAN, INPUT_PULLUP);

  rowPlayer.begin(ROW_TONE_DIO);
  colPlayer.begin(COL_TONE_DIO);
}

void loop() {
 

  detectPulses(PULSE);

  if (nbOfPulses){
    if(nbOfPulses == 10) {
      nbOfPulses = 0;
    }
    // Generate corresponding DTMF tone
    dtmfON(nbOfPulses + '0');
    delay(TONE_DURATION);
    dtmfOFF();
    nbOfPulses = 0;
    }
}


void dtmfOFF() {
  rowPlayer.stop();
  colPlayer.stop();
  return;
}

void dtmfON(char c) {
#ifdef DEBUG
  Serial.println();
  Serial.println("In dtmfON() - c = '" + String(c) + "'");
#endif
  int row = -1;
  int col = -1;
  for (int i=0; i<ROWS; i++) {
    for (int j=0; j<COLS; j++) {
      if (c == keyMatrix[i][j]) {
        row = i;
        col = j;
        break;
      }
    }
    if (row >= 0)
      break;
  }
  if (row < 0)    // Unencodeable character
    return;

  rowPlayer.play(dtmfRow[row]);
  colPlayer.play(dtmfCol[col]);
}

void detectPulses(int pulsePin) {
  int pulseDelay = 99;
  if(digitalRead(pulsePin)) {
    pulsesBuffer += 1;
    delay(pulseDelay - (pulsesBuffer + 4));
    detectPulses(pulsePin);
  } else {
    nbOfPulses = pulsesBuffer;
    pulsesBuffer = 0;
  }
}

C'est un petit mélange de tout, disons ... :face_with_peeking_eye: