Hallo,
ich will mittels XMega eine einfache IR-Reflexschranke aufbauen. Als
IR-Diode verwende ich TSUS-5202. Als Empfänger TSOP-4836. Der
Vorwiderstand zur IR-Diode sind 100Ohm. Die Beschaltung des TSOP-4836
ist identisch der im Datenblatt vorgeschriebenen Beschaltung. Die
Taktung der IR-Diode ist 36kHz. Dazu will ich 22 Takte (mit 36kHz) die
IR-Diode ein/ausschalten. Und dann Pause für 22 Takte. So wie laut
Datenblatt gefordert.
Sobald ich meine Hand als Reflektor benutze, möchte ich, dass eine rote
LED aufleuchtet. Jedoch blinkt sie nur sehr unrhythmisch. Ich erwarte
eigentlich, dass die LED durchgehen rot leuchtet, sobald ich meine Hand
über die IR-Diode bzw. Empfänger halte.
Im Anhang habe ich Video beigefügt.
Leider kann ich einfach keinen Fehler in meinem Code finden. Könnt ihr
vielleicht erkennen, woran es liegen kann?
Das ist mein Code:
1
#define F_CPU 2e6
2
#include<avr/io.h>
3
#include<asf.h>
4
#include<gfx_mono.h>
5
#include<sysfont.h>
6
7
volatileintzaehler=0;
8
intADC_result;
9
charstrng[20];
10
11
ISR(TCD1_OVF_vect){
12
if(zaehler<44){//44-> 22 mal Aufleuchten
13
PORTB.OUTTGL=0b00000001;
14
}
15
zaehler++;
16
if(zaehler>87){// 87 -> 22 Impulse Pause
17
zaehler=0;
18
}
19
}
20
21
22
intmain(void)
23
{
24
board_init();
25
26
// Ausgänge für rote LED (bit 1) und IR-LED setzen (bit 0)
Ja das habe ich. Es sieht korrekt aus.
Ich habe vergessen zu erwähnen, dass ich glaube, dass es an der IR-LED
liegt. ich habe den Eingang der IR-LED per ADC eingelesen und mir den
Wert auf nem Display darstellen lassen. Da erkenne ich dieses
unrhythmische Gezappel.
Leider habe ich kein Oszi. Damit könnte ich viel genauere Analysen
machen.
Ohne Oszi wirst du nicht viel sehen. Ein Multimeter ist dafür nicht
geeignet.
Probier mal das Signal zu glätten, 1k und 4,7µ sollten reichen. Das
ganze wird dann zwar etwas träger.
Eine andere Möglichkeit wäre den ADC mit dem Taktsignal synchronisieren.
Hubert G. schrieb:> Probier mal das Signal zu glätten, 1k und 4,7µ sollten reichen.
Mit ist nicht bewusst, wo ich Widerstand und Kondensator anbringen muss.
Dafür fehlt mir leider das Wissen. Kannst du es genauer erklären?
Von Pin 1 des TSOP gehst du über den Widerstand auf den µC. Auf der µC
Seite den 4,7µ nach GND. Die Werte sind nicht kritisch, nur der Elko
sollte nicht zu groß sein.
Hubert G. schrieb:> Von Pin 1 des TSOP gehst du über den Widerstand auf den µC. Auf der µC> Seite den 4,7µ nach GND. Die Werte sind nicht kritisch, nur der Elko> sollte nicht zu groß sein.
Vielen Dank. Das werde ich mal ausprobieren.
Hast du dir den Code mal angeschaut? Konntest du irgendwas sehen, dass
nicht ganz passt?
Gesehen habe ich nichts im Code, kann ihn allerdings nicht ausprobieren.
Es ist aber so, das du einmal während eines Pulses misst und dann wieder
in einer Pause. Das ganze vollkommen unrhythmisch.
Daher mein Vorschlag des synchronisieren, sodass du immer während eines
Pulses misst.
Hi,
laut dem Datenblatt gibt es eine Verzögerung zwischen dem Ausgang an
deinem IR-Empfänger und dem start der Burstpakete.
Ausgehend vom Datenblatt ist die Verzögerung :
Bei den 36 kHz dürften das zwischen 0,19 ms und 0,41 ms liegen.
Erst dann solltest du dein Signal messen , wenn du das Signal nicht über
ein RC-Glied glättest.
Gruß JackFrost
Ich habe es gelöst. Es lag an der Synchronisierung von ADC mit den
Bursts. Ich lese jetzt ADC nur noch dann aus, wenn ich Pulse. Und zwar
nehme ich den Mittelwert über 4 Messungen. Jetzt funktioniert es
wunderbar!
Vielen Dank!
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.