Sida 2 av 3

Postat: 10 februari 2008, 21:00:09
av net4all
Icecap: Menar du med pulslängdskodning eller med UART-exprimentet?

Postat: 10 februari 2008, 21:31:53
av Icecap
Då jag redan vet svaret på UART-sättet är det ju "det andra sättet" som är intressant.

Postat: 11 februari 2008, 14:07:21
av net4all
Jag har ännu inte försökt skicka hela bytes, bara 1bit. Har då haft 2 möjliga längder på pulsen. En för 1 och en för 0.
tex:
if(100<puls_längd<150) data_bit=1;
if(150<puls_längd<200) data_bit=0;
där puls_längd är värdet från timern, dock har TMR0 värdena har varierat allt för mycket för att ovanstående ska fungera..

Men jag har kommit på en sak, brukar pulsens längd vara viktig för mottagaren?

Postat: 11 februari 2008, 15:26:18
av Icecap
Det är ett par saker som ska skiljas på här:
* Modulationen. Den är till för att mottagaren ska kunna avgöra att det är signal samt ställa in DC-nivåer osv.
* Signalleringen. Den avgör hur du ska skicka en '1' och '0'.

Med de värden är det inte fel på Timer2, det kan däremot vara mottagaren som är för slö eller din paus mellan varje bit som är för kort.

Om pulsens längd har betydelse för mottagaren beror på hur mottagaren är byggd självklart.

Jag tycker att det är lite för många okända variabler här för att kunna hjälpa. Jag vet inte:
* Hur sändaren ser ut.
* Hur mottagaren ser ut.
* Hur puls/paus-förhållandet ser ut.
* Varför du skickar en längd puls för '0' och en annan längd för '1'.

Rent signalleringsmässigt tycker jag att du bör välja ett annat än det du verkar ha vald.

Antingen använda:
* FSK (moduleringsfrekvens 1 = '0', moduleringsfrekvens 2 = '1') eller
* ASK (AM-modulation): IR-pulser(38kHz) = '0' eller ingen pulser = '1'.

Med ASK kräver det en mottagare som är snabb på att ställa in gain och DC-offset, med FSK kräver det en mottagare med frekvensdiskriminator i.

Att sända ASK är bara att styra 38kHz'en med utsignalen från en UART och sedan skicka till IR-LED'n, mottagningen är skaplig enkel också, de flesta fjärrkontroller kör med ASK enl, vad jag vet.

ASK = "Amplitude Skift Keying" ~= AM
FSK = "Frequency Shift Keying" ~= FM

Fördel:
ASK: enkel sändning och mottagning.
FSK: bättre störsäkerhet, avkänning av OM det kommer signal möjlig.

Nackdel:
ASK: inte helt bra störsäkerhet, kan lösas med checksum, omsändning osv.
FSK: lite mer komplicerat mottagare pga. fekvensdiskriminator.

Edit: jag kom att tänka på en sak: de 38kHz man brukar använda för att pulsa IR-LED'n är mest till för att dels utesluta annat ljus men också för att köra med låg duty-cycle på LED'n, den bör alltså ha en duty-cycle på 10%.

Har du bråttom med datan som ska överföras kan du även modulera tiden mellan varje IR-puls men då börjar det bli knepigt med enkeltheten och jag tror inte att detta är din första prioritet.

Postat: 11 februari 2008, 17:11:36
av sodjan
> brukar pulsens längd vara viktig för mottagaren?

Ja, men det brukar också vara tydligt i databladet. Var det inte det ??

Postat: 12 februari 2008, 06:36:18
av blueint
LED är inte speciellt linjära om jag minns rätt?, så att modulering som QAM etc.. inte lätt låter sig göras?

Postat: 12 februari 2008, 08:34:35
av Icecap
Med det brusnivå som finns på ljus är det väl nätt och jämt att man kan detektera stabilt ATT det kommer pulser, att sedan modulera på den linjära delen är ju att tigga om problem.

Men visst kan man göra det, det är ju mest en fråga om stabilitet.

Postat: 12 februari 2008, 14:51:42
av net4all
Hårdvaran: Elfa 75-202-81(IR-mot) Ansluten precis som databladet
och Elfa 75-225-43 som IR-diod, ansluten direkt till PWM utgång på PICen och sedan till GND.

Mottagaren är ansluten till PICen som databladet säger(utan 10K resistor) till PORTB.0 som ger interuppt vid logisk 0.

Och angående signalleringen, jag trodde man skickade data genom att ha olika längder på pulsen ut från IR-dioden.

FSK, innebär det att man då byter mellan 38KHz och en anan frekvens för att skicka data?

Postat: 12 februari 2008, 16:10:08
av InSipiD
Komiskt, precis de komponenter jag tänkt använda!
Jag har en PWM-signal med frekvensen 38kHz. Denna slår jag sedan av och på så jag får en pulslängd på ca 600us, vilket verkar vara en bra pulslängde för mottagaren.

Kopplingen av mottagaren är likadan som din också. Tänkte skicka iväg 10101 där varje bit är 600us lång, och när mottagaren känner av signal mäter den på den med jämna mellanrum för att registrera vad som tagits emot. Detta här jag testat med kabel istället för IR, och det funkar bra.

Postat: 12 februari 2008, 16:21:43
av net4all
InSipiD: Men du har inte testat med IR-överföring än? Om du lyckas bättre än mig, plz skicka kod!

Jobbade lite mer på UART-exprimentet som Icecap nämnde förut.
Det fungerar nästan, mottagar PICen får in data från sändaren. Men datan är koruppt, jag sänder "A" med jämna mellanrum, ca 250ms mellan varje sändning, men jag får något helt annat.
Jag sänder med hastigheten 300byte/s, men det verkar inte gå att sända långsammare, står inget i databladet om lägre hastigheter vid 4MHz, man måste sänka klockhastigheten då...

Postat: 12 februari 2008, 16:23:34
av Icecap
När du använder den mottagare gäller bara ASK, inget annat.

Om man körde FSK kunde det t.ex. vara 32kHz för '0' och 40kHz för '1', talen är tagit ur luften och bara som exempel, den ville alltså skicka ut pulser kontinuerligt och modulationen bestämmer frekvensen.

Men vad menar du "utan 10k resistorn"? Har du ingen pull-up? Och sedan klagar du över att den är instabil? Eller använder du intern pull-up i PIC'en?

Jag tycker att du ska kolla lite på databladet, speciellt Fig-3 som du kanske finner intressant, du bör även kolla Tl och Th som anger att pulser bör vara inom 400µs och 800µs.

Kanske inte den mest lämpliga mottagare du har vald till detta men kör du med runt 1666 baud kan det faktisk fungera.

Postat: 12 februari 2008, 16:28:27
av net4all
Ang pullup: Det står optional i databladet... Men får testa med!
Får byta baudrate.

Återkommer senare(läxor :( )

Postat: 12 februari 2008, 16:31:50
av sodjan
> jag trodde man skickade data genom att ha olika längder på pulsen ut från IR-dioden.

Det beror lite på vad du menar med "pulser".
På en låg nivå är alla pulser 38 KHz.
Men om du menar den modulerade signalen, så är det rätt.
Databladet anger inom vilket intervall du kan ligga med pulserna.

Postat: 14 februari 2008, 17:35:39
av net4all
Uppdatering: Har nu testat med 1660kbs på UARTen, dock med samma resultat, fungerar inte.

Om man ansluter med kablar imellan istället så fungerar det, så det betyder ju att det är fel i hårdvaran. Frågan är var?
Om man ansluter en lysdiod till mottagaren ser man att det blinkar, dock funderar jag över spänningsnivåerna.
Kan det vara så att UARTen inte kan läsa av datan från mottagaren?

Använde även ett pullupmotstån på 2200ohm till mottagaren...

Postat: 14 februari 2008, 17:38:52
av sodjan
Mottagaren är inte konstruerad för UART kommunikation.