Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
projekte:epson-stylus-sx100 [2016-06-04 01:21] – [Contact Image Sensor] crackiprojekte:epson-stylus-sx100 [2017-01-17 01:01] (current) – external edit 127.0.0.1
Line 7: Line 7:
 Uebrig sind: Uebrig sind:
  
-  * Contact Image Sensor mit LEDs+  * [[projekte:contact_image_sensor|Contact Image Sensor]] mit LEDs
   * Schrittmotor (96 Schritte, 18 Ohm, ~0.2-0.3 Ampere)   * Schrittmotor (96 Schritte, 18 Ohm, ~0.2-0.3 Ampere)
   * zwei DC Motoren, vmtl brushed   * zwei DC Motoren, vmtl brushed
Line 16: Line 16:
  
 Beschriftungen: FC11B913F56 F KTH0351-2 Beschriftungen: FC11B913F56 F KTH0351-2
 +
 +Numerierung:
 +  * Rohm: Pin 1 aussen.
 +  * PCB: Pin 1 innen <- die nehmen wir
 +
 +==== Beleuchtung ====
  
 Die LEDs brauchen so 2-3 Volt, Strom ~20 mA bringt schon Licht. Die LEDs brauchen so 2-3 Volt, Strom ~20 mA bringt schon Licht.
Line 21: Line 27:
 die TO Pins am PCB sind: V+, Blau, Rot, Gruen. die TO Pins am PCB sind: V+, Blau, Rot, Gruen.
  
-NumerierungFlachbandkabel von oben kommendConnector von innen nach aussen+Bei 5V Versorgung sollte mit folgenden Widerständen nach Erde gezogen werden fuer weisses PapierRot:50Grün:50, Blau:220.
  
 +<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 |   Rot Grün Blau | x | LED VCC |+|     5 |        x | LED |
  
-^ + \ - ^    6 ^    7 ^    8 ^    9 ^   10 ^   11 ^   12 ^ Beschreibung des Pins ^ +==== Datensignale ====
-|     6 |    x | <typo bg:#fff4b2>0.61</typo> | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#dfb2ff>1.51</typo> | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#ffb2b2>1.85</typo> | duenne Bahn zwischen oberer Flaeche und Schrauben, 1 Via je Segment | +
-|     7 | <typo bg:#b2e0ff>1.22</typo> |    x | <typo bg:#b2baff>1.34</typo> | <typo bg:#b2ffd4>0.99</typo> | <typo bg:#b2baff>1.34</typo> | <typo bg:#b2baff>1.34</typo> | <typo bg:#b2beff>1.33</typo> | breite Flaeche ganz oben, 2 Vias je Segment | +
-|     8 | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#fff4b2>0.61</typo> |    x | <typo bg:#dfb2ff>1.51</typo> | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#ffb2bb>1.82</typo> | duenne Bahn, 1 Via je Segment von unten hochstechend | +
-|     9 | <typo bg:#ffb5b2>0.41</typo> | <typo bg:#ffb2c2>0.35</typo> | <typo bg:#ffb5b2>0.41</typo> |    x | <typo bg:#ffb5b2>0.41</typo> | <typo bg:#ffb5b2>0.41</typo> | <typo bg:#ffb2b2>0.40</typo> | breite Flaeche unten, ueber #8, 3-5 Vias je Segment | +
-|    10 | <typo bg:#ffb2b5>1.84</typo> | <typo bg:#fff4b2>0.61</typo> | <typo bg:#ffb2b5>1.84</typo> | <typo bg:#dcb2ff>1.50</typo> |    x | <typo bg:#ffb2b5>1.84</typo> | <typo bg:#ffb2b8>1.83</typo> | breite Flaeche mitte, wo die Schrauben durchgehen (aber kein kontakt). 1 Via/Segment | +
-|    11 | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#fff4b2>0.61</typo> | <typo bg:#ffb2b2>1.85</typo> | <typo bg:#dfb2ff>1.51</typo> | <typo bg:#ffb2b2>1.85</typo> |    x | <typo bg:#ffb2b2>1.85</typo> | duenne Bahn, unter der Mittleren Flaeche, ueber #12, 1 Via/Segment | +
-|    12 | <typo bg:#ffb2b5>1.84</typo> | <typo bg:#fff4b2>0.61</typo> | <typo bg:#ffb2b5>1.84</typo> | <typo bg:#dcb2ff>1.50</typo> | <typo bg:#ffb2b8>1.83</typo> | <typo bg:#ffb2b5>1.84</typo> |    x | duenne Bahn, ueber der unteren Flaeche, unter #11, 1 Via/Segment |+
  
 +Spannung 1 mA:
 +^ + \ - ^    6 ^    7 ^    8 ^    9 ^   10 ^   11 ^   12 ^ Vias ^ Geometrie  ^ relativ ^ Vermutung ^ Beschreibung des Pins ^
 +|     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 |
 +|     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       | |
 +|     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 |
 +|     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 |
 +|    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) |
 +|    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 |
  
 +==== Insgesamt ====
 +
 +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 ====
 <code> <code>
 import re, colorsys import re, colorsys
Line 45: Line 145:
 rex = re.compile('(?:<span[^>]*>)?([0-9].[0-9]{2})(?:</span>)?') rex = re.compile('(?:<span[^>]*>)?([0-9].[0-9]{2})(?:</span>)?')
  
-def color(value):+def color(value, min, max): 
 +    value = (value - min) / (max - min)
     (r,g,b) = [int(v*255) for v in colorsys.hls_to_rgb(value, 0.85, 1.0)]     (r,g,b) = [int(v*255) for v in colorsys.hls_to_rgb(value, 0.85, 1.0)]
     return "#{:02x}{:02x}{:02x}".format(r,g,b)     return "#{:02x}{:02x}{:02x}".format(r,g,b)
Line 51: Line 152:
 def colorize(match): def colorize(match):
     value = match.group(1)     value = match.group(1)
-    return '<typo bg:{1}>{0}</typo>'.format(value, color((float(value)-0.4)/(1.85-0.4)))+    return '<typo bg:{1}>{0}</typo>'.format(value, color(float(value)0.4, 2.5))
  
 source = open("foo.txt").read() source = open("foo.txt").read()
 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|}}
 +
 +
Navigation



You are not allowed to add pages