Kameramodule fuer uC: Unterschied zwischen den Versionen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche
(TSL1401)
(TSL1401)
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 21: Zeile 21:
 
** Schritt 1: Belichten - Dauer: 1000us typ, synchronisiert auf 100 Hz - also auf 10.000us
 
** Schritt 1: Belichten - Dauer: 1000us typ, synchronisiert auf 100 Hz - also auf 10.000us
 
*** Schritt 1a: Per Interrupt genau die Wiederholrate abwarten (damit es nicht flimmert bei 50 Hz), darin wird die Belichtung gestartet. Dazu werden die restlichen Taksignale eingetaktet. Das SI-Signal und 17 Taktzyklen, die noch nicht zur Belichtung führen, müssen dazu vorher irgendwie eingetaktet worden sein.
 
*** Schritt 1a: Per Interrupt genau die Wiederholrate abwarten (damit es nicht flimmert bei 50 Hz), darin wird die Belichtung gestartet. Dazu werden die restlichen Taksignale eingetaktet. Das SI-Signal und 17 Taktzyklen, die noch nicht zur Belichtung führen, müssen dazu vorher irgendwie eingetaktet worden sein.
**** Schritt 1b: Per zweiten Interrupt wird dann die Belichtung wieder gestoppt. Dieser Interrupt muss entsprechend später gestartet worden sein.
+
*** Schritt 1b: Per zweiten Interrupt wird dann die Belichtung wieder gestoppt. Dieser Interrupt muss entsprechend später gestartet worden sein.
 
** Schritt 2: Auslesen - Dauer: unbekannt, aber hohe ADC Rate möglich
 
** Schritt 2: Auslesen - Dauer: unbekannt, aber hohe ADC Rate möglich
 +
** Schritt 3: Vorbereiten das nächstes Bild belichtet werden kann
 +
 +
 +
Damit wird nun eine Line-Cam gebaut - Zeilenkamera an Teensy 3.x mit Ausgabe auf einem Receipt-Printer. Der Algorithmus dafür ist folgender:
 +
* Hole Zeile von der Kamera (128 Pixel, 16-Bit Graustufen)
 +
* Noch beim Abholen der Zeile wird der Min und Max-Wert aller Pixel erfasst und die Graustufen von 16-Bit nach 8-Bit skaliert, um den Kontrast automatisch aufs Maximum zu regeln. Es wird allerdings nicht der Min-Max-Wert der Zeile verwendet, sondern ein gleitender Mittelwert dieser Größen über die letzten gelesenen Zeilen.
 +
* Die 8-Bit Zeile wird nun per einfacher Mittelung von 128 auf 384 Pixel hochgerechnet
 +
* Das [http://www.tannerhelland.com/4660/dithering-eleven-algorithms-source-code/ Dithering] benötigt bis zu 3 Zeilen
  
 
[[Datei:LineCamSpass.png]]
 
[[Datei:LineCamSpass.png]]

Aktuelle Version vom 26. August 2017, 23:27 Uhr

PTC06 Chip: VC0703NLEB

  • JPG Output
  • Pinne: +5V, GND, CVBS, RX, TX (3.3V)
  • Meldet: VC0703 1.00, OV7720
  • Sehr langsame Übertragung, kann angeblich kaputt gehen, wenn Datenrate auf 115200 Baud gestellt wird

OV7670

  • Gibt Daten über 8-Bit Bus aus
  • Braucht hohe Datenraten / Clocks, nicht geeignet für kleine Controller


TSL1401

  • Line-Camera 128x1 pixel
  • Relativ teuer (20-30 EUR)
  • Bilder hiermit aufnehmen macht irgendwie Spaß...
  • Das Ding von EBay hat zwei Ausgänge:
    • AO: Direkter Ausgang aus dem CCD, kann nur wenig belastet werden, kann dann aber sehr schnell sein - die Flankensteilheit liegt durchaus im Sub-us-Bereich. Das Signal für das jeweils nächste Pixel kommt mit der Low-High-Flanke von Clock. Das Signal erreicht bei starker Belichtung durchaus Werte nahe VCC, auch wenn im Datenblatt was anderes steht!
    • OUT: Ausgang gepuffert von einem OpAmp. Kräftiges Signal, über das Poti kann eine Verstärkung eingestellt werden, womit die Aufnahmen "Aufgehellt" werden. Der OpAmp ist allerdings langsam, umso langsamer, je höher die Verstärkung eingestellt wird. Nach einer steigenden Clock-Flanke sollte man etwa 20us warten, bevor man das Signal per ADC misst. Auch erreicht dieser Ausgang etwas weniger hohe Spannungslevel (typ. max. 4.2V) und verstärkt bei hohen Verstärkungen auch den Dunkel-Wert der Pixel, so das eine Art "Offset" von bis zu 1V entsteht.
  • Linse: Das Modul mit den zwei breiten goldenen Streifen an den Seiten der PCB hat eine ziemlich weitwinklige Optik von mind 90grad. Typischerweise muss die Linse fast ganz reingedreht werden, um vernünftige Bilder aus dem Raum zu machen.
  • Software:
    • Schritt 1: Belichten - Dauer: 1000us typ, synchronisiert auf 100 Hz - also auf 10.000us
      • Schritt 1a: Per Interrupt genau die Wiederholrate abwarten (damit es nicht flimmert bei 50 Hz), darin wird die Belichtung gestartet. Dazu werden die restlichen Taksignale eingetaktet. Das SI-Signal und 17 Taktzyklen, die noch nicht zur Belichtung führen, müssen dazu vorher irgendwie eingetaktet worden sein.
      • Schritt 1b: Per zweiten Interrupt wird dann die Belichtung wieder gestoppt. Dieser Interrupt muss entsprechend später gestartet worden sein.
    • Schritt 2: Auslesen - Dauer: unbekannt, aber hohe ADC Rate möglich
    • Schritt 3: Vorbereiten das nächstes Bild belichtet werden kann


Damit wird nun eine Line-Cam gebaut - Zeilenkamera an Teensy 3.x mit Ausgabe auf einem Receipt-Printer. Der Algorithmus dafür ist folgender:

  • Hole Zeile von der Kamera (128 Pixel, 16-Bit Graustufen)
  • Noch beim Abholen der Zeile wird der Min und Max-Wert aller Pixel erfasst und die Graustufen von 16-Bit nach 8-Bit skaliert, um den Kontrast automatisch aufs Maximum zu regeln. Es wird allerdings nicht der Min-Max-Wert der Zeile verwendet, sondern ein gleitender Mittelwert dieser Größen über die letzten gelesenen Zeilen.
  • Die 8-Bit Zeile wird nun per einfacher Mittelung von 128 auf 384 Pixel hochgerechnet
  • Das Dithering benötigt bis zu 3 Zeilen

LineCamSpass.png