IC-9700 sélecteur de sortie PTT suivant la bande – 25/05/2020

ON5AV/OR5V

IC-9700 sélecteur de sortie PTT suivant la bande.

Je suis en possession d’un IC-9700.
Celui-ci peut transmettre sur 144, 432 et 1296 Mhz.
Comparé à d’autres émetteurs de la même firme celui-ci ne possède pas de sortie PTT, mais bien une commande réservée pour des amplis de la même marque.
Dans la documentation ils conseillent de placer un relais entre la sortie de l’émetteur et l’ampli ou le périphérique qui y sera connecté.
Ci-dessous le schéma donné par Icom.

Il est a remarquer que la sortie SEND n’est mise à la masse que quand le PTT en enfoncé, et que l’autre broche est au plus 13,8V. Il est donc nécessaire utiliser un système de connectique isolé de la masse. Sur EBAY il y un câble avec la fiche DIN, et un connecteur cinch isolé par un optocoupleur. Pour le moment j’utilise un connecteur isolé de la masse pour faire la commutation.

Principe de système :

Contrairement aux précédents modèles le 9700 ne dispose pas d’un signal « send » différent pour chaque bande, il faut utiliser 3 relais différents.
Seul le relais qui correspond à la bande utilisée transmet le PTT. If faut donc détecter la bande à l’aide du protocol CI-V de l’Icom.
Le principe est basé sur le même schéma que pour la sélection d’antenne écrit par Michel ON6MH dans son article paru dans le ON5UB-NEWS et pouvant être retrouvé à l’adresse suivante : http://1130.be/ant_switch/switch_controler_scode.pdf
Cette application doit décoder toutes les bandes de fréquences attribuées du 160m au 6m, ce qui impose un décodage plus précis.

En CI-V, le codage de la fréquence est prévu sur 5 bytes.
Pour le décodage de ON6MH il fallait décoder le byte 4, de mon côté uniquement le byte 5.
Les valeurs données en HEXA son 01 pour le 144 Mhz, 04 pour le 432 Mhz et 12 pour le 1296 Mhz.
Ces valeurs devront être transformées en décimale, et ce qui donne 01, 04, 18.

Schéma du système.

Le cœur du système est basé sur un Arduino Nano. Mais n’importe quel Arduino peut être choisi.
Une seule contrainte il doit pouvoir accepter une tension de 5 volts à son entrée RX ou utiliser un moyen de le faire passer en 3,3 volts (diviseur de tension).
L’alimentation de l’Arduino se fait via le 12 volts général de la station. En théorie son entrée VIN peut accepter 12 Volts. Mais comme toutes nos alimentations sortent en 13,8 volts j’ai ajouté 4 diodes du type 1N4001 pour faire descendre la tension vers les 10 volts. C’est l’Arduino qui génère le 5 volts pour alimenter IC1 les diodes et les relais.
L’entrée RX de l’Arduino se fait via une résistance de 100r et une 4,7Kr comme pull-up. Le relais K1 ouvre le circuit quand il n’y a pas d’alimentation et ceci afin d’éviter les perturbations sur le bus CI-V.
La raison du relais est que de mon côté le CIV est aussi câblé avec l’IC-9700, IC-7300 et l’ampli SPE.
IC1 sert de buffer entre la sortie de l’Arduino et les relais. IC1 possède les diodes pour absorber l’extra courant de rupture au moment de la coupure de tension. Les relais K2, K3 et K4 se ferment suivant la bande sélectionnée et laissent ainsi passer le PTT qui est activé par K5. Les diodes led indiquent la bande sélectionnée.

IC1 est un ULN2803A.

Source code.

/*
CI-V Icom band decode for PTT

Language: Wiring/Arduino

ON6MH – ON5AV V1.0 05/2020
*/

int band; // current band 1 = 2M 2 = 70CM 3 = 23CM

// for CI-V decode

int inByte = 0; // incoming serial byte
int soByte = 0;
int deByte = 0;
int cmByte = 0;
int f1Byte = 0;
int f2Byte = 0;
int f3Byte = 0;
int f4Byte = 0;
int f5Byte = 0;
int stByte = 0;

void setup()
{
// start serial port at 9600 bps:
Serial.begin(9600);

//for relais driving

pinMode(2, OUTPUT); digitalWrite(2, LOW); // relay 144
pinMode(3, OUTPUT); digitalWrite(3, LOW); // relay 432
pinMode(4, OUTPUT); digitalWrite(4, LOW); // relay 1296

// set band to 0 (unknown) no CI-V decoded yet

band = 0;

Serial.println(« setup completed …………………. »);
}

void loop()
{
if (Serial.available() > 0) {
inByte = Serial.read();
if (inByte == 254) { // see if we have $FE
delay(3); // wait 3 ms to be sure next byte arrived
inByte = Serial.read(); // read byte
if (inByte == 254) { // if is $FE then we get preamble ok
delay(3); // wait 3 ms to be sure next byte arrived
deByte = Serial.read(); // read destination of message
delay(3);
soByte = Serial.read(); // read source of message
delay(3);
cmByte = Serial.read(); // read command
if (cmByte == 0 || cmByte == 3 || cmByte == 5) { // $00 $03 $05 = frequency data
delay(3);
f1Byte = Serial.read(); // read f byte 1
delay(3);
f2Byte = Serial.read(); // read f byte 2
delay(3);
f3Byte = Serial.read(); // read f byte 3
delay(3);
f4Byte = Serial.read(); // read f byte 4
delay(3);
f5Byte = Serial.read(); // read f byte 5
delay(3);
stByte = Serial.read(); // should be $FD end of message

if (stByte == 253) { // stop byte ok

switch (f5Byte) {

case 0: // 100 Mhz = 0
Serial.println(« ——————-Rien »);
digitalWrite(2, LOW); // relay 144
digitalWrite(3, LOW); // relay 432
digitalWrite(4, LOW); // relay 1296

break;

case 01: // 144 detected
Serial.println(« ——————-144MHZ »);

digitalWrite(2, HIGH); // relay 144
digitalWrite(3, LOW); // relay 432
digitalWrite(4, LOW); // relay 1296

break;

case 04: // 432 detected
Serial.println(« ——————-432MHZ »);
digitalWrite(2, LOW); // relay 144
digitalWrite(3, HIGH); // relay 432
digitalWrite(4, LOW); // relay 1296
break;

case 18: // 1.296 detected
Serial.println(« ——————-1296MHZ »);
digitalWrite(2, LOW); // relay 144
digitalWrite(3, LOW); // relay 432
digitalWrite(4, HIGH); // relay 1296
break;

/*
Serial.print(« destination: « ); //for debug
Serial.println(deByte, HEX);
Serial.print(« source: « );
Serial.println(soByte, HEX);
Serial.print(« command: « );
Serial.println(cmByte, HEX);
Serial.print(« f byte 1: « );
Serial.println(f1Byte, HEX);
Serial.print(« f byte 2: « );
Serial.println(f2Byte, HEX);
Serial.print(« f byte 3: « );
Serial.println(f3Byte, HEX);
Serial.print(« f byte 4: « );
Serial.println(f4Byte, HEX);
Serial.print(« f byte 5: « );
Serial.println(f5Byte, HEX);
Serial.print(« end byte FD: « );
Serial.println(stByte, HEX);
*/
}
}
}
}
}
}
}

L’utilisation du schéma et du source est de votre responsabilité.
Je ne suis nullement responsable des dégâts qui pourraient être occasionnés sur votre installation.

73 ‘- ON5AV