Photonenzähler

Harz_Joerg

Neues Mitglied
06. Apr. 2009
20
0
0
Sprachen
Hallo liebe AVR-ler,

ich möchte hier mein berufliches µC-Projekt vorstellen und habe dazu aber zunächst mehr Fragen als sonst was, da meine Ahnung von der µC-Materie doch ehr gering ist.

Ich benötige Ersatz für meine EG&G-Counter, welche ich in einem Fluoreszenz-Spektrometer zur Einzelphotonen-Zählung verwende. Die Zählwerke sind mittlerweile mit 25 Jahren so alt, dass ich arge Probleme mit allen Kontakten in der Elektronik und zum Rechner habe. Zudem ist der Anschluss an den PC per IEEE-Schnittstelle auch nicht so optimal.
Ich würde daher lieber per USB die Zählraten von einem µC übermittelt bekommen.

Die Spezifikation der alten Zähler liegt bei 25 MHz (also 40 ns Pulsabstand).
Zählen muss ich zwar nur bei maximal 2 Millionen Photonen/s aber da die Biester ja nicht schön aufgereicht eins-nach-dem anderen kommen, möchte ich auch mindestens 25 MHz haben.
Das auszuwertende Signal kommt von einem Constant-Friction-Discriminator mit folgenden Spezifikationen: -800 mV, einstellbare Breite zwischen 6 und 150 ns, rise- und fall-Zeit <2 ns.
Der Counter soll dann über einen einstellbaren Zeitbereich (0.1 bis 10 s) die Photonen für zwei Kanäle auf ein Startsignal hin aufsummieren und per USB an den Rechner weiterleiten.
Desweiteren sollte er über ein Display die cps (Countes per second) beider Kanäle kontinuierlich anzeigen.

Was meint ihr brauche ich dazu (µC, Peripherie zum Daten einlesen und Display-Peripherie etc.).

Ich hoffe, das Projekt passt hier her und freue mich schon auf eure Antworten und Anregungen.

Grüße,

Jörg
 
Hi Jörg,

Die Spezifikation der alten Zähler liegt bei 25 MHz (also 40 ns Pulsabstand).
Zählen muss ich zwar nur bei maximal 2 Millionen Photonen/s aber da die Biester ja nicht schön aufgereicht eins-nach-dem anderen kommen, möchte ich auch mindestens 25 MHz haben.
Das auszuwertende Signal kommt von einem Constant-Friction-Discriminator mit folgenden Spezifikationen: -800 mV, einstellbare Breite zwischen 6 und 150 ns, rise- und fall-Zeit <2 ns.
Der Counter soll dann über einen einstellbaren Zeitbereich (0.1 bis 10 s) die Photonen für zwei Kanäle auf ein Startsignal hin aufsummieren und per USB an den Rechner weiterleiten.
Desweiteren sollte er über ein Display die cps (Countes per second) beider Kanäle kontinuierlich anzeigen.

Was meint ihr brauche ich dazu (µC, Peripherie zum Daten einlesen und Display-Peripherie etc.).
hört sich interessant an :D Aber bei den ulsbreiten wirst Du wohl Hardware-
Unterstützung brauchen. Die 6ns-Pulse wird die Eingangsschaltung des AVR
wohl als Schmutz wegfiltern. Also wirst Du wohl um einen Hardware-Zähler
(74er-Serie ?) nicht drum rum kommen. Der wird dann vom ATmega gesteuert,
ausgelesen und zum PC geschickt. Nur mal als erster Denkansatz ... ;)

Gruß
Dino
 
Hallo Jörg,

da hat Dino recht. Die Pulsbreiten sind so gering, dass du es alleine mit einem AVR nicht realisieren kannst. 150ns breite Pulse könntest du wahrscheinlich als Quelle für den externen Takt eines 16/8bit Timers verwenden, aber das ist dann auch schon grenzwertig, da der AVR das Signal am Pin T0/T1 sampled. (fclk,t0 < 1/2 fclk).
Bei einem Systemtakt von 16MHz (1/62,5ns) wäre der Grenzwert für T0/T1 125ns.

Grüße,
Dirk
 
Danke für Eure schnellen Antworten:)
Das ich einen Hardwarezähler brauch hab ich schon geahnt (befürchtet). Habe mir auch schon Datenblätter für verschiedene 74C angeschaut, da gibt's schon was passendes.
Wenn ich da z.B. einen mit 12-Bit Breite nehme, dann wäre ich ja für den µC bereits bei einer Einleserate von nur 6 Khz. Das wäre völlig OK, oder.
Aber wie bekomme ich denn die für die beiden Quellen je 12 Bit zum AVR. Parallel blockiert mir ja allein für den Datentransfer 24 IO-Pins.
Wie mach ich aus den 2x12 Bit was serielles?

Jörg
 
Hi Jörg,

Das ich einen Hardwarezähler brauch hab ich schon geahnt (befürchtet). Habe mir auch schon Datenblätter für verschiedene 74C angeschaut, da gibt's schon was passendes.
ich würde den gesamten Zähler-Teil in Hardware bauen und den uC nur zum
verwalten verwenden. Also der Hardwarezähler zählt und der uC liest in aus,
steuert und überträgt zum PC und so. Das ist am einfachsten.

Wenn ich da z.B. einen mit 12-Bit Breite nehme, dann wäre ich ja für den µC bereits bei einer Einleserate von nur 6 Khz. Das wäre völlig OK, oder.
Aber wie bekomme ich denn die für die beiden Quellen je 12 Bit zum AVR. Parallel blockiert mir ja allein für den Datentransfer 24 IO-Pins.
Wie mach ich aus den 2x12 Bit was serielles?
Da brauchst du atomare Operationen ... :D
Lies dir mal den Teil vom 16-Bit-Zähler im Datenblatt durch, das weißt du was
ich meine. Da steht das ganz gut drin.

Also der Hardwarezähler zählt, wird dann von dir nach der eingestellten Zeit
kurz blockiert, parallel in ein Register geladen und das Register vom uC
ausgelesen. Nach dem "in Register laden" kannst Du ihn auchh schon wieder
bei 0 starten lassen.

Denk dran ... Binärzähler haben auch Durchlaufzeiten durch die FlipFlops.
Wenn er absolut sauber arbeiten soll, dann benötigst Du einen synchronen
Binärzähler. Der wird aber bei 25MHz evtl probleme bekommen. Darum würde
ich einen asynchronen Zähler bevorzugen und vor den latchen des Inhaltes
den Zähler so um die 100ns stoppen damit die eventuell anstehenden Bit-
Überträge im Zähler VOR dem latchen bis zum letzten FlipFlop durchlaufen
können. ... jaja die Signal- und Gatterdurchlaufzeiten :D

Gruß
Dino
 
(hab nicht alles gelesen)

Ich denke mir dass man einen beliebigen internen TCNT mit deiner Photonenerkenn-Elektronik als Taktquelle betreiben kann, und mit einem anderen TCNT in ausreichend kleinen Abständen Interrupts erzeugt in denen man den Zählwert des ersten Counters ausliest.
Dass sich ein Timercouter auch mit 25Mhz betreiben lässt wird man wohl noch erwarten dürfen. Problematisch ist villeicht dass man während dem Auslesen der Zählerregister keine Photonen zählen kann, aber das könnte man doch mit einem dritten Counter kompensieren der nur dan zählt wenn bei seinem Kollegen die Register ausgelesen werden.

EDIT: War kurz weg. Ok, habs gelesen, klar dass es bei so kurzen Flankenbreiten Probleme geben kann.
 
Hi Dino,

der Tip mit den 74HC393 und 74HC597 ist schon mal prima, würde aber lieber 12 Bit oder 16 nehmen. gibt's aber wie ich gefunden habe auch.

.....
Da brauchst du atomare Operationen ... :D
Lies dir mal den Teil vom 16-Bit-Zähler im Datenblatt durch, das weißt du was
ich meine. Da steht das ganz gut drin.

welches Datenblatt meinst Du? Ich habe leider nix entsprechendes gefunden.

Jörg
 
Hallo Jörg,

der Tip mit den 74HC393 und 74HC597 ist schon mal prima, würde aber lieber 12 Bit oder 16 nehmen. gibt's aber wie ich gefunden habe auch.
dann schalte die Dinger doch hintereinander ;)
Ein 74HC393 hat 2 Stück 4Bit-Binärzähler drin. Das macht bei 2 ICs bereits
16 Bit, oder bei 3 ICs 24 Bit. Dann packst du an jeden 74HC393 an die 8
Ausgänge die 8 Eingänge des 74HC597. Wenn du meinst, das du auslesen
möchtest, wird der Zähleingang der Zählerkolonne kurz blockiert, nach 100ns
oder so ein Übernahmetakt an allen 74HC597 angelegt und der Zählerstand
parallel in die Latches übernommen. Jetzt kannst du den Zählerstand in Ruhe
aus den hintereinandergeschalteten Schieberegistern rauslesen. Das wars :D

.....
Da brauchst du atomare Operationen ... :D
Lies dir mal den Teil vom 16-Bit-Zähler im Datenblatt durch, das weißt du was
ich meine. Da steht das ganz gut drin.
welches Datenblatt meinst Du? Ich habe leider nix entsprechendes gefunden.
Ich meine das von den ATmegas. Es muß nur einer mit 16-Bit-Zähler sein.
Da steht drin, wie man atomare Operationen an den Zählern durchführt.
...
Also du hast ja nur 8Bit-Busbreite. Wenn du nen 16Bit-Zähler auslesen willst,
der dauern zählt, wie willst du das machen damit zwischen den beiden
Leseoperationen sich der Zählerstand nicht ändert, du den Zähler aber nicht
stoppen willst ? :rolleyes:
Man liest zuerst das untere Byte. Mit der Leseoperation wird gleichzeitig das
obere Byte in einen Zwischenbuffer befördert. Danach wird das obere Byte
aus dem Buffer gelesen. Fertig.
Beim schreiben wird zuerst das obere Byte in den Buffer geschrieben und
danach mit dem schreiben des unteren Bytes gleichzeitig der geladene
Buffer in das obere befördert.
Bei 16-Bit Zählern also auf die Reihenfolge der Operationen achten ! ;)
Bei 8Bit Datenbus und 8Bit-Zähler ist die Operation dagegen immer atomar.

Das meinte ich mit Datenblatt und ATmega und 16Bit-Zählern.

Gruß
Dino
 
Hallo zusammen,

interessantes Projekt ! Ich selbst bastle seit einiger Zeit an einem Sky-Quality-Meter (SQM), also ein Meßgerät, was mir die Himmelsaufhellung und Qualität des Sternhimmels mißt. Ist im Prinzip nichts anderes, als der Photonenzähler. Ich verwende als Sensor einen TSL237, der mir eine der Lichtmenge proportionale Frequenz ausgibt. Allerdings ist die Frequenz bei "Dunkelheit" sehr niedrig.

Was für Sensoren verwendest Du ?

Thomas
 
Hallo ,

Was für Sensoren verwendest Du ?
ich schätze, das hat irgendwas mit Röntgenspektren oder sowas zu tun?
Da gibt es doch Sensoren mit Kristallen, die einfallende Strahlung in Photonen
wandeln, die dann gezählt werden können. Irgendetwas in der Art ?
Ist jetzt aber nur ne gaaannnnnzzzz dunkle Ahnung von mir. Hört sich
jedensfalls mächtig nach Materialuntersuchung und so an.

Kann aber auch sein, das ich hier gerade Äpfel mit Birnen zu Kompott verarbeite :D

@Jörg : Mach uns mal schlau :D

- - - - - - - - - - - -
hat das irgendwas damit zu tun ...
http://de.wikipedia.org/wiki/Fluoreszenz-Korrelations-Spektroskopie
???

Gruß
Dino
 
Kurz zum schlau werden:
Bei der Fluoreszenzspektroskopie betrachtet man das Spektrum (Lichtintensität als Funktion der Wellenlänge) von Farbstoffen, die durch energiereicheres Licht (bei mir UV bis ins Sichtbare) angeregt werden. Man nimmt auch Spektren unter Variation der Anregungswellenlänge auf.
Detektert wird mit gekühlten Photomultiplier , die auch im dustern noch sehr viel sehen können. Meine Zählraten variieren für die reine Fluoreszenz zwischen 3-4 Photonen/s bis hin zu 2e5-4e5. Mehr ist für den Photomultiplier zuviel. Ein Referenzdetektor geht bis 2e6.
Des Weiteren betreibe ich noch zeitaufgelöste Fluoreszenz: nach einem ns-Lichpuls (getakted im MHz bereich) betrachtet man mit minimal 50 ps zeitlicher Auflösung das Eintreffen des ersten Photons und erstellt dann ein Histogramm über einige 10 bis 1000 ns.
Das ganze dient zur Untersuchung von Kettendynamik und Struktur in Polymeren (fiese Physikalisch Chemie)!

Die in Dinos Link beschrieben FCS betreiben wir bei uns im Haus auch, ist aber eine andere Kiste, ehr wie dynamische Lichtstreuung.

_____________

Zu der Breite des Binärzählers:
ich habe 12-Bit Zähler und Schiebregister gefunden, mit denen müsste es doch auch prima und schnell gehen.
Zudem: eine Unterbrechung des Zählvorgangs ist bei der Anwendung nicht schlimm. Hauptsache die Zeitintervalle während des Zählens sind immer gleich und schwanken nicht in der Länge.

Jörg
 
Hallo,

Detektert wird mit gekühlten Photomultiplier , die auch im dustern noch sehr viel sehen können.
in der Halbleiterversion "Avalanche-Photodioden" :D hab ich auch beim
schmökern gefunden ...

Meine Zählraten variieren für die reine Fluoreszenz zwischen 3-4 Photonen/s bis hin zu 2e5-4e5. Mehr ist für den Photomultiplier zuviel. Ein Referenzdetektor geht bis 2e6.
2e6 (2MHz) sollte bei gleichmäßiger Pulsrate kein Thema sein. Aber es wird
wohl eine ungleichmäßige Rate sein ... ;) Sonst wär es ja einfach :rolleyes:
und man bräuchte keine 25MHz ...

Des Weiteren betreibe ich noch zeitaufgelöste Fluoreszenz: nach einem ns-Lichtpuls (getakted im MHz bereich) betrachtet man mit minimal 50 ps zeitlicher Auflösung das Eintreffen des ersten Photons und erstellt dann ein Histogramm über einige 10 bis 1000 ns.
Das ganze dient zur Untersuchung von Kettendynamik und Struktur in Polymeren (fiese Physikalisch Chemie)!
Das sind aber schon ziemlich fitzelig kleine Zeiten :D So ein Zeugs wird wohl
eher in Hardware oder mit FPGAs/CPLDs zu lösen sein. Oder absolut diskret mit
HighSpeed-Gattern (74ACT oder sowas).

Die in Dinos Link beschrieben FCS betreiben wir bei uns im Haus auch, ist aber eine andere Kiste, ehr wie dynamische Lichtstreuung.

_____________

Zu der Breite des Binärzählers:
ich habe 12-Bit Zähler und Schiebregister gefunden, mit denen müsste es doch auch prima und schnell gehen.
Zudem: eine Unterbrechung des Zählvorgangs ist bei der Anwendung nicht schlimm. Hauptsache die Zeitintervalle während des Zählens sind immer gleich und schwanken nicht in der Länge.
12Bit ? 40xx oder 45xx ? Ich weiß nicht, ob die flott genug sind ... Auf jeden
Fall sind sie alt ;)

Die Zählzeiten könnte man mit nem Timer vom ATmega ganz gut steuern.
Dann kann man die Zeitdauer des Zählvorganges einstellen und die Steuerung
ist hauptsächlich Hardware.

- - - - - - -
Ha was gefunden ... Jetzt weiß ich wieder was das für Kristalle waren.
Das war ein Szintillationszähler mit Avalanche-Photodiode. Stand glaube ich
mal in ner älteren Elektor als Bauanleitung. Wenn ich mich nicht ganz irre :D
Das ist mir beim lesen von Wiki (Photomultiplier) wieder eingefallen ...

Gruß
Dino
 
So, ich will mich bei diesem Projekt mal an die Bestellung machen und da habe ich an den MEGA128-USB und als Programmer den AVRISP mkII (USB) gedacht.
Das müsste doch reichen für:

- serielles Einlese zweier Binärzähler (so wie von dino vorgeschlagen)
- Übertragung der Zählraten via USB an einen PC
- 2 mal kontinuierliche Darstellung der Zählrate per 7-Segement-LED-Anzeige (6-stellig!)
- evtl. noch eine LED-Bargraphanzeige

Der Counter muss vom PC
- die Integrationszeit einlesen und
- auf ein Startsignal mit dem Zählen beginnen.

Während des Zählens ist eine Komunikation mit dem PC nicht notwendig, nur eine Darstellung der Zählrate wäre schön, aber nicht zwingend.

Das sollte doch für den MEGA128 nen' Klacks sein, oder?

Jörg
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)