Forum: Mikrocontroller und Digitale Elektronik CCD Zeile NEC µPD8872CY


von Sebastian B. (sfreak) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

ich bin gerade dabei mich mit der CCD-Zeile µPD8872 von Pollin zu 
beschaeftigen.

http://www.pollin.de/shop/downloads/D100997D.PDF

Habe das Teil an einen FPGA angeschlossen und kann auch mehr oder minder 
sinnvolle Daten auslesen. Ich habe ein altes M42 Objektiv vor dem CCD 
befestigt und ein Blatt mit schwarzen Streifen davor gehalten. Mit ein 
bisschen rumprobieren bekomme ich die Streifen abgebildet (siehe Bild).

Allerdings ist der Sensor ziemlich unempfindlich, ich brauchte einen 
Baustrahler um die Vorlage hell genug zu beleuchten (Objektiv hat Blende 
3,5).

Das passt irgendwie nicht zu den Berichten, die ich von anderen CCD 
Zeilen hier gelesen habe. Da war immer von super-empfindlich und 
"uebersteuert staendig" die Rede.

Kennt jemand diesen Sensor. Ist er wirklich so unempfindlich?

Wie funktioniert ueberhaupt die Belichtung? Der Chip wird ja durchgehend 
beleuchtet, ich wuerde daher vermuten, dass die gesamte Auslesezeit 
zwangsweise auch Belichtungszeit ist, und der TG-Puls (transfer gate, 
siehe Bild bzw. Datenblatt) nur die Ladungen von den Fotozellen in ein 
Schieberegister uebertraegt. Die Empfindlichkeit muesste dann von der 
Auslesegeschwindigkeit abhaengen. Ist das richtig?

Kann mir jemand ein aehnliches Datenblatt empfehlen, das die 
Zusammenhaenge ein bisschen besser erklaert als das vorliegende?

Viele Gruesse
Sebastian

von karadur (Gast)


Lesenswert?

Hallo

die Belichtungszeit ist die Zeit zwischen 2 TG-Pulsen. Ist der Abstand 
zu groß hast du Überbelichtung und die CCDs "laufen über". Wenn du 
einzelne Zeilen einlesen willst mußt du erstmal dummylesen: heißt 
auslesen und verwerfen weil die Ladungszellen erst mal leer sein müssen. 
Dein Auslesetakt muß hoch genug sein um die Zeile zwischen 2 TG Pulsen 
leer zu bekommen. Während des TG-Pulses muß dein Takt stoppen um nicht 
Ladung auf mehrere Zelle zu verteilen.

Wenn die Zeile überbelichtet ist bekommtst du auch "Bilder". Das kann 
aber alles sein.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Hallo,

ich denke das habe ich alles berücksichtigt. Werde einfach mal meinen 
Auslesetakt noch weiter verlangsamen und mal vergleichen, was für Werte 
rauskommen.

Wie lang sollten denn die TG Pulse auseinander liegen? Mit 2 bis 10 MHz 
Takt ist das ja eine riesige Spanne.

Wahrscheinlich wäre es sinnig mir ein halbwegs gleichmäßig beleuchtetes 
Testbild zu basteln... Schuhkarton mit ein Paar Streifen drin oder so. 
Werd mir mal was ueberlegen.

Sebastian

von karadur (Gast)


Lesenswert?

Hallo


Streifenmuster ist ganz gut, aber mach die Streifen unterschiedlich 
breit. Dann kann man das Signal besser zuordnen. Bei 2MHz hast du ca. 
5ms kürzeste Belichtungszeit.Die ILX von Sony mit denen ich gearbeitet 
habe mussten schneller ausgelesen werden. Bei Framos gab es mal ein PDF 
welches die CCD-Technik gut beschrieb. Habe es leider nicht gefunden 
aber auf der Homepage gibt es Infos dazu.

Ich habe damals den Fehler gemacht zu Anfang die CCD nicht mehrmals zu 
leeren. Die Sonys haben einige Zyklen gebraucht um nach einer 
Überbelichtung wieder gut zu funktionieren. Ich habe dann die Blende des 
Objektives zu gemacht und dann langsam wieder geöffnet. Mit einem Scope 
geht das einstellen aber recht gut.

von Sebastian B. (sfreak) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

inzwischen bekomme ich recht stabil Daten aus dem CCD gelesen.

Habe ein Schachtel genommen, auf der einen Seite ein Loch fuers Objektiv 
geschnitten und auf der gegenuberliegenden Seite mein 
Test-Streifenmuster aufgeklebt. Von oben kann man die Schachtel 
beleuchten und so fuer recht konstante Lichtverhaeltnisse sorgen.

Nun baue ich noch ein schnelleres Interface zum PC, damit man 
komfortabler scharfstellen und Serienaufnahmen machen kann. Werde bei 
Gelegenheit mal ein Paar Bilder vom Aufbau machen.

Am analogen Ausgangssignal des CCD ist mir aber noch einiges unklar.
Zu Vout, siehe Timing-Diagramme:
Im Datenblaat ist die Offsetspanung mit 6V (4,5..7,5V) angegeben. Die 
Saettigungsspannung (ich vermute, das ist die maximale Spannung die fuer 
ein Pixel ausgegeben werden kann?) soll 3V sein.
Ich wuerde also vermuten, dass Vout zwischen 6V-3V und 6V liegen kann.

Was hat der kleine Huckel (mit der roten 1 bezeichnet) zu bedeuten?

Nutze ich einen 3.3V ADC und habe Vout einfach 3:1 heruntergeteilt. Ist 
natuerlich ueberhaupt nicht optimal, daher ueberlege ich wie es besser 
geht.

von karadur (Gast)


Lesenswert?

Hallo

such mal nach correlated double sampling. Gab mal Ics von Sony die das 
machten. Sind 2 S/H Stufen mit einem Subtrahierer. Der eine S/H wird auf 
die Blackpixel getriggert. Der 2te auf die Pixel. Am Ausgang liegt dann 
die Differenz von aktuellem Pixel und Schwarzwert.

Woher der Höcker im Signal kommt weiß ich nicht.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Genau so einen CDS-Chip habe ich auch bei Analog gefunden: AD9826

Gehäuse mit Objektiv hab ich nun, jetzt muss ich noch den CCD-Chip auf 
die neue Platine mit AD9826 transplantieren... mal schauen ob das gut 
geht.

Sebastian

von karadur (Gast)


Lesenswert?

Hallo

interessiert mich was da heraus kommt. Berichte mal. Viel Erfolg.

von Wolfgang (Gast)


Lesenswert?

Hallo.

Der letzte Beitrag hier ist zwar schon ein paar Tage her, ich versuche 
trotzdem mal Anschluss zu finden. ;)

Ich habe aus einem alten Scanner einen uPD3778 inkl. Platine 
herausoperiert, und den versuche ich gerade mit einem ATmega64 
auszulesen. Das Timing zur Triggerung eines Auslesezyklus scheine ich 
allerdings nicht richtig zu treffen, ich betreibe ihn nach 
Datenblattbeispiel mit f_RB = 2 MHz.

@sfreak
Bei Dir scheint es ja sauber zu laufen, könntest Du bitte den Teil 
Deines Programms posten, der den Timingteil enthält? Auch wenn es im 
Unterschied ein FPGA ist, vielleicht kann ich mir das Timing abschauen 
und mit meinem vergleichen? Danke! :)

Gruss
Wolfgang

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Hi,

ich habe mein Programm inzwischen weigehend umgestrickt, da ich noch den 
oben angesprochenen AD9826 eingebaut habe. Werde heut Abend mal schauen, 
ob ich die alten Sachen noch habe.

Sebastian

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite



Lesenswert?

Ich habe das ganze mal für einen Spektralanalyseversuch mit einem 
ILX551B Sensor und einem ATMega 168 in BASCOM funktionsfähig 
hinbekommen.
Als Prismenersatz benutze ich eine Beugungsgitter Folie.
Die Daten des Liniensensors müssen noch kalibriert werden, da dieser im 
Blauen Bereich schon sehr abfällt (siehe Datenblat ILX551B).
Auch die Software bedarf noch der Überarbeitung. Zusätzlich habe ich 
noch ein Empfangs- und Auswerteprogramm in Delphi geschrieben.
Der Ablauf ist folgender: Der ATMega168 wartet auf die Eingabe der 
Belichtungszeit (in us), startet dann einen Dummylauf über alle Pixel 
des ILX551B um die Sensorpixel zu leeren. Danach wird der ILX551B 
ausgelesen und die Daten in ein Array geschrieben. Anschliessend werden 
diese Daten über die Serielle Schnittstelle über ein myUSBtoUART 
Serial-Modul mit 115200 baud zum PC übertragen. Mein Pascal Programm 
liesst die Daten ein, stellt sie in einer Grafik dar (per Mouse auch 
Zommbar und in den Achsen verschiebbar) und und triggert dann den 
ATMega168 für einen neuen Messdurchlauf. Das Ganze muss natürlich noch 
auf korrekte Wellenlängen skaliert werden, wie ich das genau hinbekomme 
überlege ich noch.
Im übrigen ist der ILX551B äusserst Empfindlich und übersteuert sebst 
bei kleinstem Fremdlichteinfall.
Anbei Spaktral-Bild von rotem Billiglaser, BASCOM- und 
Delphi-Auswerte-Programm.

Das Projekt wird von mir in nächster Zeit wie folgt verbessert:
1. Ersatz des ATMega168 durch einen ATXMega 256A3, A/D Auflösung 12 bit 
(jetzt 8 bit) mit schnellerer Wandlung und Abfrage ALLER Pixel. Ich 
hoffe dass der XMega die 12 Bit auch bringt; es soll da Probleme geben.
2. Normierung und Linearisierung der Spektralempfindlichkeit des ILX551B 
Sensors und Anzeige des Spektrums in Wellenlängen (µm).
3. Einsatzt von 2 Linsen zur Strahlaufweitung und Parallelisierung 
hinter dem Spalt.
4. Gesteuerte Spaltweitengrösse mittels Servo.
5. Mechanische Konstruktion: Gehäuse vollkommen lichtdicht und innen 
schwarz. Unterdrückung des direkten Strahlengangs hinter der 
Gitterfolie, da sonst das Gehäuseinnere zusätzliches unerwünschtes Licht 
abbekommt.

von Wolfgang S. (wosc)


Lesenswert?

Hallo.

@sfreak
Das wäre klasse, wenn es da noch was Altes gäbe, vorallem weil es auch 
eine NEC Zeile ist.

Meine NEC Zeile braucht im Grunde vier CLKs (zwei für das Gate, zwei für 
das Shift), wobei eins davon das invertierte eines anderen ist also 
trivial. Daswegen waere ein Beispiel, das funktioniert, ganz schön. :)

Gruss
Wolfgang

von RS (Gast)


Lesenswert?

Hi,
die Horizontaltakte müssen sich ziemlich genau bei 50% Signalpegel 
schneiden. Wenn nicht, verschmiert man die Ladungen im Schieberegister 
und bekommt ein Matschbild. Beachte die kapazitive Last für die 
H-Takte!.
Die Takte für den Ladungstransfer können ruhig langsam schalten. In 
dieser Zeit steht der Sensor ja. Es reichen dort also einfache Treiber.
Zeilensensoren sollten eigentlich immer laufen. Also immer den 
vollständigen Zyklus durchlaufen. Wenn das H-Regster leer gelesen ist 
taktet man einfach weiter, um eine Ansammmlung von Ladungen dort zu 
verhindern bis zum nächsten Ladungstransfer aus den Fotodioden.

Gruß, RS

von Roman S. (barabash)


Lesenswert?

Hallo an alle!

Ich und mein Kollege sitzen gerade auch an dem NEC 8872 und haben es 
versucht mit Arduino Uno die Daten zum PC zu transportieren, allerdings 
kommt bei uns immer wieder ein Signal nur von einer Stelle, nämlich vom 
Anfang des Sensors, wo eigentlich die Black Pixel liegen. Wir haben das 
Programm zum Takten so definiert, dass nach jedem phi1-Takt ein Wert 
ausgelesen wird. Ein Paar Dummy-Durchläufe(also wo es ganz normal 
getaktet wird, aber nichts ausgelesen) haben wir auch eingebaut. 
Allerdings bleiben die meisten Pixel unempfindlich. Weiss jemand, woran 
es liegen könnte? Oder liegt es evtl. an dem Arduino? Mit uC haben wir 
bis jetzt nur wenig Erfahrung gemacht...

von Roman S. (barabash)


Lesenswert?

Wir würden gerne das ganze mit so einem ILX-Sensor testen, aber ausser 
die bei Eureca für haben wir keine gefunden, die man in Deutschland 
bestellen könnte. Aus USA oder China zu bestellen dauert es leider zu 
lange. Weiss jemand in welchen Geräten die teile eingebaut wurden?

von Wally W. (wally234)


Lesenswert?

Hallo Roman,

hat denn Eureca keine mehr, oder gibt es andere Gründe dort nicht zu 
kaufen ?
Könntet Ihr Euren Arduino code für den NEC 8872 hier posten ?


Gruß Wally

von Roman S. (barabash)


Angehängte Dateien:

Lesenswert?

Wir haben uns den ILX554B geholt, allerdings ist das Ergebnis im Moment 
nicht zufriedenstellend. Das Problem liegt nach wie vor beim Auslesen, 
das kann man anscheinend einfach so mit Serialprint-Befehl nicht 
lösen...

von Roman S. (barabash)


Lesenswert?

Ich versuche den Code einfacher zu gestalten, falls er unverstaendlich 
ist

von Wally W. (wally234)


Lesenswert?

Vielen Dank zuächst :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.