Telex tt3015

Hubie

Special Member

Op 10 april 2018 21:40:49 schreef BJ2:
Beste co'ers,

Vandaag heb ik een verreschrijver tt3015 teletype telex opgehaald. Deze wil ik bij de Franse slag mars bij ons op het dorp graag tentoonstellen. Nu wil ik graag een kleine computer maken waar kinderen op een knop kunnen drukken en er vervolgens een kort bericht wordt getypt op de telex. Naar aanleiding hiervan heb ik enkele vragen.

- is de tt3015 gebaseerd op het model 15 van teletype?
- wie kan mij opweg helpen met de hardware en software om te communiceren met de telex. Ik heb wat gelezen over de werking maar tips zijn welkom!

Ik heb een arduino of raspberry beschikbaar voor de computer.

Alvast bedankt!

Zoals electron920 al aangaf heb je een currentloop nodig om de telex te laten werken.(zie foto)
In de boeken die ik heb over telex gaat het vooral over Siemens,Lorenz en Creed en Kleinschmidt machines.
De beste tip die ik kan geven is,koop die boeken, en lees ze door.

Edit\Ik was het bijna vergeten maar dit boek(zie foto) is zo'n beetje de telex(RTTY) bijbel.(RSGB Teleprinter Handbook)

Leuk detail op foto 4.
Maintenace and Servicing was niet met de soldeerbout maar met een kannetje olie en een potje vet. ;-)

mel

Golden Member

Als je de Baudot code kan genereren, heb je enkel een interface nodig voor de lijnspanning.
Eventueel een convertertje ervoor zetten die van ASCII /Baudot maakt.
Dan kan je gewoon net doen of het een printer is.

u=ir betekent niet :U bent ingenieur..

Bedankt voor alle snelle reacties! Dus als ik het goed begrijp is de telex stroom gestuurd. Kan ik dan gewoon met een FET o.i.d. het circuit aan en uit schakelen volgens de baudot logica en dan schrijft de machine een letter? Of moet de stroom variëren tussen twee waardes?

Aan/uit is voldoende. Data is serieel.

Ik heb ook ooit zo een printer gehad, zonder toetsenbord,
Werkte op 37.5 bits per seconde.

Frederick E. Terman

Honourable Member

Kun je niet ergens een RTTY-converter scoren? Die dingen zijn bij amateurs bij honderden in gebruik geweest en zullen nu bijna niets kosten.

Je hoeft dan verder alleen maar een willekeurig RTTY-pgoramma op een laptop of tablet te zetten en het audio toe te voeren - desnoods via het speakertje en een microfoon.

Keramisch, kalibratie, parasitair: woordenlijst.org

Ha BJ2,

Op deze link https://www.tweedehands.nl/zendamateur/zend-ontvangapparatuur/ex-army-… is een convertor te koop €20,- deze is inclusief scope voor mark/space misschien bruikbaar.
Ik weet niet waar je signaal vandaan komt radio ontvanger of pc.

Groet Henk.

Everything should be as simple as possible, but not simpler.
Hubie

Special Member

Hee,die heb ik ook nog gehad,gekocht bij quakelstein,Vlaardingen.
Hou er wel rekening mee dat die converter op 115 Volt werkt.

Ha hubie,

Efe lamp is serie zoveel stroom vraagt ie niet.
Maar die werkt wel en de bediening is niet moeilijk.

Groet Henk.

Everything should be as simple as possible, but not simpler.

Beste Electron920,

Ik ben nieuw tot het telex gebeuren. Heb me al deels ingelezen maar hoe zou die converter moeten werken? Ik wil graag een toetsenbord o.i.d. als input gebruiken. Hier kan een computer tussen, zoals een raspberry pi. Dan een apparaat welke dit overzet naar een signaal waarmee de telex het op papier schrijft.
Ik ga het apparaat even opzoeken of ik er wat over kan vinden.

Ha BJ2,

Zoals @FET schrijft dit is alleen je stroombron die je sleutelt en een vector scope zit er in heb je met signalen uit de computer niets aan mark en space staan altijd lood recht op elkaar geen fase vervorming.
Je laagfrequent uit je geluidkaart gaat naar de audio ingang van de convertor de telex sluit je aan op de uitgang van de convertor op de convertor stel je de baudsnelheid in en dergelijken.
De tester waar ik het over had is een Trend (Telegraph & Data Message Generator No2A hier zit alles in inclusief de test tekst stroombron voor de loop kan alle snelheden inclusief speed RTTY.
Als je in de knoei komt qua tijd mag je hem gebruiken hij is nieuw.
Ik heb heel veel machines afgeregeld voor een dump zaak in Rotterdam dus niet Vlaardingen Piet ken ik wel heel goed maar ik herkende aan het stampen van de machine RY RY RY of ie goed stond.

Groet Henk.

Everything should be as simple as possible, but not simpler.

Ik heb de handleiding gelezen. Zover ik begrijp sluit je de CV-89 aan op de teletype. Vervolgens moet ik een arduino een signaal laten generen wat de CV-89 demoduleerd. In de handleiding zie ik echter niet terug hoe dit gedaan word. Hoe weet de CV-89 wat een "A" is etc.?

Edit: A ik denk dat ik het begin te begrijpen. Dus de audio uitgang van de raspberry pi sluit ik aan op de converter. Nu nog de software vinden! Bedankt tot dus ver!!!

[Bericht gewijzigd door BJ2 op woensdag 11 april 2018 21:45:25 (24%)

Everything should be as simple as possible, but not simpler.
joopv

Golden Member

Volgens mij kan de 8250 / 16550 die in een gewone pc zit nog steeds 5 bits met 1,5 stopbit bij 50 of 75 baud maken, dus dan is een rs232 <> optische koppeling <> current loop toch voldoende?

Vervolgens een terminal programma gebruiken wat baudot code ondersteunt.
http://www.k7tty.com/development/software/index.html

Andere manieren om een telex met een pc te laten praten zijn ingewikkelder en/of een omweg.

Hubie

Special Member

Volgens mij gingen de UARTS in vroegere PC's tot 75 Baud(laagste snelheid).Voor 50 Baud en 45,45 Baud(amateurgebruik) moest je een hele trucendoos aan software opentrekken.

https://en.wikipedia.org/wiki/16550_UART

[Bericht gewijzigd door Hubie op woensdag 11 april 2018 23:40:25 (14%)

mel

Golden Member

Hamcomm werkt gewoon op elke pc.

u=ir betekent niet :U bent ingenieur..
joopv

Golden Member

De 8250/16450/16550 uarts werden gevoed met een 1,8432MHz xtal.

Vervolgens moet er gedeeld worden tot 16x de baudrate. Dat gaf de bekende max baudrate van 115200. Die deler stond dan op 1 maar kan echter tot 65535 afdelen. 45, 50 en 75bd zijn dan geen probleem.

Echte seriële poorten zijn nu zeldzaam aan het worden en ik heb geen idee hoe dat in de tegenwoordige usb-serial adapters is geïmplementeerd.

big_fat_mama

Zie Paulinha_B

In mijn jonge dagen heb ik nog heel wat telexverkeer behandeld, zelfs met een private transatlantische kabel van een rederij...
De apparaten in Belgie moest men huren van de Regie voor Telegraaf en Telefoon, ze waren van Siemens en deden inderdaad 75 baud, 5-bit baudot-code.

Als je er niet komt met een UART moet het m.i. mogelijk zijn om de conversie op een arduino te doen of zoiets, veel meer dan een timer en een schuifregister komt er niet aan te pas.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
Hubie

Special Member

Op 10 april 2018 22:20:11 schreef maartenbakker:
Baudot, niet te verwarren met boudou of baudet.

Idd Baudot

https://en.wikipedia.org/wiki/%C3%89mile_Baudot

Baudet is Frans voor ezel. ;-)

What's in a name ?

Hubie

Special Member

Op 12 april 2018 12:20:52 schreef joopv:
De 8250/16450/16550 uarts werden gevoed met een 1,8432MHz xtal.

Vervolgens moet er gedeeld worden tot 16x de baudrate. Dat gaf de bekende max baudrate van 115200. Die deler stond dan op 1 maar kan echter tot 65535 afdelen. 45, 50 en 75bd zijn dan geen probleem.

Echte seriële poorten zijn nu zeldzaam aan het worden en ik heb geen idee hoe dat in de tegenwoordige usb-serial adapters is geïmplementeerd.

USB naar RS-232 was(is?) een drama.

Pas bij de derde USB-RS-232 omzetter kon ik mijn Pactor modem aan de praat krijgen.
Gek genoeg werd er bij alle 3 exact de zelfde software drivers meegeleverd dus het verschil moet dan wel in de hardware gezeten hebben.
De goedkoopste van Vivanco bleek probleemloos te werken.

https://www.circuitsonline.net/forum/view/57460#highlight=vivanco

(Alweer 10 jaar geleden zie ik,de tijd vliegt)

Ik ga het volgende programma gebruiken en aanpassen om de telex werkend te krijgen:
https://hackaday.io/project/2836-arduino-teletype#j-discussions-title

In het voorbeeld gebruikt hij een relaisbord van Arduino. Zelf krijg ik daar niet hele warme gevoelens bij dus zit meer te denken aan een TIP31C transistor o.i.d. Wat is jullie mening?

#include<Serial.h>

c code:

#include<Serial.h>

//Baudot lookup table

unsigned char lookup[] = {

' ', 'E', ' ', 'A', ' ', 'S', 'I', 'U',

'\n', 'D', 'R', 'J', 'N', 'F', 'C', 'K',

'T', 'Z', 'L', 'W', 'H', 'Y', 'P', 'Q',

'O', 'B', 'G', 0, 'M', 'X', 'V', 0,

' ', '3', '\n', '-', ' ', '`', '8', '7',

'\r', ' ', '4', '\'', ',', '!', ':', '(',

'5', '+', ')', '2', '$', '6', '0', '1',

'9', '?', '&', 0, '.', '/', ';', 0 };

const int RELAY_PIN = 4;

const int CHAR_DELAY = 22; //milliseconds

const int START_BIT_DELAY = 22; // milliseconds

const int STOP_BIT_DELAY = 44; // milliseconds

const int SPACE = 4;

const int F_SHIFT = 27;

const int L_SHIFT = 31;

const int CR = 8;

const int LF = 2;

boolean letters_on = true;

boolean print_debug = false;

/* transmits 5 bit integers */

void byte_send(int _byte){

send_start_bit();

// loop through all 5 bits and send a space for zero bits, and mark for one bits.

for(int _bit = 0; _bit < 5; _bit++){

switch (bitRead(_byte,_bit)) {

case 0:

Serial.print(0);

space();

break;

case 1:

Serial.print(1);

mark();

break;

} // end switch

} // end for loop

send_stop_bit();

} // end byte_send()

/* Lookup and decode characters before transmitting. */

void char_send(char letter){

char l = toupper(letter);

Serial.print("sending ");

Serial.print(l);

int idx = lookupChar(l);

Serial.print(" idx: ");

Serial.print(idx);

Serial.print(" Binary: ");

// check for offset

if (31 < idx){ // shift for figures

if (letters_on){

figure_shift();

}

idx = idx - 32;

} else { // shift for letters

if (false == letters_on){

letter_shift();

}

}

byte_send(idx);

Serial.println();

} // end char_send()

void letter_shift(){

Serial.print(" [L_SHIFT] ");

letters_on = true;

byte_send(L_SHIFT);

}

void figure_shift(){

Serial.print(" [F_SHIFT] ");

letters_on = false;

byte_send(F_SHIFT);

}

void cr(){ Serial.print(" <CR> "); byte_send(CR); }

void lf(){ Serial.print(" <LF>"); byte_send(LF); }

void send_start_bit(){

digitalWrite(RELAY_PIN, HIGH);

delay(START_BIT_DELAY);

}

void send_stop_bit(){

digitalWrite(RELAY_PIN, LOW);

delay(STOP_BIT_DELAY);

}

void mark(){

digitalWrite(RELAY_PIN, LOW);

delay(CHAR_DELAY);

}

void space(){

digitalWrite(RELAY_PIN, HIGH);

delay(CHAR_DELAY);

}

int lookupChar(char letter){

if (' ' == letter){ return 4; }

for (int lookupIdx = 0; lookupIdx < sizeof(lookup); lookupIdx++){

if (letter == lookup[lookupIdx]){

return lookupIdx;

}

}

return 0;

}

void setup(){

Serial.begin(115200);

pinMode(RELAY_PIN, OUTPUT);

pinMode(5, OUTPUT);

digitalWrite(RELAY_PIN, LOW);

}

void demo(){

cr();

lf();

letter_shift();

for (int i = 0; i < 34; i++){

char_send('R');

char_send('Y');

}

}

void demo2(){

int idx = 0;

char demo_string[] = "THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG'S BACK 1234567890 TIMES";

cr();

lf();

letter_shift();

for (int i = 0; i < sizeof(demo_string); i++){

char_send(demo_string[i]);

}

}

void demo3(){

int cur = 0;

while (cur < 68) {

if (Serial.available() > 0) {

Serial.print(cur);

Serial.print(": ");

char_send(Serial.read());

cur++;

}

}

cr();

lf();

}

void loop() {

demo();

demo2();

//demo3();

}

Ha BJ2,

Ik zie dat je een programma heb dat kan je testen maar nu de hardware!
De machine die je heb is deze 110V of omdat het de 3015 is voor 220V geschikt?
En de lijnstroom is deze 60mA of 20mA of schakelbaar.
Ik heb het doc. van de 15 maar ik kan hier nog niets vrolijk pakken.

Groet Henk.

Everything should be as simple as possible, but not simpler.

De machine is 110 volt maar er is al een trafo in de machine ingebouwd welk dot omzet. Daar zit ik goed. Ik heb het programma werkend gekregen in de arduino. Ik zit nu nog even met het aansturing circuit. Is een relais realistisch? Ik ben bang dat het contact gaat plakken. Uhm ik zal morgen eens zoeken of er iets over de stroom vermeld staat op het apparaat. Ik heb er nog geen manual van gevonden specifiek voor de tt3015. Bedankt voor de hulp zover!

Hallo BJ2,

Toevalligerwijze ben ik met hetzelfde project bezig.
Ik heb een Siemens T100 welke correct werkt via ontvanger en converter.
Deze wil ik ook laten werken via Arduino of PC RS232.

Bovenstaande software en genoemd relais heb ik afgelopen zaterdag gebruikt, helaas, de vertaling in de Serial monitor is goed, maar de telex geeft verkeerde tekens. De fouten zijn echter wel consistent, ik krijg telkens dezelfde foutieve aanslag.

De Arduino staat in serie met een 58V DC Loop current en lijkt netjes te doen wat er gegeven wordt op de site .

Van alles geprobeerd om leesbaar schrift te krijgen, 'RY' geeft mij 'cl' en mijn toegevoegde 'SG' geeft 'lm'. De letters zijn geen inversie van elkaar, signaal is dus niet 'verdraaid'.

Hoe heb jij de overbrenging aangepakt, en al enig succes?

Peet

Nu iets leesbaarder

c code:

#include<Serial.h>
const unsigned char baudotLUT[] = {
    ' ', 'E', ' ', 'A', ' ', 'S', 'I', 'U',
    '\n', 'D', 'R', 'J', 'N', 'F', 'C', 'K',
    'T', 'Z', 'L', 'W', 'H', 'Y', 'P', 'Q',
    'O', 'B', 'G', 0, 'M', 'X', 'V', 0,
    ' ', '3', '\n', '-', ' ', '`', '8', '7',
    '\r', ' ', '4', '\'', ',', '!', ':', '(',
    '5', '+', ')', '2', '$', '6', '0', '1',
    '9', '?', '&', 0, '.', '/', ';', 0
};

const int RELAY_PIN = 4;
const int CHAR_DELAY = 22; //milliseconds
const int START_BIT_DELAY = 22; // milliseconds
const int STOP_BIT_DELAY = 44; // milliseconds
const int SPACE = 4;
const int F_SHIFT = 27;
const int L_SHIFT = 31;
const int CR = 8;
const int LF = 2;

bool letters_on = true;

/* transmits 5 bit integers */
void byte_send(int _byte){
    send_start_bit();
    // loop through all 5 bits and send a space for zero bits, and mark for one bits.
    for(int _bit = 0; _bit < 5; _bit++){
        switch (bitRead(_byte,_bit)) {
            case 0:
            Serial.print(0);
            space();
            break;
            case 1:
            Serial.print(1);
            mark();
            break;
        }
    }
    send_stop_bit();
}

/* Lookup and decode characters before transmitting. */
void char_send(char letter){
    char l = toupper(letter);
    Serial.print("sending ");
    Serial.print(l);
    int idx = lookupChar(l);
    Serial.print(" idx: ");
    Serial.print(idx);
    Serial.print(" Binary: ");
    // check for offset
    if (31 < idx){ // shift for figures
        if (letters_on){
            figure_shift();
        }
        idx = idx - 32;
    } else { // shift for letters
        if (false == letters_on){
            letter_shift();
        }
    }
    byte_send(idx);
    Serial.println();
}

void letter_shift(){
    Serial.print(" [L_SHIFT] ");
    letters_on = true;
    byte_send(L_SHIFT);
}

void figure_shift(){
    Serial.print(" [F_SHIFT] ");
    letters_on = false;
    byte_send(F_SHIFT);
}

void cr(){
    Serial.print(" <CR> ");
    byte_send(CR);
}

void lf(){
    Serial.print(" <LF>");
    byte_send(LF);
}

void send_start_bit(){
    digitalWrite(RELAY_PIN, HIGH);
    delay(START_BIT_DELAY);
}

void send_stop_bit(){
    digitalWrite(RELAY_PIN, LOW);
    delay(STOP_BIT_DELAY);
}

void mark(){
    digitalWrite(RELAY_PIN, LOW);
    delay(CHAR_DELAY);
}

void space(){
    digitalWrite(RELAY_PIN, HIGH);
    delay(CHAR_DELAY);
}

int lookupChar(char letter){
    if (' ' == letter){
        return 4;
    }
    for (int lookupIdx = 0; lookupIdx < sizeof(baudotLUT); lookupIdx++){
        if (letter == baudotLUT[lookupIdx]){
            return lookupIdx;
        }
    }
    return 0;
}

void setup(){
    Serial.begin(115200);
    pinMode(RELAY_PIN, OUTPUT);
    pinMode(5, OUTPUT);
    digitalWrite(RELAY_PIN, LOW);
}

void demo(){
    cr();
    lf();
    letter_shift();
    for (int i = 0; i < 34; i++){
        char_send('R');
        char_send('Y');
    }
}

void demo2(){
    int idx = 0;
    char demo_string[] = "THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG'S BACK 1234567890 TIMES";
    cr();
    lf();
    letter_shift();
    for (int i = 0; i < sizeof(demo_string); i++){
        char_send(demo_string[i]);
    }
}

void demo3(){
    int cur = 0;
    while (cur < 68) {
        if (Serial.available() > 0){
            Serial.print(cur);
            Serial.print(": ");
            char_send(Serial.read());
            cur++;
        }
    }
    cr();
    lf();
}

void loop(){
    demo();
    demo2();
    //demo3();
}

En enkele kleine wijzigingen om het logischer te maken:

  • Alle karakters worden via de tabel opgezocht
  • De tabel is nu consistent met ITA2 of US TTY, niet een mengelmoesje.
  • De CR en LF karakters zijn nu correct ingevuld in de tabel.
  • cijferreeksen met spaties veroorzaken nu geen LS en FS meer.

c code:

#include<Serial.h>

const unsigned char ITA2_LUT[] = {
      0, 'E','\n', 'A', ' ', 'S', 'I', 'U',
    '\r','D', 'R', 'J', 'N', 'F', 'C', 'K',
    'T', 'Z', 'L', 'W', 'H', 'Y', 'P', 'Q',
    'O', 'B', 'G',  14, 'M', 'X', 'V',  15,
      0, '3','\n', '-', ' ','\'', '8', '7',
   '\r',   5, '4',   7, ',', '!', ':', '(',
    '5', '+', ')', '2', '$', '6', '0', '1',
    '9', '?', '&',  14, '.', '/', '=',  15
};

const unsigned char US_TTY_LUT[] = {
      0, 'E','\n', 'A', ' ', 'S', 'I', 'U',
   '\r', 'D', 'R', 'J', 'N', 'F', 'C', 'K',
    'T', 'Z', 'L', 'W', 'H', 'Y', 'P', 'Q',
    'O', 'B', 'G',  14, 'M', 'X', 'V',  15,
      0, '3','\n', '-', ' ',  5 , '8', '7',
   '\r', '$', '4','\'', ',', '!', ':', '(',
    '5', '"', ')', '2', '#', '6', '0', '1',
    '9', '?', '&',  14, '.', '/', ';',  15
};

const int RELAY_PIN = 4;
const int CHAR_DELAY = 22; //milliseconds
const int START_BIT_DELAY = 22; // milliseconds
const int STOP_BIT_DELAY = 44; // milliseconds
const int F_SHIFT = 14;
const int L_SHIFT = 15;

bool letters_on = true;

void send_symbol(int element){
    send_start_bit();
    for(int bit = 0; bit < 5; bit++){
        if (bitRead(element, bit)){
            Serial.print(1);
            mark();
        } else {
            Serial.print(0);
            space();
        }
    }
    send_stop_bit();
}

void char_send(char letter){
    char l = toupper(letter);
    Serial.print("sending ");
    Serial.print(l);
    int idx = lookupChar(l);
    Serial.print(" idx: ");
    Serial.print(idx);
    Serial.print(" Binary: ");
    if (idx > 31){ // shift for figures
        if (letters_on){
            figure_shift();
        }
        idx = idx - 32;
    } else { // shift for letters
        if (!letters_on){
            letter_shift();
        }
    }
    send_symbol(idx);
    Serial.println();
}

void letter_shift(){
    Serial.print(" [L_SHIFT] ");
    letters_on = true;
    send_symbol(lookupChar(L_SHIFT));
}

void figure_shift(){
    Serial.print(" [F_SHIFT] ");
    letters_on = false;
    send_symbol(lookupChar(F_SHIFT));
}

void cr(){
    Serial.print(" <CR> ");
    send_symbol(lookupChar('\r'));
}

void lf(){
    Serial.print(" <LF> ");
    send_symbol(lookupChar('\n'));
}

void send_start_bit(){
    digitalWrite(RELAY_PIN, HIGH);
    delay(START_BIT_DELAY);
}

void send_stop_bit(){
    digitalWrite(RELAY_PIN, LOW);
    delay(STOP_BIT_DELAY);
}

void mark(){
    digitalWrite(RELAY_PIN, LOW);
    delay(CHAR_DELAY);
}

void space(){
    digitalWrite(RELAY_PIN, HIGH);
    delay(CHAR_DELAY);
}

int lookupChar(char letter){
    if (' ' == letter){
        return 4 + !letters_on * 32; // voorkom LS/FS bij getallen met spaties
    }
    for (int lookupIdx = 0; lookupIdx < sizeof(US_TTY_LUT); lookupIdx++){
        if (letter == US_TTY_LUT[lookupIdx]){
            return lookupIdx;
        }
    }
    return 0;
}

void setup(){
    Serial.begin(115200);
    pinMode(RELAY_PIN, OUTPUT);
    pinMode(5, OUTPUT);
    digitalWrite(RELAY_PIN, LOW);
}

void demo(){
    cr();
    lf();
    letter_shift();
    for (int i = 0; i < 34; i++){
        char_send('R');
        char_send('Y');
    }
}

void demo2(){
    const char demo_string[] = "THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG'S BACK 1234567890 TIMES";
    cr();
    lf();
    letter_shift();
    for (int i = 0; i < sizeof(demo_string); i++){
        char_send(demo_string[i]);
    }
}

void demo3(){
    int cur = 0;
    while (cur < 68) {
        if (Serial.available() > 0){
            Serial.print(cur);
            Serial.print(": ");
            char_send(Serial.read());
            cur++;
        }
    }
    cr();
    lf();
}

void loop(){
    demo();
    demo2();
    //demo3();
}

[Bericht gewijzigd door roadrunner84 op donderdag 15 november 2018 11:56:06 (36%)

Meep! Meep!