Table of Contents

Canon MF4370dn

Canon MF4370dn
Kontakt cracki

Ein Multifunktionsdrucker, der in der Karmanstr. 7 zur Entsorgung gelassen wurde. Wurde zerlegt und sortiert.

Beschriftungen

Pinout

Reversing

Pins gezaehlt von innen (links) nach aussen (rechts).

Bis auf GND sind 1-5 und 6-12 getrennt. Insbesondere 5, trotz weiterer Abzweigung, scheint mit nix weiter zu interagieren.

Messungen

Spannungen bei 10 mA und 3.4V:

+ \ - 1 2 3 4 5 Beschreibung des Pins
1 0.00 GND
2 0.00 GND Rot
3 0.00 GND Grün
4 0.00 GND Blau
5 1.87 2.78 2.95 0.00 VCC (Test: 3.35V 10mA)

auch:

bei ~4.5V Versorgung in die LEDs folgende Widerstände nach Erde:

Spannungen bei 1 mA:

+ \ - 6 7 8 9 10 11 12 Aufgabe Beschreibung
6 0.00 1.14 1.43 0.76 1.00 1.14 1.38 Clock Betrieb: floating
7 1.14 0.00 1.43 0.76 1.00 1.14 1.38 Startpuls Betrieb: floating
8 1.07 1.07 0.00 0.69 0.96 1.07 0.98 Vref betrieb: low, driftet langsam (Vref?)
9 0.74 0.74 1.09 0.00 0.67 0.74 1.04 VCC
10 0.72 0.72 0.58 0.43 0.00 0.72 0.48 GND kupferne Masseflaeche, aufgeklebt
11 1.15 1.15 1.44 0.75 1.01 0.00 1.39 DPI Betrieb: high
12 1.08 1.08 0.96 0.67 0.96 1.08 0.00 Aout Betrieb: floating low, scheint digitale Werte zu produzieren

Arduino Code

#define START 2
#define CLOCK 3
#define DPIMODE 4
#define LEDR 5
#define LEDG 6
#define LEDB 7

bool dpimode = 1;
uint16_t pixels = dpimode ? 5184 : 2592;

uint32_t linetime = 4000; // us
uint32_t sched = 0;

uint8_t lightcolor = 0;

void set_lighting(uint8_t active)
{
  digitalWrite(LEDR, !(active & 0b001));
  digitalWrite(LEDG, !(active & 0b010));
  digitalWrite(LEDB, !(active & 0b100));
}

void setup() {
  pinMode(START, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  pinMode(DPIMODE, OUTPUT);

  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);

  digitalWrite(DPIMODE, dpimode);

  sched = micros();
}

void loop() {
  
  set_lighting(0);

  digitalWrite(START, HIGH);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(CLOCK, LOW);
  digitalWrite(START, LOW);

  set_lighting(1 << lightcolor);

  for (uint16_t counter = 82 + pixels; counter-- > 0; )
  {
    PORTD |= _BV(PORTD3);
    PORTD &= ~_BV(PORTD3);
  }

  lightcolor = (lightcolor+1) % 3;

  sched += linetime;
  int32_t dt = sched - micros();
  while (dt > 0x4000)
  {
    delayMicroseconds(0x4000);
    dt -= 0x4000;
  }
  if (dt > 0)
    delayMicroseconds(dt);
}