Archive for the ‘Uncategorized’ Category.

PX-045A Printhead

DC Values (prior to printing)

1

2

3 Using as GND reference

4 2.59V DC

5 3.3V DC

6 3.3V DC

7 0V DC

8 0V DC

9 3.3V DC

10 0V

11 NC

12 0V

13 0V

14 0V

15 0V

16 0V

17 0V

18 0V

19

20

21

During print

1

2 0V

3 Using as GND reference

4 Goes to 3.3v sometimes during print for long (100 to 200ms+ periods)

5 3.3V DC

6 3.3V DC

7 0V DC

8 500ns/3.3v ~every 20us

9 3.3V DC

10 500ns/3.3v

11 NC

12 0V (some ripple)

13 ~84ns/3.3v. Looks like data clk.

14 0V

15 84ns/3.3v Looks like data.

16 0V

17 84ns/3.3v Looks like data.

18 0V

19 Looks like 43v (>30v)

20

21 0V

Pin 4 during print:

1,20 Connected

2,3,7,11,12,14,16,18,21 Connected

5,9 Connected (likely 3.3)

Pin 4 seems up be pulled up to 3.3v on controller. (4.7K pullup)

Random Notes 3

Maxon DC Motor 139885

https://uk.rs-online.com/web/p/gearboxes/4450184/

https://www.ebay.co.uk/itm/Maxon-139885-Mini-Coreless-Gear-Servo-Motor-DC-12V-Strong-Magnetic-for-Robot-/282288860535?clk_rvr_id=1509908084864&rmvSB=true

Combination of Maxon DC Motor :118426 & Maxon Planetary Gear : 110315 (67:1)

SIZE : DIAMETER BODY : 13 MM
           DIAMETER SHAFT : 3 MM
           TOTAL LENGTH : 55 MM
1.2 Volt = 18 Rpm , 1.5 Volt = 24 Rpm , 1.8 Volt = 29 Rpm , 2.4 Volt = 40 Rpm, 3.0Volt = 52 Rpm , .3.6 Volt = 64 Rpm,
4.8 Volt = 88Rpm, 6.0 Volt = 113 Rpm, 7.2 Volt = 137 Rpm , 10.0 Volt = 193 Rpm , 12.0 Volt = 233 Rpm

Random Notes 2

Hiseq 2000 TDI

Serial number from one module: C10000-515, 661675.

aslver.exe dump from my cameras:

1: AS-PHX-D48CL-PE1
Grabber HW Version    9.10.00
Grabber SW Version    5.58.24
Library FW Version    9.10.00
Grabber Connection    PCIe x1
Camera Connected    Unknown
Camera Name    C10000-515
Camera S/N    S/N: 661694
Camera Version    INF 2.01-F20-R02

1x PCIe card appears to work. 4x PCIe doesn’t show up on aslver.exe as yet.

Trigger was plugged into SMA port on board, driven by function generator 5V input.

Cameralink cable plugged into top port (furthest from motherboard) on the PCIe cameralink acquisition board.

HP C6602


http://nicholasclewis.com/projects/inkshield/

LinearCCDs


https://oceanoptics.com/wp-content/uploads/SONY-ILX511A.pdf

http://www.advancedmems.com/pdf/AMEMS_LineSensorArraySummary_v1.pdf

S11639 CMOS made by Hamamatsu

ILX511:

LSH6008-CA10A

Same as in Epson printers?

Stuff from, https://twitter.com/steubens7/status/1179848585636126720

nope, this little shoulder is the black level / zero value, iirc there was another 3 volts or so before saturation.

top trace is analog output, second trace is the trigger, bottom trace is the clock that cycles samples out after trigger, the short pulses on the trigger line were sample every 32 elements in the scan head or something:
https://gist.github.com/ohsix/4f518a2080dc913f880273fc80e04f52

#include <Arduino.h>
#include <ports.h>
#include <base.h>
#include <DirectIO.h>
#include <Adafruit_NeoPixel.h>
#include <TimerOne.h>
#define CLKPIN TIMER1_A_PIN
#define TRGPIN 4
#define DEBUGPIN 6
#define FIRSTFIELD 7
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
Output<TRGPIN> trg;
Output<CLKPIN> clk;
Output<6> dbg;
Output<FIRSTFIELD> ff;
#define NUMPIXELS 8
#define NEO_PIN 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, NEO_PIN, NEO_RGB + NEO_KHZ800);
const uint8_t PROGMEM gamma8[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };
void setup() {
analogReference(EXTERNAL);
pinMode(CLKPIN, OUTPUT);
//pinMode(DEBUGPIN, OUTPUT);
Timer1.initialize(1); // ~1mhz
Timer1.pwm(CLKPIN, 512); // 50% duty cycle
Timer1.stop();
pinMode(TRGPIN, OUTPUT);
pinMode(A0, INPUT);
pinMode(ledToPin(0), OUTPUT);
pinMode(ledToPin(1), OUTPUT);
pinMode(ledToPin(2), OUTPUT);
Serial.begin(115200);
cbi(ADCSRA, ADPS0);
cbi(ADCSRA, ADPS1);
cbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
// Serial.print("prescaler = ");
// Serial.println(ADCSRA & 0xE0);
pixels.begin();
}
int avgRead(int port, int samples)
{
int i;
long reading = 0;
for(i = 0; i < samples; i++)
{
reading += analogRead(port);
}
reading /= samples;
return reading;
}
void clockCycle(int pin, int count)
{
while(count–)
{
digitalWrite(pin, HIGH);
digitalWrite(pin, LOW);
}
}
int ledToPin(int color)
{
switch(color)
{
case 0: // red
return 2;
break;
case 1: // green
return 3;
break;
case 2: // blue
return 5;
break;
}
}
void ledOn(int color)
{
digitalWrite(ledToPin(color), LOW);
}
void ledOff(int color)
{
digitalWrite(ledToPin(color), HIGH);
}
void ledsOn()
{
for(int i = 0; i <= 2; i++)
ledOn(i);
}
void ledsOff()
{
for(int i = 0; i <= 2; i++)
ledOff(i);
}
// returns n samples from start of readback to end of readback
void readLine(byte* output, int samples)
{
int zeroLevel;
int blackLevel;
int clocks;
int i;
int samplePos = 2593 / samples;
int currSample = 0;
shiftOut(TRGPIN, CLKPIN, MSBFIRST, 0xF0); // trigger pulse and slow clock
// lock step through front porch with slow clock in order to capture reference levels without unpredictable jitter
clockCycle(CLKPIN, 4);
// sample black level
for(i=0; i < 3; i++)
{
clocks=5; while(clocks–)
{
clk=1;
clk=0;
}
blackLevel += avgRead(A0, 3);
}
blackLevel /= 3;
// Serial.print("blackLevel = ");
// Serial.println(blackLevel);
// 65 more clock cycles until analog goodies
clocks = 65; while(clocks–)
{
clk=1;
clk=0;
}
#define ANALOG_CLOCKS (12 * 216 + 1)
int stepSpacing = ANALOG_CLOCKS / samples;
int nextSample = 0;
// go through analog bins
for(i = 0; i < 12 * 216 + 1; i++)
{
clk = 1;
if(nextSample– == 0)
{
dbg=1;
nextSample = stepSpacing;
// output[currSample++] = map(avgRead(A0, 5), blackLevel, 1024, 0, 255);
output[currSample++] = map(analogRead(A0), blackLevel, 1024, 0, 255);
dbg=0;
}
clk = 0;
}
#if 0
for(i = 0; i < 2593; i++)
{
clk =1;
clk =0;
}
#endif
}
void loop() {
int led = 0;
byte samples[64];
byte redSamples[NUMPIXELS];
byte greenSamples[NUMPIXELS];
byte blueSamples[NUMPIXELS];
int i;
ff=1;
ff=0;
#if 1
ledOn(0);
readLine(redSamples, NUMPIXELS);
ledsOff();
ledOn(1);
readLine(greenSamples, NUMPIXELS);
ledsOff();
ledOn(2);
readLine(blueSamples, NUMPIXELS);
ledsOff();
#endif
#if 0
for(led = 0; led < 0; led++){
ledOn(led);
readLine(samples, 4);
ledOff(led);
}
ledsOff();
#endif
for(i = 0; i < NUMPIXELS; i++)
{
#if 0
Serial.print("sample[");
Serial.print(i);
Serial.println("] = ");
Serial.print("red ");
Serial.println(redSamples[i]);
Serial.print("green ");
Serial.println(greenSamples[i]);
Serial.print("blue ");
Serial.println(blueSamples[i]);
#endif
pixels.setPixelColor(i, pixels.Color(pgm_read_byte(&gamma8[greenSamples[i]]), pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[blueSamples[i]])));
// pixels.setPixelColor(i, pixels.Color(0, 0, 0));
// pixels.setPixelColor(i, pixels.Color(redSamples[i], greenSamples[i], blueSamples[i]));
// pixels.setPixelColor(i, pixels.Color(pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[greenSamples[i]]), pgm_read_byte(&gamma8[blueSamples[i]])));
// pixels.setPixelColor(i, pixels.Color(pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[redSamples[i]])));
pixels.show(); // This sends the updated pixel color to the hardware.
}
// delay(100);
//delayMicroseconds(100);
}
void old_loop() {
int bin;
int i;
int samples[12];
int clocks;
int zeroLevel;
int blackLevel;
static int led=0;
//shiftOut(TRGPIN, CLKPIN, MSBFIRST, 0);
dbg=1;
zeroLevel = avgRead(A0, 5);
// zeroLevel = analogRead(A0);
dbg=0;
dbg=1;
shiftOut(TRGPIN, CLKPIN, MSBFIRST, 0xF0); // trigger pulse and slow clock
dbg=0;
// lock step through front porch with slow clock in order to capture reference levels without unpredictable jitter
dbg=1;
clockCycle(CLKPIN, 4);
dbg=0;
dbg=1;
for(i=0; i < 3; i++)
{
clocks=5; while(clocks–)
{
clk=1;
clk=0;
}
blackLevel += avgRead(A0, 3);
}
blackLevel /= 4;
// Serial.print("blackLevel = ");
// Serial.println(blackLevel);
dbg=0;
if(led == 0){
ff = 1;
ff = 0;
}
ledOn(led);
//ledsOn();
dbg=1;
clocks = 40; while(clocks–)
{
clk=1;
clk=0;
}
dbg=0;
for(i = 0; i < 350*8; i++)
{
clk =1;
clk =0;
}
dbg =1;
dbg=0;
// Timer1.pwm(CLKPIN, 512); // fast clock
/* dbg=1;
for(i = 0; i < 300; i++)
{
samples[i] = analogRead(A0);
//delayMicroseconds(2000);
}
dbg=0;
*/
// sample front porch reference level 2 clocks later, for 80 hs clocks
// sample bins 83 clocks after fast start
// bins seem to be 215 clocks wide, 12 bins, 1 clock per pixel
//delayMicroseconds(1);
#if 0
dbg=1;
noInterrupts();
while(analogRead(A0) -5 < zeroLevel)
;
interrupts();
// wait for voltage to increase to follow clock jitter
dbg=0;
#endif
dbg = 1;
blackLevel = avgRead(A0, 5);
// blackLevel = analogRead(A0);
dbg = 0;
#if 0
noInterrupts();
while(analogRead(A0) -10< blackLevel)
{
dbg=1;
delayMicroseconds(0);
dbg=0;
}
;
interrupts();
#endif
dbg = 1;
delayMicroseconds(1);
dbg = 0;
/*
delayMicroseconds(100);
dbg=1;
bin= analogRead(A0);
dbg=0;
*/
// delayMicroseconds(2670);
Timer1.stop();
digitalWrite(CLKPIN, LOW);
/*
Serial.print("zeroLevel = ");
Serial.println(zeroLevel);
Serial.print("blackLevel = ");
Serial.println(blackLevel);
/* Serial.print("bin = ");
Serial.println(bin);
*/
//delay(50);
#if 1
ledOff(led);
// switch LED
if(++led > 2)
led = 0;
#endif
//ledsOff();
// Serial.println(led);
// Serial.print("normalized = ");
// Serial.println(map(bin – blackLevel, zeroLevel, 1024, 0, 255));
//delay(10); // inter line delay
delayMicroseconds(100);
}
view raw sketch hosted with ❤ by GitHub
the scan head expects a trigger, then a clock, analog values come out on one of the pins during the clocking
the first few elements are from dark elements so you can use them as a reference
sketch reads the 3 full color fields and renders them on a ws2812b strip
these are supposed to be in close contact with paper or something, but it works ok to about 4 inches (can resolve space between fingers)
view raw what hosted with ❤ by GitHub


Magnetic Tape

DLT IV Fujifilm: ~10um.
3490E: 18um.

Epson UK Printheads (SX series)

Nothing to see here.

Epson UK Printheads (SX series)

Patent Protocol

figure 2: http://www.freepatentsonline.com/8430468.pdf

SCK  : Clock for SI&SP                                  pin 13
LAT  : Latch signal
SI&SP: Drive pulse selection data, selects nozzle
COM  : Drive signal
CH   : Connect drive input to nozzle

http://www.freepatentsonline.com/8430468.html

Click to access 20100220133.pdf

Click to access 20090066739.pdf

From: https://patentimages.storage.googleapis.com/9b/87/b8/23bb7e5e9ade1f/US6758544.pdf

Pinout guesses:

2  Gnd/NC/HV Gnd?
3  Gnd
4  3v? ref? from printer
5  3.3v from printer
6  Gnd
7  Gnd
8  <2v 1us Trig?                        Probably CH? (could be latch?)
9  3.3v? from printer
10 3v 0.5us Trig? from printer?         Probably LATCH
11 Gnd/NC??
12 Gnd
13 Clk? 100ns 3v/from printer!           Probably CLK?
14 Gnd
15 100ns 3v Data? from printer?          SI&SP DATA1
16 Gnd
17 100ns 3v Data? from printer?          SI&SP DATA2
18 Gnd
19 40v (43v from printer)
20 HV Data from printhead? from printer? (constant 1.5v with no head connected)
21 Gnd/NC/HV Gnd?                        Probably COM2

PinSignalUse?
1HV Data from printhead? (40v signal)Probably COM1
2Gnd/NC/HV Gnd?Probably COM1 Gnd?
3GndSignal Gnd?
43.3/3v ref from printer. 
53.3v from printer 
6Gnd 
7Gnd 
8<2v 1usProbably CH
93.3v from printer 
103.v 0.5us from printer?Probably LATCH
11Gnd/NC?? 
12Gnd 
13Clk? 100ns 3v from printer
 
Probably CLK
14Gnd 
15100ns 3v DataSI&SP DATA1
16Gnd 
17100ns 3v Data? from printer?SI&SP DATA2
18Gnd 
1943v from printer 
20HV Data?Probably COM2
21Gnd/NC/HV Gnd?