Forum: Mikrocontroller und Digitale Elektronik gepulste Lichtschranke will nicht.


von Ralf (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich  möchte mit einem CNY70 Reflexkoppler eine Zeitmessung für
eine H0 Autorennbahn realisieren.

Um Fremdlicht auszuschliessen Pulse ich die IR LED mit einer
Frequenz von 31kHz. Diese erzeuge ich, in dem ich mit einem AVR
Mega88 den Timer0 nutze. Getaktet wird der Timer durch den I/O Clock.
compare match Interrupt bei 124 schalted die IR LED ein, ein Overflow
Interrupt des Timer0 schaltet die LED aus. In diesen Interrupts
schaue ich jeweils vor dem Umschalten der LED, wie der Status der
Photodiode ist. Wurden 10 gültige Impulse registriert, soll eine
Statusled angehen.

ich kann den Takt der IR-LED und der Photodiode mit dem Frequenzmesser
meines Multimeters messen, die Interrupts funktionieren also.
Leider wird die Statusled nicht eingeschaltet.

Ich habe auch schon eine direkte Drahtverbindung probiert, auch ohne
Erfolg. (hier habe ich die IR LED funktion invertiert, da die "echte"
IR Led ueber einen NPN getrieben wird, der empfänger aber ja open 
collector ist ...).

Ungetaktet funktionert das ganze (simples IN temp, PHOTODIODE OUT PORTB, 
temp). Also der CNY70 ist auch in Ordnung.

Eventuell hat hier jemand ja einen Tipp für mich?

Der Programmcode ist im Anhang.

Viele Grüße
Ralf

von spess53 (Gast)


Lesenswert?

Hi

Also ich habe mir dein Programm jetzt nicht angesehen, aber ich habe den 
CNY70 erst vor kurzem in den Fingern gehabt. Das Teil funktioniert nur 
bei sehr kleinen Entfernungen (2-3mm). Und auch dann nur bei gut 
reflektierenden Flächen. Versuch mal als Reflektor ein Stück einer alten 
CD. Damit hatte ich die besten Ergebnisse.

MfG Spess

von Ralf (Gast)


Lesenswert?

Hallo Spess,

ohne das "komplizierte" Programm funktioniert das ganze ja.
Ich habe einfach die IR Led eingeschaltet, den Photodiodenport
eingelesen und auf dem Portb, wo ich LEDs dran habe
ausgegeben ...

Trotzdem danke für deine Mühe.

Viele Grüße
Ralf

von spess53 (Gast)


Lesenswert?

Hi

Ich habe nochmal dein Programm überflogen. Du benutzt einen 8Bit-Timer 
ohne Vorteiler. Andrerseits hast du eine Reihe von Software-Delays (das 
würden hier schon einige als oberste Stufe des Frevels bezeichnen) in 
den Interruptroutinen. Pauschal würde ich sagen: Deine Interruptroutinen 
sind ganz einfach zu lang. Hast du das Ganze schon mal mit dem Simulator 
getestet?

MfG Spess

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.