Hallo RoboHolIC,
das Datenblatt hab ich mir unzählige male durchgeschaut und auch einige Testprogramme probiert, um die "Grenzen" des TSOP auszuloten.
Im Datenblatt steht u.a. "Minimum burst length: 10 cycles/burst" und "After each burst of length a minimum gap time is required of: 10 to 70 cycles, ≥ 10 cycles". Bei einer Trägerfequenz von 36kHz dauert ein cycle rund 27,8 us. Bei meinen angegebenen 500 us komme ich damit auf 18 cycles/burst und liege damit absolut im grünen Bereich.
Beim folgenden Testprogramm macht die Kontroll-LED genau das gleiche, wie die IR-LED (außer natürlich, wenn die optische Verbindung unterbrochen wird, dann bleibt sie aus).
Die Zahlen habe ich in einem weiten Bereich getestet. Alles über 300 us wird problemlos übertragen (300 us entspricht ca. 10 cycles/burst und deckt sich somit perfekt mit dem Datenblatt). Auch die Sendepause habe ich von 0 (null) bis mehreren Sekunden getestet. Im Code sind 2 sec angegeben, d.h. die Kontroll-LED blitzt alle 2 sec kurz auf.Code:'=============================================================================== 'IR Kanone V 01 ' 'IR-LED an Pin 5 (PB0, OCR0A) 'TSOP34836 an Pin 7 (PB2, INT0) ' 'Pin 6 (PB1 Test-LED) '=============================================================================== $regfile = "attiny45.dat" $crystal = 8000000 'FuseBit CKDIV8 deaktivieren $hwstack = 40 $swstack = 40 $framesize = 50 '------------------------------------------------------------------------------------------------- 'Timer konfigurieren '------------------------------------------------------------------------------------------------- Config Timer0 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1 'Timer0 erzeugt 36kHz IR-Trägerfrequenz, Clear Timer setzt Timer bei Erreichen des Comparewertes auf 0 zurueck Ocr0a = 110 '------------------------------------------------------------------------------------------------- 'Interrupt-Service-Routinen konfigurieren und freigeben '------------------------------------------------------------------------------------------------- Config Int0 = Change 'beim Flankenwechsel an PB2/INT0 (Ir_data_in) Int0 auslösen und in die Subroutine springen Enable Int0 On Int0 Ir_data_in Enable Interrupts '------------------------------------------------------------------------------------------------------------- 'Ein- und Ausgang festlegen '------------------------------------------------------------------------------------------------------------- Ddrb = &B00010011 'PB0, PB1 und PB4 werden Ausgänge, restlicher PortB bleibt Eingang '====================================================== 'Hauptprogramm '====================================================== Do Ddrb.0 = 1 ' 36 kHz Carrier on Waitus 500 Ddrb.0 = 0 ' 36 kHz Carrier off Waitus 500 'Sendepause einlegen Ddrb.0 = 0 Wait 2 Loop End '------------------------------------------------------------------------------------------------------------- 'ISR IR Daten empfangen '------------------------------------------------------------------------------------------------------------- Ir_data_in: If Pinb.2 = 0 Then Portb.1 = 1 Else Portb.1 = 0 End If Return
Ich bin mir daher sicher, dass es nicht am TSOP oder dem gesendeten IR-Signal liegt, da diese Übertragung problemlos klappt. Es scheitert offensichtlich an der Signalauswertung im Programmcode
mfg
Robert







 
			
			
 
					
					
					
						 Zitieren
Zitieren 
			

Lesezeichen