mikrocontroller.net

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


Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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:
  ldi     temp,high(0x00)                ; Compare-Wert für Timer1               
    out     ocr1AH, temp
    ldi     temp,low(0x79)
    out     ocr1AL,temp 
    ldi   temp, (1<<com1A0)
    out   TCCR1A,temp

    ldi     temp,(1<<wgm12|0<<cs12|0<<cs11|1<<cs10)    ;Vorteiler Timer1
    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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Modulierst du die 33kHz auch, soder sendest du das als Dauersignal ?

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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

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

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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin K. (spyro07)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Martin K. (spyro07)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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:
.include   "m8def.inc"

.def   temp  = r16


rjmp start          ; Reset Handler                           
rjmp interrupt1       ; IRQ0 Handler                      
reti ;rjmp EXT_INT1   ; IRQ1 Handler                      
reti ;rjmp TIM2_COMP  ; Timer2 Compare Handler            
reti ;rjmp TIM2_OVF   ; Timer2 Overflow Handler           
reti ;rjmp TIM1_CAPT  ; Timer1 Capture Handler            
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler           
reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler           
reti ;rjmp TIM1_OVF   ; Timer1 Overflow Handler           
rjmp interrupt        ; Timer0 Overflow Handler           
start:
    ldi     temp, LOW(RAMEND)                ; Stackpointer initialisieren
     out     SPL, temp
     ldi     temp, HIGH(RAMEND)
    out     SPH, temp
  
  ldi    temp, 0xFF                  ; PortB Ausgang
  out    DDRB, temp

    ldi   temp, 0x00                  ; PortD Eingang
    out   DDRD, temp

  ldi   temp,  (0 << ISC01)| (1 << ISC00)       ; INT0 konfigurieren
  out   MCUCR, temp
  
  ldi     temp,high(0x00)                ; Compare-Wert für Timer1               
    out     ocr1AH, temp
  ldi     temp,low(0x79)
     out     ocr1AL,temp 
  ldi   temp, (1<<com1A0)
    out   TCCR1A,temp

  ldi    temp, 0xCB                  ; Compare-Wert für Timer2
  out    OCR2, temp
    
  ldi     temp, 0b00000001                  ; Interrupt bei Timer0 Overflow
    out     TIMSK, temp
  
  ldi   temp, 0b01000000                ; INT0 aktivieren
     out   GICR, temp

    ldi     temp, 0b00000011              ; Vorteiler: Timer0
    out     TCCR0, temp
  
  sei

loop:
  
  ldi     temp,(1<<wgm12|0<<cs12|0<<cs11|1<<cs10)    ; Vorteiler Timer1
     out     tccr1B,temp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
          ldi  R17, $1F
WGLOOP90:  ldi  R18, $AB
WGLOOP91:  dec  R18
          brne WGLOOP91
          dec  R17
          brne WGLOOP90
          ldi  R17, $01
WGLOOP92:  dec  R17
          brne WGLOOP92
          nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ldi     temp,(1<<wgm12|0<<cs12|0<<cs11|0<<cs10)    ; Vorteiler Timer1 (ausschalten)
     out     tccr1B,temp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ldi  R17, $1F
WGLOOP93:  ldi  R18, $AB
WGLOOP94:  dec  R18
          brne WGLOOP94
          dec  R17
          brne WGLOOP93
          ldi  R17, $01
WGLOOP95:  dec  R17
          brne WGLOOP95
          nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  rjmp   loop


interrupt1:

  ldi    temp, 0x00
  out    TCNT0, temp
  reti
    
interrupt:

   ldi   temp, 0b00000000              ; INT0 deaktivieren
     out   GICR, temp
     
  ldi     temp,(1<<com20|1<<wgm21|0<<cs22|0<<cs21|1<<cs20) ;Timer2 starten (Tonausgabe)  
     out     tccr2,temp  
   
;;Hier ist dann eine Warteschleife, in der Zeit wird der Ton ausgegeben;;
  
  ldi     temp,(0<<com20|0<<wgm21|0<<cs22|0<<cs21|0<<cs20) ;Timer2 stoppen (Tonausgabe stoppen)  
     out     tccr2,temp
  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.

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Spyro07 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ok, das Problem hat sich gelöst, jetzt funktioniert es endlich.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.