• Please review our updated Terms and Rules here

FER204 tape reader interfacing.

mubase

Experienced Member
Joined
Feb 20, 2016
Messages
70
Location
Peckham, London,UK
Hi everyone and happy Easter holidays. I'm still working on some paper tape readers that were salvaged from a closing down electronics company. Got loads of really great help from some lovely guys on this here forum and thanks again!! The Sally army is also £5 richer. Theres a thread further down.
One of the machines is a little beaten up so I've taken out the reader mechanism to have a look at and work out if I could possibly interface it to a microcontroller or Z80 system. The reader is a Ghielmetti FER204. Sven from Germany is sending me a manual in German for the FER201 so I should get some info out of that.. Pics below:
DSC00475.jpgDSC00476.jpg
DSC00466.jpg DSC00469.jpg
DSC00472.jpg

Can anyone help me with the motor wiring?
Its a Japan Servo 28V 15 deg/step motor and has five wires. yellow, brown, red, orange, black.
 
OK i've sorted out the motor. Doing a multimeter resistance test between the wires I found the black wire to be the common and the other 4 to be the coils. So I've hooked up the motor to an Arduino UNO via a ULN2804 darlington array chip and have the motor doing a clockwise revolution and then a counter clockwise revolution. :)
 
wow, I have one of those readers, perhaps now I will get mine working....

Ooh! Have you got a manual for it? I'm having trouble working out how to interface the optical part. There are what look like 8 photodiodes and a photo transistor. These look like they go to a bunch of resistors of differing resistance and they are connected one side to Vcc and the other sides to the hex inverters.. Is yours the same?
 
Working FER204 paper tape reader unit controlled by Arduino.

Working FER204 paper tape reader unit controlled by Arduino.

I've worked it out!! The circuit needs 2 + Voltages. 1 5 volts and 1 ≈12V. The photodiodes send their signal (active LOW) through a bunch of low value resistors to 2 Hex inverter IC's. These are sent out of 8 pins. I've written some code to shunt the stepper motor along 1 step at a time and check the status of the sprocket wheel photodiode. When it's LOW it reads the data:
Code:
#include <Stepper.h>

const int stepsPerRevolution = 24;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 9, 10, 11, 12);



char optics[6];
int i;
byte index=0;
char inChar=-1;
void setup() {
   myStepper.setSpeed(50);
  // put your setup code here, to run once:
pinMode (3,INPUT);
pinMode (4,INPUT);
pinMode (5,INPUT);
pinMode (6,INPUT);
pinMode (7,INPUT);
pinMode (8,INPUT);  //sprocket -- clock
Serial.begin(115200);

}
#include "converter.h"
void loop() {
 

//if (Serial.read()=='f')  // user types 'f' into the serial window, motor shunts paper along 1 char
//{
 myStepper.step(1); 

delay(200);
 optics[5]=digitalRead(8);  // sprocket --clock
if (optics[5]==LOW)    // sprocket wheel check
{
 optics[0]=digitalRead(3); // read the optical sensor data from reader
optics[1]=digitalRead(4);
optics[2]=digitalRead(5);
optics[3]=digitalRead(6);
optics[4]=digitalRead(7);
 
 


converter();   // run long code to convert baudot codes into chars (a-z)
}
//}
else {
  optics[0]=LOW;
optics[1]=LOW;
optics[2]=LOW;
optics[3]=LOW;
optics[4]=LOW;
}

}


and here are the functions for conversion from Baudot code :

Code:
void figs();
void converter();

void converter() {
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("a"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("b"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("c"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("d"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("e"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("f"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("g"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("h"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("i"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("j"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("k"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("l"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("m"); 
}
if (!optics[0]== 0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("n"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("o"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("p"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("q"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("r"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("s"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("t"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("u"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("v"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("w"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("x"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("y"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("z"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print(" "); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 figs();
}
}

void figs() {
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("-"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("?"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print(":"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("whoareyou"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("3"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("%"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("@"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("£"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("8"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("bell"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("("); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print(")"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("."); 
}
if (!optics[0]== 0 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print(","); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("9"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("0"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("1"); 
}
if (!optics[0]==0 && !optics[1] == 1 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("4"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("'"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.print("5"); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print(""); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 0)
{
 Serial.print("="); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==1 && !optics[4] == 1)
{
 Serial.print("2"); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("/"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print("6"); 
}
if (!optics[0]==1 && !optics[1] == 0 && !optics[2]==0 && !optics[3]==0 && !optics[4] == 1)
{
 Serial.print(" "); 
}
if (!optics[0]==0 && !optics[1] == 0 && !optics[2]==1 && !optics[3]==0 && !optics[4] == 0)
{
 Serial.println(""); 
}
if (!optics[0]==1 && !optics[1] == 1 && !optics[2]==1 && !optics[3]==1 && !optics[4] == 1)
{
 converter();
}
}

I'm sure there's a shorter way of doing this but I've not worked it out yet (converting serial data arrays to a char..)

also, I'm not sure if the figures function is working BUT I can get the reader to print baudot letters in a serial terminal so its all good(ish). I'm using an Arduino Mega2560 board.

I'm sorting out a video to stick on youtube later.

:D
 
Google for GHIELMETTI-MANUAL.txt, the first hit will give you the pinout of this reader.
I have one hooked up to my PDP8, nice little reader it is, mine is also switchable from 5 to 8 bit width.
 
Google for GHIELMETTI-MANUAL.txt, the first hit will give you the pinout of this reader.

Yeah this is from the Techmium29 project. I spoke to Sven from the project and he sent me a PDF of the scanned manual which is in German. My model is an FER204 though whereas the one you refer to is an FER201. I think they are slightly different but use the same concept for decoding/drivers etc...

I've done a video of my progress so far!! :D

 
Back
Top