Forum: Mikrocontroller und Digitale Elektronik TSOP1733 reagiert nicht auf das Licht


von Martin K. (spyro07)


Lesenswert?

Hallo,
also ich habe für eine IR-Lichtschranke ein Programm geschrieben, mit 
dem ein Signal für den TSOP1733 moduliert wird.
Hier mal der Abschnitt dafür:
1
  ldi     temp,high(0x00)                ; Compare-Wert für Timer1               
2
    out     ocr1AH, temp
3
    ldi     temp,low(0x79)
4
    out     ocr1AL,temp 
5
    ldi   temp, (1<<com1A0)
6
    out   TCCR1A,temp
7
8
    ldi     temp,(1<<wgm12|0<<cs12|0<<cs11|1<<cs10)    ;Vorteiler Timer1
9
    out     tccr1B,temp

Also dieser Code soll dann ein Signal von ca. 33kHz erzeugen, an Pin B1.

An B1 habe ich einen 1kOhm Widerstand , der geht an die Basis eines BC 
557C. am Emitter des BC hängt VCC und am Collektor die IR-LED über einen 
Vorwiderstand. Ein Strom kommt bei der LED auf jeden Fall an, nur in 
welcher Frequenz kann ich nicht überprüfen, habe kein Oszilloskop.

Achso, der Mega läuft mit 8MHZ und TSOP habe ich auch schon umgetauscht.

Meine Frage:
Woran kann das liegen, das der TSOP immer auf High bleibt, also kein 
Signl empfängt?

mfg

von Benedikt K. (benedikt)


Lesenswert?

Modulierst du die 33kHz auch, soder sendest du das als Dauersignal ?

Davon abgesehen, wäre 0x78 der richtige Wert.

von Martin K. (spyro07)


Lesenswert?

wie das versthe ich jetzt nicht ganz. Die Frequenz wird ja an den Pin 
ausgegeben und da hängt dann über BC557 wie oben beschrieben die LED 
dran. habe auch geschaut, wenn ich den Basis-Strom wegnehme, dann kommt 
auch nichts mehr bei der LED.

von Benedikt K. (benedikt)


Lesenswert?

Der TSOP1733 möchte gerne Daten haben, nicht nur ein Dauersignal mit 
33kHz. Damit der TSOP gut funktioniert musst du die 33kHz noch mit ein 
paar 100Hz ein und aus schalten.

Aus dem Datenblatt:

Suitable Data Format
The circuit of the TSOP17.. is designed in that way that
unexpected output pulses due to noise or disturbance
signals are avoided. A bandpassfilter, an integrator
stage and an automatic gain control are used to
suppress such disturbances.
The distinguishing mark between data signal and
disturbance signal are carrier frequency, burst length
and duty cycle.
The data signal should fullfill the following condition:
• Carrier frequency should be close to center
frequency of the bandpass (e.g. 38kHz).
• Burst length should be 10 cycles/burst or longer.
• After each burst which is between 10 cycles and 70
cycles a gap time of at least 14 cycles is neccessary.
• For each burst which is longer than 1.8ms a
corresponding gap time is necessary at some time in
the data stream. This gap time should have at least
same length as the burst.

von Martin K. (spyro07)


Lesenswert?

Benedikt K. wrote:
> Der TSOP1733 möchte gerne Daten haben, nicht nur ein Dauersignal mit
> 33kHz. Damit der TSOP gut funktioniert musst du die 33kHz noch mit ein
> paar 100Hz ein und aus schalten.

Und dann bleibt er am Ausgang aber trotzdem auf Low?

von Benedikt K. (benedikt)


Lesenswert?

Martin K. wrote:

> Und dann bleibt er am Ausgang aber trotzdem auf Low?

Nein, er zeigt die 1 und 0 Pulse an, die gesendet (mit der die 33kHz 
moduliert) werden.

von Martin K. (spyro07)


Lesenswert?

Das Problem ist dann aber, das ja jedes mal die Lichtschranke angeblich 
unterbrochen wird, obwohl sie ja im Prinzip nicht unterbrochen wird.
Ein Dauersignal von 33kHZ empfängt er also nicht?

von holger (Gast)


Lesenswert?

>Ein Dauersignal von 33kHZ empfängt er also nicht?

Nein, der möchte Pulse haben. Such mal nach Manchester
Codierung.

von Martin K. (spyro07)


Lesenswert?

Geht es denn nicht leichter als mit so einem Manchester Code? Weil ich 
ja im Prinzip keine Daten sende will, sondern soll ja nur das Signal 
kommen ob das Licht da ist oder nicht.

von holger (Gast)


Lesenswert?

>Geht es denn nicht leichter als mit so einem Manchester Code?

Ja, du brauchst nur Pulse. Also moduliere deine 33kHz einfach
mit z.B. 100Hz. 5ms lang 33kHz senden, 5ms aus.

von Martin K. (spyro07)


Lesenswert?

Kann sich diese Pulsfrequenz auch im kHz Bereich befinden? Also zum 
Beispiel qwenn es mit 16kHz gepulst wird?

von Benedikt K. (benedikt)


Lesenswert?

Nein. Les dir mal den Auszug aus dem Datenblatt an, den ich gepostet 
habe !

von Martin K. (spyro07)


Lesenswert?

Naja im Englisch bin ich leider nicht gut. Aber ca. 200Hertz geht, oder?

von Benedikt K. (benedikt)


Lesenswert?

Benedikt K. wrote:
> • Burst length should be 10 cycles/burst or longer.

-> Mindestens 10 Takte, also max 3,3kHz

> • For each burst which is longer than 1.8ms a
> corresponding gap time is necessary at some time in
> the data stream. This gap time should have at least
> same length as the burst.

-> Das Tastverhältnis sollte etwa 50% betragen.

200Hz sollten also OK sein. Unter 100Hz würde ich aber nicht gehen.

von Martin K. (spyro07)


Lesenswert?

Also ich denke, das das Signal jetzt richtig moduliert wird. Aber musste 
feststellen, das es leider immer noch nicht funktioniert. Die LED 
leuchtet auf jeden Fall, am TSOP liegts ja auch nicht.
also hier mal mein Porgramm:
1
.include   "m8def.inc"
2
3
.def   temp  = r16
4
5
6
rjmp start          ; Reset Handler                           
7
rjmp interrupt1       ; IRQ0 Handler                      
8
reti ;rjmp EXT_INT1   ; IRQ1 Handler                      
9
reti ;rjmp TIM2_COMP  ; Timer2 Compare Handler            
10
reti ;rjmp TIM2_OVF   ; Timer2 Overflow Handler           
11
reti ;rjmp TIM1_CAPT  ; Timer1 Capture Handler            
12
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler           
13
reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler           
14
reti ;rjmp TIM1_OVF   ; Timer1 Overflow Handler           
15
rjmp interrupt        ; Timer0 Overflow Handler           
16
start:
17
    ldi     temp, LOW(RAMEND)                ; Stackpointer initialisieren
18
     out     SPL, temp
19
     ldi     temp, HIGH(RAMEND)
20
    out     SPH, temp
21
  
22
  ldi    temp, 0xFF                  ; PortB Ausgang
23
  out    DDRB, temp
24
25
    ldi   temp, 0x00                  ; PortD Eingang
26
    out   DDRD, temp
27
28
  ldi   temp,  (0 << ISC01)| (1 << ISC00)       ; INT0 konfigurieren
29
  out   MCUCR, temp
30
  
31
  ldi     temp,high(0x00)                ; Compare-Wert für Timer1               
32
    out     ocr1AH, temp
33
  ldi     temp,low(0x79)
34
     out     ocr1AL,temp 
35
  ldi   temp, (1<<com1A0)
36
    out   TCCR1A,temp
37
38
  ldi    temp, 0xCB                  ; Compare-Wert für Timer2
39
  out    OCR2, temp
40
    
41
  ldi     temp, 0b00000001                  ; Interrupt bei Timer0 Overflow
42
    out     TIMSK, temp
43
  
44
  ldi   temp, 0b01000000                ; INT0 aktivieren
45
     out   GICR, temp
46
47
    ldi     temp, 0b00000011              ; Vorteiler: Timer0
48
    out     TCCR0, temp
49
  
50
  sei
51
52
loop:
53
  
54
  ldi     temp,(1<<wgm12|0<<cs12|0<<cs11|1<<cs10)    ; Vorteiler Timer1
55
     out     tccr1B,temp
56
57
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
58
          ldi  R17, $1F
59
WGLOOP90:  ldi  R18, $AB
60
WGLOOP91:  dec  R18
61
          brne WGLOOP91
62
          dec  R17
63
          brne WGLOOP90
64
          ldi  R17, $01
65
WGLOOP92:  dec  R17
66
          brne WGLOOP92
67
          nop
68
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69
     ldi     temp,(1<<wgm12|0<<cs12|0<<cs11|0<<cs10)    ; Vorteiler Timer1 (ausschalten)
70
     out     tccr1B,temp
71
72
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73
          ldi  R17, $1F
74
WGLOOP93:  ldi  R18, $AB
75
WGLOOP94:  dec  R18
76
          brne WGLOOP94
77
          dec  R17
78
          brne WGLOOP93
79
          ldi  R17, $01
80
WGLOOP95:  dec  R17
81
          brne WGLOOP95
82
          nop
83
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
84
  rjmp   loop
85
86
87
interrupt1:
88
89
  ldi    temp, 0x00
90
  out    TCNT0, temp
91
  reti
92
    
93
interrupt:
94
95
   ldi   temp, 0b00000000              ; INT0 deaktivieren
96
     out   GICR, temp
97
     
98
  ldi     temp,(1<<com20|1<<wgm21|0<<cs22|0<<cs21|1<<cs20) ;Timer2 starten (Tonausgabe)  
99
     out     tccr2,temp  
100
   
101
;;Hier ist dann eine Warteschleife, in der Zeit wird der Ton ausgegeben;;
102
  
103
  ldi     temp,(0<<com20|0<<wgm21|0<<cs22|0<<cs21|0<<cs20) ;Timer2 stoppen (Tonausgabe stoppen)  
104
     out     tccr2,temp
105
  reti

also das Programm sol so funktionieren:

mit Timer1 wwerden die 33kHZ erzeugt.
durch die Warteschleifen wird das 33 kHZ-Signal ein-und ausgeschaltet
Timer0 überwacht das ganze, wird kein Interrupt mehr ausgelöst, wird das 
Zählregister des Timer0 nicht mehr gelöscht und es entsteht ein 
Timerinterrupt --> Tonausgabe

Also im Simulator funktioniert es bei mir eigentlich, aber wenn ich das 
Programm anschalte auf dem µc wird sofort der Ton ausgegeben.

von Martin K. (spyro07)


Lesenswert?

Hat denn keiner eine Ahnung woran das liegen könnte, das der Ton sofort 
ausgegeben wird. Muss ja daran liegen das der TSOP das Signal nicht 
richtig empfängt, aber wieso empfängt er es nicht richtig?

von Spyro07 (Gast)


Lesenswert?

Also ok, das Problem hat sich gelöst, jetzt funktioniert es endlich.

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.