TSOP1733 reagiert nicht auf das Licht

OP #780002
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
#780018
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.
#780350
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.
OP #782281
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.

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