Ik ben met een robot bezig en ik wil via een tsop1738 IR LD271(950nm) muurdetectie doen. Op internet kan ik niet veel info vinden dus bij deze.
Via de datasheet heb ik gelezen dat de tsop alleen reageert op een signaal van 10 pulsen van 38khz. Daarna moet er 14 pulsen rust zijn.
Ik wil de 38khz opwekken uit de pic pwm.
HPWM 1, 127, 38000
Deze bied ik aan een IR led + weerstand (0.2k) en dan aan de collecter van een bc547 zodat ik met de basis (1k) kan schakelen.
Minimaal AAN tijd: 300uS (300uS/1/38000=11 pulsen)
Minimaal UIT tijd: 400uS (400us/1/38000=15 pulsen)
Probleem: het werkt niet en ik heb geen scoop
IR doet het wel (via camera).
Ook heb ik de tijden verdubbeld.
De vraag kan dit uberhaupt werken? Is mijn tsop kapot? Of kan ik er beter mee ophouden 
'tsop1738 detection
'PORTB.0 basis IR
'PORTB.1 Tsop input
'PORTB.2 LED
'PORTB.3 collector IR 38000hz
DEVICE 16F648a
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
dim teller as BYTE
Dim ontvangen as BYTE
; 76543210
TRISB = %00000010 'Tsop aansluiten PORTB.1
HPWM 1, 127, 38000 'CCP1, Duty 127(=50%),38000Hz
delayms 100
Hoofdprogramma:
GOSUB sensor
PRINT AT 2, 1, ontvangen
IF ontvangen>=5 THEN 'meer dan x pulsen ontvangen?
High PORTB.2 'led aan
ELSE
Low PORTB.2 'led uit
ENDIF
delayms 500
GOTO Hoofdprogramma
sensor: '::: Sensor TSOP::::
ontvangen=0 'ontvangen pulsen reset
FOR teller=0 TO 20 '20 keer sensor checken
High PORTB.0 'IR aan
delayus 300 '11 pulsen 300*10^-6/(1/38000)
IF PORTB.1=1 THEN 'Lees Tsop in
ontvangen=ontvangen+1
ENDIF
Low PORTB.0 'IR uit
delayus 400 '15 pulsen laag
NEXT teller
RETURNOp 25 januari 2007 21:01:34 schreef Roboteye:
Via de datasheet heb ik gelezen dat de tsop alleen reageert op een signaal van 10 pulsen van 38khz. Daarna moet er 14 pulsen rust zijn.
Klopt niet. De Tsop is gepiekt op IR met een freq van 38KHz. Het aantal pulsen is niet relevant.
lampjes
...
Op 25 januari 2007 21:26:17 schreef evarist:
[...]
Klopt niet. De Tsop is gepiekt op IR met een freq van 38KHz. Het aantal pulsen is niet relevant.
Carrier frequency should be close
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.
DE TSOP1738 is ontworpen voor IR afstandsbedieningen o.a. type RC5 van philips. Origineel is het protocol gemaakt voor 36 KHz carrier frequentie maar een TSOP1738 die de piek heeft op 38KHz zal daar geen moeite mee hebben. De een pulsen zijn gemoduleerd met deze drager wat overeenkomt met ongeveer pulsen van 27.78 usec periode. De ontvangen kan hierop synchroniseren vanaf het ogenblik dat hij minimaal 10 van deze carrier pulsjes gezien heeft. Een bit in de gezonden code heeft een periode van 1.78 msec. Daar passen 64 van die carrier pulsjes van 27.78 usec in ( 27.78*64=1778 usec. je moet dus de on bit levels met pulsjes van 27.78 usec periode moduleren ( gewoon een and functie van je code met een oscillator van 36 KHz op 27.78 usec periode) , terwijl je zegt dit te doen met 300 usec. Je hebt blijkbaar iets van 300 usec genomen ipv 27.78 usec en daar ligt de fout waardoor zal de TSOP1738 niet goed zal reageren.
Hou er rekening mee dat bij de TSOP1738 de uitgang geinverteerd is.
ps: ik heb zopas zo een RC5 protocol in mijn FPGA gestoken om via een gewone afstandsbediening zelf in mijn toepassing bevelen te kunnen doorsturen en gebruiken. Dit werkt uitstekend en is helemaal niet kritisch. Ik gebruik ook die TSOP1738 als dekoderchip en ga dan zelf in de FPGA de code gaan detecteren in hardware.
[Bericht gewijzigd door fotoopa op ]
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
TSOP`s hebben een autogain voor zover ik weet. Als ze continu getrigerd worden regelt de gevoeligheid terug. Dus gebruik korte burstvoor het best effect. Maar eerst maar werkend krijgen met een continu signaal!
Check hetvolgende: klopt het HPWM 1 xxx commando? moet dat niet kanaal 0 zijn?
Sluit ipv een IR led eens een rode led aan, brand die ong. halfvol?
Probeer eens met de hand (sensor niet aangesloten) de status van de pin van de TSOP te veranderen, reageerd je programma?
Zoja, sluit de TSOP aan en houdt er rekening mee dat deze een 0 geeft bij het ontvangen van IR, en een 1 bij niet ontvangen.
Werkt het nog niet? Zorg voor juiste ontkoppeling (zie datasheet) van de TSOP. Ze zijn best gevoelig voor voedingsspanningen!
Als je dit gecheckt hebt en het werkt nog niet, post het maar, dan kijken we verder.
lampjes
...
Check het volgende: klopt het HPWM 1 xxx commando? moet dat niet kanaal 0 zijn?
Ik ga zo ff meten op school of er 38000hz uitkomt.
In de datasheet is het CCP1 op portb.3, zal het dan ff meten.
Sluit ipv een IR led eens een rode led aan, brand die ong. halfvol?
Die knippert op het moment, om de 0.3sec ofzo. Maar ik ga eens pwm "and-en" met data signaal ipv met transistor. Op onderstaande manier?
Probeer eens met de hand (sensor niet aangesloten) de status van de pin van de TSOP te veranderen, reageerd je programma?
Weergaveled doet vaag zie ik nu, hij knippert minimaal.
Zoja, sluit de TSOP aan en houdt er rekening mee dat deze een 0 geeft bij het ontvangen van IR, en een 1 bij niet ontvangen.
Maakt me niks uit op het moment, als hij maar iets doet 
Werkt het nog niet? Zorg voor juiste ontkoppeling (zie datasheet) van de TSOP. Ze zijn best gevoelig voor voedingsspanningen
Done.
Wat moet ik nu in de code veranderen zodat het kan werken?
Alleen de 300us in 28uS?
De uit tijd zal dan ook wel niet kloppen van 400uS.
Ja ik moet de datasheets lezen maar ik kom daar niet echt uit, anders zou ik het niet posten. 
Edit:
Ok Tsop is niet kapot, met afstandbediening knippert led, als ik datasignaal meet 
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
'tsop1738 detection 'PORTB.0 basis IR 'PORTB.1 Tsop input 'PORTB.2 LED 'PORTB.3 collector IR 38000hz DEVICE 16F648a CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF dim teller as BYTE Dim ontvangen as BYTE ; 76543210 TRISB = %00000010 'Tsop aansluiten PORTB.1 HPWM 1, 127, 38000 'CCP1, Duty 127(=50%),38000Hz delayms 100 Hoofdprogramma: portb.2 = portb.1 GOTO Hoofdprogramma
- Het is niet de bedoeling dat je meer dan één account hebt op dit forum. Meld het even bij de mods dat ze er één kunnen sluiten.
- Probeer eerst dat programma maar. Je kan dan aan de status van poort b2 zien wat je ontvangt.
Op 26 januari 2007 00:55:53 schreef elmowww:
TSOP`s hebben een autogain voor zover ik weet. Als ze continu getrigerd worden regelt de gevoeligheid terug. Dus gebruik korte burstvoor het best effect. Maar eerst maar werkend krijgen met een continu signaal!
Met een continu signaal gaat het niet werken omdat de AGC helemaal terugregelt.
Dus na een paar honderd micro signaal dan een pauze van enkele honderden micro seconden. Als je langer dan een paar tienden een continue carrier geeft gaat de output van de TSOP gewoon weer op inaktief. De exacte tijden ben ik al weer vergeten, maar daar zijn datasheets voor.
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Ik heb vaak genoeg een werkend systeem op basis van een continue golfvorm gehad. Alleen de gevoeligheid was laag.
De AGC laat nog wel een beetje gain over 
Op 26 januari 2007 12:27:22 schreef elmowww:
Ik heb vaak genoeg een werkend systeem op basis van een continue golfvorm gehad. Alleen de gevoeligheid was laag.De AGC laat nog wel een beetje gain over
Dan moet de IR-led zeker erg dichtbij zijn? Met 1 a 2 M ertussen ging het altijd fout aan deze kant.
Ben Devos
Visit Me: http://www.basicfox.com
Er bestaan toch IR encoders die 4 datasignalen op een drager zetten en dan versturen aan de discoder ze ontvangen en terug weergeven...
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Op 26 januari 2007 12:43:55 schreef Ben Devos:
Er bestaan toch IR encoders die 4 datasignalen op een drager zetten en dan versturen aan de discoder ze ontvangen en terug weergeven...
Holtek heeft voor zoveel van die simpele dingetjes een ic. Maar dat is in dit topic van geen enkele toepassing, brengt de TS hooguit op een verkeerd spoor. Dus die HT ic's: niets mee doen.
En JoWi, klopt, bij mij werkte reflectiedetectie met 2 dikke IR leds tot op zo`n 10cm bij de meeste materialen.
Voor een robotje (geen datatraffic) vermoed ik dat de TS gaat proberen met objectdetectie/obstakeldetectie. Daarvoor is een continue brst goed genoeg om te beginnen of de rest van de schakeling werkt.
lampjes
...
Idd het is voor objectdetectie gewoon 3 sensortjes, links rechts en einde tafel. Maar dat is geen excuus om het hierbij te laten dus ik wil op de goede manier bursten.
In ieder geval 10cm haal ik idd met alleen 38khz erop te zetten, nu (nog) maar eens de bursttijden uitzoeken.
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Dus bovenstaand door mij gepost progje werkt?
Dan kan je nu inderdaad met de burst gaan proberen... Maar ik denk dat je daar wel uitkomt?
ik ben net als elmowww benieuwd of het nu werkt..
ik heb zelf m'n robot rijdend, en wil er nu ir sensors op, en wil ook de hpwm ervoor gebruiken. (immers: waarom zou je iets met 2 NE555's (NE556:P) + het kleine grut maken als het al allemaal in de pic zit?)
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Roboteye, wat jij geschreven hebt klopt van geen kant.
Ga naar www.picbasic.nl/rc5_display_nl.htm en download het .bas bestand (eventueel openen met kladblok).
Bestudeer hierin over hoe het gaat met een TSOP1736.
Nog een kleine aanbeveling: Een TSOP gaat door zijn automatische gain bij afwezigheid van een gemoduleerd signaal zijn versterking verhogen om de ontvangst gevoeligheid op te trekken. Grotere gevoeligheid resulteerd natuurlijk in meer stoorsignalen. Ik heb deze TSOP1738 ingebouwd in mijn FPGA en een led stuurt ter controle het binnenkomende signaal van de TSOP ( via de FPGA) Ik zie duidelijk als ik niet op een bediening druk dat er heel veel korte pulsjes op de ontvanger komen (ledje blinkt regelmatig heel kort op). Dit is normaal gezien de ontvanger probeert maximale gevoeligheid te ontwikkelen.
Tijdens de dekodering van geldige pulsen had ik origineel nogal wat missers, vooral als het IR signaal via weerkaatsing moest binnenkomen. Dit komt omdat stoorimpulsen, die ook aanwezig zijn, de dekodering gaan verstoren. Deze stoorimpulsen zijn echter doorgaans vrij kort. Een heel eenvoudige oplossing om deze stoorgevoeligheid te onderdrukken is gebruik maken van een klein digitaal filter. Dit kan zowel in software als in hardware en bestaat uit het sampelen van de ingang en het doorschuiven in een registers. Het goede signaal wordt dan gebruikt door de AND functie van minstens 2 opeenvolgende samples die hetzelfde niveau moeten zijn. Hierdoor worden korte stoorimpulsen volledig onderdrukt.
De tijdsduur tussen de samples is natuurlijk van vrij groot belang. Ik heb deze tijd 50 usec genomen. Dit mag je niet ongestoort verhogen terwijl kortere tijden steeds minder effect gaan geven. Het eindresultaat is nu dat de RC5 code feilloos binnenkomt, ook door weerkaatsing en ook bij heel grote afstanden.
Ik wou dit gewoon even mededelen als basis voor betere resultaten van een gegeven schakeling. Hoe je dit implementeerd in jullie software maakt weinig uit maar neem maar aan dit dit leid tot veel stabielere resultaten. Aan jullie het programmeerwerk, ik heb het intussen gedaan in mijn FPGA. Het RC5 ingangssignaal wordt gedelayed over 2 DFF's en daarover wordt via een AND functie het gefilterdere ingangssignaal genomen)
ziehierbij de opstelling:
lampjes
...
Ik zag dat er nog users gereageerd hebben in deze post. (Sorry Danny:P maar radiografisch is leuker:)) Zal ff werkende code plaatsen voor IR Robot object detectie (50cm moet je makkelijk halen) en code voor een eenvoudige IR RC5 ontvanger. (als je de uitgebreidere code zoekt: picbasic.nl!)
IR detectie van objecten: Zorg ervoor dat je een fatsoenlijk schot hebt tussen IR zender en de TSOP ontvanger. Je kunt afstand op 2 manieren bepalen zoals hieronder. 10 keer pulsen en gem. bekijken. Of je stuurt verschillende frequenties naar je TSOP omdat de tsop 38.000hz signalen beter ontvangt als bijv 20.000Hz kan je dus afstand bepalen. Met dat laatste heb ik niet gestoeit.
In principe kan je elke poort gebruiken dus veel sensors;)
IRdetectie:
DEVICE 16F628
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
SYMBOL IRreceiver= PORTB.0 'TSOP1736
SYMBOL IRout= PORTB.1 'Ir Led
dim IRreceived as bit
dim IRcounter as BYTE
dim i as BYTE
; 76543210
TRISB = %00000001
Clear
PRINT AT 1,1 , "Ir Received"
Start:
IRcounter=0
for i= 0 to 9 'Send 10times an IR puls
Delayms 50
freqout IRout,1,38000 '1puls 38000hz
IRreceived = IRreceiver
if IRreceived=0 then IRcounter=IRcounter+1
next
Delayms 100
PRINT AT 2,1 , dec2 IRcounter
if IRcounter > 7 then
PRINT " Close "
else
PRINT " Far Away"
endif
GOTO Start
Eenvoudige IR RC5 detector.
DEVICE 16F628
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
SYMBOL IRreciever= PORTB.0 'TSOP1736
Symbol LED = portB.1
SYMBOL Glitch = 52 'Glitch Time
SYMBOL Ok = 50 'Controltime RC5 Recieved
' 76543210
TRISB = %11111101
DIM Devicenr AS BYTE
DIM Commandnr AS BYTE
dim Counter1 as byte
DIM Counter2 AS BYTE
DIM ToggBit AS BIT
DIM IRdata AS BIT
clear
DELAYMS 100 'LCD init
cls
PRINT at 1,1, "RC5-Remote"
Start:
Low Led
WHILE IRreciever = 1
WEND 'wait - IR signal
Counter1 = 0
WHILE IRreciever == 0 AND Counter1 < Glitch '52uS
INC Counter1
WEND
IF Counter1 < Glitch THEN GOTO Start 'Error: Glitch
DELAYUS 500 '200 - 825 Skip header
GOSUB GetIrBits 'Bit1:Inverted! Extended Command Bit
Commandnr.6 = IRdata ^ 1
GOSUB GetIrBits 'Bit2:Toggle
ToggBit = IRdata
for Counter2 = 4 to 0 step -1 'Bit3-7:Device bits
GOSUB GetIrBits
if IRdata==0 then clearbit Devicenr,Counter2 '0
if IRdata==1 then SETBIT Devicenr,Counter2 '1
next
for Counter2 = 5 to 0 step -1 'Bit8-13:Command bits
GOSUB GetIrBits
if IRdata==0 then clearbit Commandnr,Counter2 '0
if IRdata==1 then SETBIT Commandnr,Counter2 '1
next
High Led 'all bits recieved
PRINT at 1, 1, DEC3 Devicenr, " ", BIN8 Devicenr
PRINT AT 2, 1, DEC3 Commandnr, " ", BIN8 Commandnr
GOTO Start
;Subroutine
GetIrBits:
IRdata = IRreciever
Counter1 = 0
WHILE IRreciever == IRdata AND Counter1 < Ok 'Level change within RC5 specs
INC Counter1
WEND
IF Ok == Counter1 THEN goto start 'Error:NO RC5,No level-change within time
DELAYUS 1100 '950 - 1600
RETURN