Telecomandă de la telecomanda IR

In timp ce lucrarile privind managementul de proiect al oricărui control de la distanță IR nu este terminat, am decis să iau câteva soluții pentru note individuale (pentru proiecte), mai ales că unele dintre ele nu vor mai fi incluse în proiect.





Astăzi voi vorbi despre algoritmul de procesare a parcelelor infraroșii. (Mai devreme am descris una dintre opțiunile posibile de decodare a parcelelor IR Lucrăm cu telecomanda IR).

Receptor IR, voi folosi cel mai ieftin și capabil să lucrez la tensiune joasă (de la 2.5 la 5.5 V) TSOP31236 (26 ruble):







Telecomandă de la telecomanda IR

Puteți să-l utilizați pe oricare dintre seria STM8 / STM32 din seria Discovery.

Formatele parcelelor (protocoalelor) generate de controlorii IR de la distanță de diferite aparate de uz casnic sunt foarte mari.

Principalele diferențe dintre protocoale sunt:

  • Diferențele dintre codificarea "0" și "1"
  • diferite lungimi de colete
  • diferențele în echipele de repetare automată

De exemplu, astfel de semnale sunt generate de una dintre telecomenzile mele (cum se înregistrează semnalele citite aici Înregistrați semnalele consolei IR pe placa de sunet):

Telecomandă de la telecomanda IR

Mai mult decât atât, formatul parcelelor este similar cu protocolul extins NEC:

Telecomandă de la telecomanda IR

Am compilat o tabelă pentru a compara protocoalele (desigur că nu este completă, aici doar că am găsit):

Telecomandă de la telecomanda IR

După cum puteți vedea, scrierea unui program capabil să decodeze toate protocoalele este destul de dificilă, există o diferență prea mare între ele.

În special, dacă luăm în considerare faptul că numărul de durate ale impulsurilor (atât pentru codarea impulsurilor de sincronizare, cât și pentru codificarea "0" și "1") este considerabil mai mare de două.

Cu toate acestea, pentru sarcina curentă (management), pur și simplu trebuie să "acceptați" și să identificați în mod unic pachetele de la orice consolă, ceea ce face foarte ușor să simplificați algoritmul de procesare.

Două puncte cheie în algoritm:

Utilizați codarea relativă, adică comparând durata impulsului primit și cel curent, se ia decizia de a codifica impulsul curent ca "0" sau "1". Dacă pulsul curent este mai scurt sau mai lung decât cel precedent, codificăm impulsul curent ca "1", în caz contrar fiind "0".

Notă: Impulsul este intervalul de timp dintre marginile identice ale semnalelor de ieșire ale receptorului IR.

Următoarea secvență de impulsuri a fost adoptată.

1) Prima valoare a parcelei este utilizată doar pentru comparație și nu va fi salvată;

2) A doua valoare este mai mică decât prima, deci avem primul bit egal cu "1";

3) A treia valoare este mai mică decât cea de-a doua, deci al doilea bit este "1";

4) A patra valoare este egală cu cea de-a treia, deci al treilea bit este "0";

După procesare, obținem următoarea secvență binară "110101".

Am obținut secvența de tăiat pe stânga N-bit (am ales cei trei biți în ele devine preambul și biți repetiția), iar în cazul în care numărul de biți primit mai mult de 64, apoi utilizați numai ultimele 64 de biți. Secvența rezultată pentru salvarea memoriei se "micșorează" la doi octeți utilizând un cod ciclic redundant (CRC16) (cod hash).

Algoritm pentru procesarea (decodarea) parcelelor de la receptorul IR

Un cronometru este utilizat pentru a decoda receptoarele IR.

Timerul trebuie să aibă un canal de captare de la o linie I / O externă.

Telecomandă de la telecomanda IR

Diagrama semnalelor pentru explicarea muncii:

Telecomandă de la telecomanda IR

Notă la figură:

1) Contorul contorizează valorile registrului de registru. 2) La sosirea o margine care se încadrează (poate fi modificat în creștere în cazul în care semnalul de ieșire de la receptor în infraroșu nu este inversat, deși, în general, cred că direcția de captare nu afectează algoritmul) este capturat valoarea timer registru de numărare și generează o întrerupere corespunzătoare. 2.1) În dispozitivul de întrerupere se citește valoarea captată și se resetează contorul. 2.2) rezultate Duratele de impulsuri (în contor cronometru), sunt împărțite în două grupe: pulsurile mai scurte de 10 ms sunt considerate informații (de exemplu, să conțină informații despre cheia de cod), iar impulsurile sunt mai mult de 10 ms sau egală cu zero, luată ca delimitatori colete (t .. adică începutul premisei). 3) În cazul în care, în termen nu a fost primit de 20 ms care se încadrează marginea semnalului de ieșire de la receptor în infraroșu, o întrerupere este generat de comparație (al doilea canal temporizator). Acest eveniment este folosit pentru a înregistra sfârșitul primirii pachetului.

Algoritmul a fost testat pe un microcontroler STM8S003F3, timerele sale sunt foarte simple, ceea ce va permite fără echivoc acest algoritm să fie implementat pe alte microcontrolere STM8 / STM32.

Setarea temporizatorului (biblioteca standard ST este utilizată):

Microcontrolerul este tactat de la oscilatorul RC încorporat la 16 MHz.

Handler (captură și deversiune):

Obținerea unei secvențe de impulsuri de intrare:

Sfârșitul primirii parcelei (după expirarea termenului) și primirea codului hash al parcelei ("compresie"):

Primirea de colete și evenimente de formare.

În opinia mea, tratamentul primit colete durează mult mai mult timp decât la recepție (decodare), care pot afecta primirea de colete (sări peste erori și PR).

În acest sens, codul de procesare este "scos" de la decodorul de pachete, la un alt handler, care se numește la fiecare 10 ms.

Voi încerca să explic cum funcționează (scala de timp nu este îndeplinită):

Telecomandă de la telecomanda IR

Cea mai simplă opțiune este atunci când este procesată o singură parcelă.

După primire, se stabilește stegul de expirare a primirii (ir_decoder.is_received).

În dispozitivul de tratare a parcelelor, este verificat (și resetat) pavilionul sfârșitului primirii parcelei, dacă este setat, se citește codul parcelei. Codul parcelei citite este bifat cu "cunoscut", în caz de coincidență, evenimentul "butonul este apăsat" este generat (procesat).

După 130 ms (acest timp este luat în considerare în manipularea însăși), evenimentul "apăsat de buton" este generat (procesat).

Telecomandă de la telecomanda IR

Varianta este mai complicată atunci când sunt procesate două colete diferite.

După primirea primului, este setat semnalizatorul de primire a recepției "A".

În manipularea parcelei, steagul este verificat și codul parcelei este citit, dacă este acceptat, atunci evenimentul "apăsat" este generat (prelucrat) "A".

A doua premisă vine la sfârșitul perioadei de 130 ms, datorită „independent“ de manipulare a primit în mod corect și corect practicat toate evenimentele pentru a trimite „A“, și anume: evenimentul „buton este apăsat“, „B“ și evenimentul „butonul este apăsat,“ „A“.

După expirarea perioadei de 130 ms (acest timp este contorizat în dispozitivul de procesare), evenimentul "B" este "generat" (procesat).

Codul manipulatorului nu rezultă.

Asta e tot pentru moment.







Articole similare

Trimiteți-le prietenilor: