Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
projekte:epson-stylus-sx100 [2016-06-04 02:00] – [Contact Image Sensor] cracki | projekte:epson-stylus-sx100 [2016-06-04 18:43] – [Arduino] cracki |
---|
die TO Pins am PCB sind: V+, Blau, Rot, Gruen. | die TO Pins am PCB sind: V+, Blau, Rot, Gruen. |
| |
Numerierung: Flachbandkabel von oben kommend, Connector von innen nach aussen | Numerierung: |
| * Rohm: Pin 1 aussen. |
| * PCB: Pin 1 innen <- die nehmen wir |
| |
| <pagebreak> |
| Spannung 1 mA: |
^ + \ - ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ Beschreibung des Pins ^ | ^ + \ - ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ Beschreibung des Pins ^ |
| 1 | x | | | | | N/C (so weit sich erkennen laesst) | | | 1 | x | | | | | N/C (so weit sich erkennen laesst) | |
| 2 | | x | | | | LED Rot | | | 2 | | x | | | | LED GND Rot | |
| 3 | | | x | | | LED Gruen | | | 3 | | | x | | | LED GND Gruen | |
| 4 | | | | x | | LED Blau | | | 4 | | | | x | | LED GND Blau | |
| 5 | | R | G | B | x | LED VCC | | | 5 | | R | G | B | x | LED + | |
| |
^ + \ - ^ 6 ^ 7 ^ 8 ^ 9 ^ 10 ^ 11 ^ 12 ^ Beschreibung des Pins ^ | Spannung 1 mA: |
| 6 | x | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#b2f1ff>1.51</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#bdb2ff>1.85</typo> | duenne Bahn zwischen oberer Flaeche und Schrauben, 1 Via je Segment | | ^ + \ - ^ 6 ^ 7 ^ 8 ^ 9 ^ 10 ^ 11 ^ 12 ^ Vias ^ Geometrie ^ relativ ^ Vermutung ^ Beschreibung des Pins ^ |
| 7 | <typo bg:#b2ffcc>1.22</typo> | x | <typo bg:#b2ffe6>1.34</typo> | <typo bg:#caffb2>0.99</typo> | <typo bg:#b2ffe6>1.34</typo> | <typo bg:#b2ffe6>1.34</typo> | <typo bg:#b2ffe4>1.33</typo> | breite Flaeche ganz oben, 2 Vias je Segment | | | 6 | x | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#b2f1ff>1.51</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#bdb2ff>1.85</typo> | 1 | dünn | | Startpuls | zwischen oberer Flaeche und Schrauben | |
| 8 | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#ffe0b2>0.61</typo> | x | <typo bg:#b2f1ff>1.51</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#b6b2ff>1.82</typo> | duenne Bahn, 1 Via je Segment von unten hochstechend | | | 7 | <typo bg:#b2ffcc>1.22</typo> | x | <typo bg:#b2ffe6>1.34</typo> | <typo bg:#caffb2>0.99</typo> | <typo bg:#b2ffe6>1.34</typo> | <typo bg:#b2ffe6>1.34</typo> | <typo bg:#b2ffe4>1.33</typo> | 2 | breit | oben | 3V3 | | |
| 9 | <typo bg:#ffb4b2>0.41</typo> | <typo bg:#ffb2bd>0.35</typo> | <typo bg:#ffb4b2>0.41</typo> | x | <typo bg:#ffb4b2>0.41</typo> | <typo bg:#ffb4b2>0.41</typo> | <typo bg:#ffb2b2>0.40</typo> | breite Flaeche unten, ueber #8, 3-5 Vias je Segment | | | 8 | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#ffe0b2>0.61</typo> | x | <typo bg:#b2f1ff>1.51</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#b6b2ff>1.82</typo> | 1 | dünn | | Clock | von unten hochstechend | |
| 10 | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#b2f4ff>1.50</typo> | x | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#b9b2ff>1.83</typo> | breite Flaeche mitte, wo die Schrauben durchgehen (aber kein kontakt). 1 Via/Segment | | | 9 | <typo bg:#ffb4b2>0.41</typo> | <typo bg:#ffb2bd>0.35</typo> | <typo bg:#ffb4b2>0.41</typo> | x | <typo bg:#ffb4b2>0.41</typo> | <typo bg:#ffb4b2>0.41</typo> | <typo bg:#ffb2b2>0.40</typo> | 3-5 | breitestes | unten | GND | ueber #8 | |
| 11 | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#b2f1ff>1.51</typo> | <typo bg:#bdb2ff>1.85</typo> | x | <typo bg:#bdb2ff>1.85</typo> | duenne Bahn, unter der Mittleren Flaeche, ueber #12, 1 Via/Segment | | | 10 | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#b2f4ff>1.50</typo> | x | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#b9b2ff>1.83</typo> | 1 | breit | mitte | Vref | driftet langsam, wenn Versorgung angeklemmt (andere pins sind nah an GND) | |
| 12 | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#b2f4ff>1.50</typo> | <typo bg:#b9b2ff>1.83</typo> | <typo bg:#bbb2ff>1.84</typo> | x | duenne Bahn, ueber der unteren Flaeche, unter #11, 1 Via/Segment | | | 11 | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bdb2ff>1.85</typo> | <typo bg:#b2f1ff>1.51</typo> | <typo bg:#bdb2ff>1.85</typo> | x | <typo bg:#bdb2ff>1.85</typo> | 1 | dünn | | 300/600 dpi | unter der Mittleren Flaeche, ueber #12 | |
| | 12 | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#ffe0b2>0.61</typo> | <typo bg:#bbb2ff>1.84</typo> | <typo bg:#b2f4ff>1.50</typo> | <typo bg:#b9b2ff>1.83</typo> | <typo bg:#bbb2ff>1.84</typo> | x | 1 | dünn | | Aout | ueber der unteren Flaeche, unter #11 | |
Vermutungen: | |
* 6,8,10,11,12: Daten | |
* 7,9: Versorgung | |
| |
sieht verdammt nach [[http://rohmfs.rohm.com/en/products/databook/datasheet/module/contact_image_sensor/flatbed/lsh3008-ca10a.pdf]] aus | sieht verdammt nach [[http://rohmfs.rohm.com/en/products/databook/datasheet/module/contact_image_sensor/flatbed/lsh3008-ca10a.pdf]] aus |
| |
| * 6 Startpuls |
| * 8 Clock |
| * 10 Vref (sollte auf GND fest) |
| * wenns hoeher ist, gibts kein gescheites bild mehr |
| * 11 DPI Mode |
| * macht auf jeden Fall, wieviele Clocks man pro Zeile rausholen kann |
| * 0/L: 300 dpi ~2600 clocks |
| * 1/H: 600 dpi ~5268 clocks |
| * nach anderen datenblaettern hat man 82 clocks "output period", dann kommen die pixel (inkl. vorne und hinten dummypixeln) |
| * 600 dpi: 5184 pixels |
| * 300 dpi: 2592 pixels |
| * 12 Analog Out |
| * bei steigender Clock gehts scheinbar los (kommt von GND hoch fuer jeden Pixel neu, gefuehlte 100ns hier) |
| * bei fallender Clock sampeln klingt sinnvoll |
| |
| ==== Operation ==== |
| |
| Startpuls wird bei fallender Clock gesampelt. Wenn Startpuls, dann werden die Werte in den Ausgabepuffer geschickt. Dann mit Clock rauscyceln. Belichtungszeit haengt wohl vom Intervall zwischen Startpulsen ab. |
| |
| Was ich mache (funktioniert, kann man bestimmt noch reduzieren): |
| |
| * Werte -> Shiftregister, neue Belichtung starten: |
| * Puls hoch |
| * Clock hoch |
| * warte 500us |
| * Clock runter |
| * warte 500us |
| * Puls runter |
| * Shiftregister rausholen: |
| * Clock rauf (Signal geht los) |
| * warte 1us |
| * Clock runter (Signal sollte stabil sein, kann man sampeln) |
| * warte 1us |
| * so oft wie es pixel gibt |
| * restliche Belichtungszeit geben |
| * warte, 0-20 Millisekunden haben geklappt |
| |
| ==== Arduino ==== |
| |
| <code> |
| #define START 2 |
| #define CLOCK 3 |
| #define DPIMODE 4 |
| |
| bool dpimode = 1; |
| uint16_t pixels = dpimode ? 5184 : 2592; |
| |
| uint32_t linetime = 20000; // us |
| uint32_t sched = 0; |
| |
| void setup() { |
| pinMode(START, OUTPUT); |
| pinMode(CLOCK, OUTPUT); |
| pinMode(DPIMODE, OUTPUT); |
| |
| digitalWrite(DPIMODE, dpimode); |
| |
| sched = micros(); |
| } |
| |
| void loop() { |
| digitalWrite(START, HIGH); |
| digitalWrite(CLOCK, HIGH); |
| digitalWrite(CLOCK, LOW); |
| digitalWrite(START, LOW); |
| |
| for (uint16_t counter = 0; counter < 82 + pixels; counter += 1) |
| { |
| PORTD |= _BV(PORTD3); |
| //delayMicroseconds(1); |
| PORTD &= ~_BV(PORTD3); |
| //delayMicroseconds(1); |
| } |
| |
| sched += linetime; |
| int32_t dt = sched - micros(); |
| while (dt > 0x4000) |
| { |
| delayMicroseconds(0x4000); |
| dt -= 0x4000; |
| } |
| if (dt > 0) |
| delayMicroseconds(dt); |
| } |
| </code> |
==== coloring code ==== | ==== coloring code ==== |
<code> | <code> |
open("foo.txt", "w").write(rex.sub(colorize, source)) | open("foo.txt", "w").write(rex.sub(colorize, source)) |
</code> | </code> |
| |
| ==== Bilder ==== |
| |
| {{projekte:sx100:img_20160604_004626.jpg?500|}} |
| |
| {{projekte:sx100:img_20160604_004801.jpg?500|}} |
| |
| {{projekte:sx100:img_20160604_004821.jpg?500|}} |
| |
| |