gepulste Lichtschranke will nicht.

Gast #914408
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
Angehängte Dateien:
Gast #914480
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren