Sida 1 av 2
tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 15:36:45
av DiyJohn
Hejsan!
Jag funderar på hur man kan bygga en liten busapparat utav en liten pic och några få komponenter. Busapparaten ska lyssna efter signalerna från en tv-fjärrkontroll och registrera tiden mellan skiftpunkterna och sedan vid slumpmässiga tidpunkter "skicka" likadana pulser! D.v.s. en ir-repeater med slumpmässig fördröjning. Den ska dessutom bara lyssna när en knapp är intryckt!
Det jag undrar först är:
Kan man köra på en bärvåg på 39kHz för att kommunicera med tv-ar på 38- och 40-kHz?
Kan pic'ar skapa frekvenser på 39kHz??? -0101010101 i "hög" hastighet
behövs en extern oscillator?
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 17:15:02
av sodjan
> Det jag undrar först är:
> Kan man köra på en bärvåg på 39kHz för att kommunicera med tv-ar på 38- och 40-kHz?
IR-mottagare har diagram där man ser hur mycket känsligheten tappar
i förhållande till avstånd från den nominella frekvensen. +/- 1KHz är
sannolikt ganska OK.
> Kan pic'ar skapa frekvenser på 39kHz??? -0101010101 i "hög" hastighet
Vad betyder 39 KHz i "hög" hastighet ? Finns det även 39 KHz i "låg" hastighet ?
Hur som helst, svaret är "ja", om den valda PIC modellen har PWM modul.
> behövs en extern oscillator?
Nej. Men kanske en kristall. Beror på PIC modell.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 17:29:52
av DiyJohn
sodjan: det jag menade med 10101010 i "hög" hastighet var att sätta en pinne på pic'en hög och sedan låg med en frekvens på 39kHz! Jag vet ej hur snabbt pic'ar byter från nolla till etta på pinnarna! Därför gissade jag på att 39kHz var en hög hastighet!
edit: glömde fråga: kan PIC12F629 lämpa sig för detta ändamål? det som ska kopplas är: ir-led + ir-sensor + batteri + knapp + lämpliga resistorer! Kan man driva en ir-led genom pic'en??
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 17:36:16
av bos
> Jag vet ej hur snabbt picar byter från nolla till etta på pinnarna!
Den hastigheten beror på hur snabbt du klockat PIC:en.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 17:37:36
av övrigt
Nu använder jag iofs AVR men samma sak bör gälla för PIC.
Till min IR-sändare använde jag två avbrott. Ett med kort tidbas, ca 38kHz, och ett med själva bitmoduleringen som bara satte på och stängde av det snabba avbrottet. Jag togglade bara en pinne som via ett motstånd gick till en IR-diod.
39kHz bör funka till de flesta mottagare.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 17:48:20
av sodjan
> Jag vet ej hur snabbt pic'ar byter från nolla till etta på pinnarna!
Det där är en fråga med två helt olika svar beroende på vad du
igentligen menar med frågan.
Det ena svaret (och det svar som är mest korrekt med tanke på hur frågan
är ställd) är hur snabbt själva omslaget är mellan "låg" till "hög", och det
handlar om ns och beror mycket på vad pinnen är "lastad" med.
Den andra svaret är vilken frekvens man som högst skulle kunna generera
på en PIC pinne, och det svaret beror på flera olika saker. Modell på PIC
först och främst, men även på en hel del okända parametrar som vad
programmet ska göra förrutom att skapa denna "signal".
> det jag menade med 10101010 i "hög" hastighet var att....
Jorå, helt OK.. .

Min poäng var att det bara finns *en* hastighet för just 39 KHz...
> glömde fråga: kan PIC12F629 lämpa sig för detta ändamål?
Vill du ha en 8-pinnare så skulle jag ta en 12F683 vilket har en PWM modul
plus lite andra finesser som gör hela programmeringen lite enklare.
> Till min IR-sändare använde jag två avbrott. Ett med kort tidbas, ca 38kHz...
Det är en metod. Men en enklare metod är att låta 38/39 KHz signalen
skapas av en PWM modul, så slipper man helt att hantera det i koden (utöver
själva initieringen). Sedan behöver man bara stänga PWM modulen av/på för
att skapa rätt bit-mönster.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 18:12:37
av DiyJohn
pwm-metoden låter ju rätt bekväm!!
Tack för hjälpen!!
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 28 maj 2009, 18:46:45
av blueint
En mer generell metod är att lagra IR sekvenserna med "
Run-length encoding" så att vid varje interrupt så inhämtas en ny bit och skickas till utgången. Så klarar man alla kodningar förutsatt att MCUn kan skyffla bitar snabbare än kortaste tidsintervallet.
För en PIC på 4 MHz så får man 1 MIPS. Vilket för 40 kHz modulering ger 12.5 instruktioner per bit.
Använder man den inbyggda PWM förutsätter det att bithastigheten i det kodade meddelandet är betydligt lägre än modulationshastigheten. Vilket det iofs oftast är för IR kontroller. Men man riskerar att stöta på system som inte kan styra med den metoden.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 10:28:50
av StRob
Jag förstår inte hur run-length encoding skulle göra det smidigare i detta fall, kan du förklara närmare?
PWM-metoden verkar smart tycker jag.
Jag har själv testat att generera timer-avbrott på 2*38 kHz för att toggla en utgång (glöm inte att det krävs två togglingar för att skapa en frekvens på 38 kHz) och då körde jag på interna 4 MHz-klockan. Men då kunde jag itne göra mycket i programmet i övrigt. Jag ville räkna upp en 16-bitars variabel och kolla om det är dags att skicka ut IR och det hann den inte med. Under "main" hade jag mer kod som kontrollerade räknaren (den tidigare beskrivna 16-bitars variabeln) och satte en utgång hög eller låg men det ska ju inte påverka avbrottet. (så här såg min avbrottsrutin ut, och den är för lång för att hinna exikveras innan nästa avbrott kommer. Jag får inte ut 38 kHz m.a.o.):
Kod: Markera allt
void interrupt isr(void)
{
// TIMER0 OF:
(Här hade jag även koll om det var TIMER0avbrottet, vilket man bör ha, men tog bort det för att spara tid då avbrottsrutinen tog för lång tid.)
TMR0 = 0xFF-TMR0_START; // OF på 2*38kHz
T0IF = 0; // Nollställ flaggan
counter1++; // Räkna upp 16bitars variabeln
if(!IRin){ // Om IR detekteras. (Aktivt låg).
IRout1 = !IRout1; // IRout togglar med 2*38kHz => F=38kHz
counter1 = 0; // Nollställ räknarna
state = 0; // Återställ till aktiv mode
}
else(IRout1 = 0); // Ser till att IRout inte slutar hög när den togglar.
}
EDIT: Kan ju nämna att IRin, IRout1 är bara vanliga in/utgångar (RB5 etc.) TMR0_START är bara en "define" och motsvarar ett tal för att det gör koden mer lättläst och lättare om man vill justera så räcker det att göra det i deklareringen.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 11:42:35
av blueint
StRob, RLL .. eller kanske ev byte-run är en slags komprimering i farten så att säga. Då slipper man lagra en lång sträng av säg "0"-or. Istället skickar man "sänd 250 st 0-or", osv. Visa tekniker tillåter "sänd 225 st 00110-sekvenser".
Fördelen är att man det kräver mindre av länken mellan MCU och styrdator. Samt att det beroende på timing går att använda mindre minne.
Eftersom frekvens ej är specad. Så kan vi utgå från mitt tidigare exempel med 12,5 instruktioner per IR-cykel. Och då bör man inse att det krävs assembler för att det ska ha en chans att fungera.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 12:22:40
av v-g
Har för mig att IR-koderna/protokollet är ganska robusta och tål en hel del påverka,n men detta varierar säkert från modell till modell. Min dreambox ville tex aldrig godta signaler från min gamla universalfjärr vad som klickade forskade jag aldrig i men den sa iaf att den lärde sig korrekt.
Med tanke på hur oavancerade vanliga fjärrar är tror jag inte det är någon våldsam noggrannhet på dessa heller utan de sprider nog rätt bra.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 12:50:34
av vfr
En annan variant är att köra utgången från en UART för att generera bärvågen. 38400 baud är rätt nära 39kHz och då behöver man bara ladda om UART-registret med $55 var tionde bit. Det blir inte lika smidigt som med PWM-modulen, men en faktor ungefär 10ggr bättre mot att bitfippla varje puls manuellt.
Edit: Eller t.o.m 20ggr bättre eftersom det är både positiv och negativ flank på det manuella bitfipplandet.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 20:57:11
av jesse
jag tycker pwm metoden låter som den enda vettiga. Allt annat är ju onödigt jobb, både för programmeraren och för processorn. Skulle det vara krångligt på nåt vis att få till pwm i en pic så köp en attiny25 - den gör jobbet enkelt och kan köra 20 miljoner instruktioner per sekund och kan pwm'a med upplösning på 50 nanosekunders noggrannhet.
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 21:11:59
av blueint
Hur tar man emot IR i en MCU på ett effektivt sätt utan extern bärvågsdemulator?
Ser ingen direkt bärvågsdetektor internt?
Re: tv-fjärr, ir-protokoll och nogrannhet!!
Postat: 6 november 2009, 22:42:21
av jesse
nej, bärvågen måste nog detekteras externt. insignalen är ju allt annat än digital.... ska filtreras och så vidare... en färdig mottagare med filter och detektor skulle jag rekommendera.