darius_bv Postat Septembrie 29 Partajează Postat Septembrie 29 Salutare, pun si eu o intrebare: lucrez la un decodificator pt. telecomanda KEYES cu 17 taste, este pentru comanda unui amplificator cu lampi. Am rezolvat totul, dar observ o ciudatenie: la prima apasare pe orice tasta, in loc sa se transmita un burst conform standardului NEC, se transmite altceva. La urmatoarele apasari, totul este conform standardului. Daca atept mai mult de 15s, la urmatoarea apasare se transmite aceeasi ciudatenie, apoi cele normale. A mai observat cineva asta? O fi avand legatura cu reglarea automata a castigului receptorului? Setul telecomanda+senzor IR se gasesc la preturi derizorii (10lei), sunt ideale pentru asemenea aplicatii. Link spre comentariu
cimitavita Postat Septembrie 29 Partajează Postat Septembrie 29 (editat) la standardul NEC, mai mai întâi se transmite codul complet al tastei apăsate. Dacă tasta este menținută apăsat mai mult timp, în loc de codul complet, se transmite un cod REPEAT. Acesta constă dintr-o comandă START+STOP. Astfel când se recepționează REPEAT, se repetă ultima comandă primită în clar. Nu la toate butoanele unei telecomenzi se transmite codul REPEAT. Butoanele colorate, SETTING, POWER_ON, INFO si încă câteva, nu transmit cod REPEAT. CH_UP, CH_DOWN, VOLUME_UP, VOLUME_DOWN, tastele de sageți, transmit întotdeauna codul REPEAT. La telecomanda aia e greu să poți măsura cu un osciloscop direct pe ledul IR. Posibil că telecomanda are o problemă. Umezeală la butoane sau chiar program alterat (foarte rar). Ori poate fi bateria prea descărcată și uneori emite cod REPEAT aiurea. Dacă sunt anumite surse care emit IR, e posibil ca la ieșirea receptorului să apară impulsuri parazite. Contează mult și cum e făcut programul receptorului. Trebuie să știe să elimine impulsurile parazite care apar la ieșirea receptorului IR. Editat Septembrie 29 de cimitavita Link spre comentariu
darius_bv Postat Septembrie 29 Autor Partajează Postat Septembrie 29 Am studiat standardul NEC, tocmai de asta sunt nedumerit. Pot sa vad secventa initiala, dar nu ma ajuta cu nimic, pentru ca nu este conforma standardului. Este aceeasi secventa la prima apasare pe orice tasta si cred ca are tot 32biti. Poate ca telecomanda are o problema, o sa mai cumpar cateva. Bateria are influienta asupra duratei bitilor, cu cat e mai descarcata cu atat secventele se lungesc cu vreo 20-30us. Am prevazut in soft rutine de tratare a erorilor si l-am facut tolerant la descarcarea bateriei. Functioneaza perfect, doar ca nu ia comanda "din prima", ci dintr-a doua apasare. Multumesc pentru raspuns! Link spre comentariu
cimitavita Postat Septembrie 30 Partajează Postat Septembrie 30 (editat) încearcă orice telecomanda de televizor LG. Toate folosesc protocolul NEC. Se transmite START+4 octeți+STOP. În realitate sunt doar 2 octeți deoarece după primul octet se transmite inversul lui și după al treilea octet se transmite la fel, inversul lui. Asta se face pentru a verifica la receptie corectitudinea transmisiei. Pe baza fișierului de mai jos, am facut emițător/receptor IR pe același uC. L-am folosit ca să oprească un TV după un anumit timp dacă adormeam. Televizorul nu avea funcția asta din fabrică. coduri_receptionate_LG.txt Editat Septembrie 30 de cimitavita Link spre comentariu
misuraelectronic Postat Septembrie 30 Partajează Postat Septembrie 30 Acum 49 minute, cimitavita a spus: încearcă orice telecomanda de televizor LG. Toate folosesc protocolul NEC. aceasta afirmatie nu este nici pe departe adevarata ... la modelele vechi de televizoare crt LG , cam 50% din telecomenzi emit 3010/00 pe testerul Qunda , care este un protocol de la PHILIPS , anume RC5 daca nu ma insel prea tare ... restul de 50% emit pe testerul Qunda 6121/04FB , care este doar unul dintre foarte multele protocoale NEC ... jafurile alea de 10 ron setul , in marea lor majoritate emit 6121/00FF , care este cel mai des cod in hexazecimal folosit la ora actuala de catre industria chinezeasca de profil ... pe locurile 2 si 3 in industria de profil chinezeasca eu as zice ca se afla 6121/08F7 si/sau 6121/007F ... nici macar unul din aceste 3 coduri in hexazecimal de mai sus nu actioneaza televizoare LG ... daca virgula codurile in hexazecimal nu seamana intre ele , atunci 101% nici trenurile de impulsuri vizualizate pe un osciloscop nu seamana intre ele ... Link spre comentariu
Bandi Szasz Postat Septembrie 30 Partajează Postat Septembrie 30 (editat) Daca "problema" este repetabila s-ar putea sa fie si o functionalitate de wake-up agresiv, adica acel ceva care este transmis prima data este de fapt un semnal de trezire a circuitului receptor dintr-o stare de standby low-power ( cum e deepsleep pe Arduino / ESP32 ). Eu am un dimmer pentru benzi led cu telecomanda RF si butoane touch care se comporta exact la fel, dupa cateva secunde intra in hibernare iar la urmatoarea folosire trebuie sa apas aleator pe orice buton pentru a trezii telecomanda / receptorul dupa care pot apasa pe ce buton vreau. Editat Septembrie 30 de Bandi Szasz Link spre comentariu
darius_bv Postat Septembrie 30 Autor Partajează Postat Septembrie 30 Aceata ar putea fi o explicatie, desi decodificatorul poate folosi prima comanda atat pentru iesirea din sleep, cat si pentru a executa o functie. Revin dupa ce mai cumpar cateva, sunt curios daca au acelasi comportament. Toate cele bune! Link spre comentariu
misuraelectronic Postat Octombrie 1 Partajează Postat Octombrie 1 eu nu cred ca este valabila faza cu revenirea din deep-sleep pentru emisia in IR , iar simplul motiv ar fi ca la apasarea oricarei taste consumul este ff mic ...maxim 20 ...20 si ceva mA ... o baterie plata de genul Varta poate sustine fara nici o problema un astfel de consum minim 1 an de zile ... mult mai plauzibila este posibilitatea ca integratele folosite de chinezi in telecomenzile acestea plate sa fie niste pocnitori puternic dependente de tensiunea de alimentare ... cum scade un pik tensiunea furnizata de o baterie de proasta calitate , cum pac , deformeaza trenul original de impulsuri ... ginditi-va si la aspectul economic ... daca tot ansamblul costa fantastica suma de 10ron , cu cit credeti ca a iesit pe poarta fabricii ? maxim 1 usd banuiesc , iar la acest pret nu ai cum sa obtii si calitate ... Link spre comentariu
darius_bv Postat Octombrie 1 Autor Partajează Postat Octombrie 1 Nu va contrazic, sunt prea ieftine ca sa o fac. Cert este ca secventa initiala e complet diferita de secventele standard. Nu are START, incepe cu o secventa lunga de 0L, nu am fost curios sa o decodific. Pe de alta parte, pocnitorile astea isi fac treaba fara nicio problema. Numai bine! Link spre comentariu
cimitavita Postat Octombrie 1 Partajează Postat Octombrie 1 am și eu câteva telecomenzi dinastea plate și merg fără probleme cu baterii vechi de 3 - 5 ani. Sunt prea simple ca să meargă prost. la un atmega, în funcție de anumite setări, uC are devoie de până la 32768 CLK ca să iasă din sleep. Un ESP32 are mult mai multe interfețe de pornit așa că... Unii pe YT arătau cum că ESP32 ar avea nevoie de până la 3 secunde ca să iasă din deep sleep, dar eu nu cred că ieșirea din sleep poate dura atât de mult. Apoi mai este și prioritatea pinului legat la senzorul IR. În momentul în care se detectează semnal de la senzorul IR, toate întreruperile trebuie imediat oprite și lăsată să meargă doar partea de program care se ocupă de citire și decodare telecomandă. După ce s-a obținut codul tastei apăsate, întreruperile generale sunt repornite. Altfel orice întrerupere care se activează pe durata citirii, afectează citirea și iese o mare bâlbâială. La toate uC din TV sau radio pe care le-am văzut și care au telecomenzi, partea de recepție și decodare nu intră niciodată în sleep. Iar la multe chestii care au funcția sleep sau power off și întreruperi complicate, cum ar fi tunere PC, recepția și decodarea IR este asigurată de un cip separat care nu intră niciodată în sleep. să facă teste fără ca ESP32 să mai intre în modul sleep și cu întreruperile oprite. Dacă e din cauza lui ESP32 și vrea neapărat ca să intre în sleep și să folosească întreruperi, trebuie să mai folosească incă un microcontroler mic care să prelucreze codurile telecomenzii și să le trimită gata decodate la ESP32 exact așa cum e în tunerele TV pentru PC. Link spre comentariu
Bandi Szasz Postat Octombrie 1 Partajează Postat Octombrie 1 La unele uC uri mai simple cum ar fi atmega / pic poate ar fi posibila iesirea din sleep pe prima comanda dar la ESPuri in nici un caz, ESP pe deepsleep se opreste in proportie de 99.9% inclusiv continut RAM, iesirea din deepsleep este de fapt o pornire de la rece, se trece prin bootloader si alte functii interne, are nevoie de cateva sute de ms sa poata procesa softul efectiv, cele 3s poate au fost calculate si cu conexiunea la WIFI insa acesta nu e necesar, se pot obtine porniri la cateva sute de ms. Link spre comentariu
roadrunner Postat Octombrie 1 Partajează Postat Octombrie 1 (editat) Citat Apoi mai este și prioritatea pinului legat la senzorul IR. În momentul în care se detectează semnal de la senzorul IR, toate întreruperile trebuie imediat oprite și lăsată să meargă doar partea de program care se ocupă de citire și decodare telecomandă. După ce s-a obținut codul tastei apăsate, întreruperile generale sunt repornite. Altfel orice întrerupere care se activează pe durata citirii, afectează citirea și iese o mare bâlbâială. nu trebuie sa opresti celelalte intreruperi daca-i dai prioritate la cea de IR. La inceputul codului de IR (prima tranzitie) pornesti un timer cu rezolutie suficienta de timp si la fiecare tranzitie de bit (intrerupere) memorezi valoare timerului in ram (dureaza numai cateva cicluri de ceas sa faci asta si nu poate fi intrerupta de alta intrerupere din cauza prioritatii) - cand expira timerul respectiv (alta intrepere) decodifici ce ai capturat in RAM. Telecomenzile sunt foarte lente fata de executia unui MCU ai o gramada de timp intre tranzitii sa faci o gramada de lucruri. O rutina de intrupere scrisa bine nu are trebui sa dureze mai nult de cateva zeci de cicluri de ceas iar distanta in timp intre tranzitiile bitilor de la telecomanda e mare (zeci de mii de cicluri de ceas) deci executia intreruoerilor e scurta si sporadica daca codul e scris bine. RR Editat Octombrie 1 de roadrunner Link spre comentariu
cimitavita Postat Octombrie 1 Partajează Postat Octombrie 1 (editat) ba trebuie să dai prioritate la întreruperea IR. Numai că asta merge doar la 8051 și la procesoarele pentru PC. Nu știu dacă asta e posibil la uC Texas Instruments. La microcontrolerele atmega și pic întreruperile sunt mult simplificate și nu merge să faci asta. Prioritatea e prestabilită dinainte și se poate vedea în tabela vectorilor de întrerupere. Poți seta un counter să contorizeze singur în funcție de starea unui pin. Doar că la schimbarea stării pinului dacă în momentul acela se execută o altă întrerupere care a oprit întreruperile generale, se sare peste întreruperea care a schimbat starea pinului și care pentru întreruperi imbricate trebuie să facă următoarele: - să refacă pointerul de memorie IR. La întreruperile imbricate, pentru acest pointer nu poți folosi stiva. - să citească data din counter și să calculeze cât timp pinul IR a stat în acea stare logică. (timerele numără taman pe dos. Nu e ca la 8051 sau x86 unde poți seta sensul contorizării) - să o memoreze timpul calculat și să incrementeze pointerul la adresa următoare de memorie - să reseteze counterul - să inverseze logica care face întreruperea pe pinul IR (dacă era 0, trebuie să pună 1 sau invers) și să repornească contorizarea. - să memoreze pointerul de memorie. - să repornească întreruperile generale (acestea sunt oprite automat în momentul apariției întreruperii la pinii de captură) Iar toată chestia asta trebuie să se repete de 67 de ori până la citirea completă a unui cod IR pe 32 biți. Ca să meargă corect, restul întreruperilor nu ar trebui să se atingă de contorul rezervat pentru IR și să nu lase oprite întreruperile generale pe durata execuției lor. Iar cel mai complicat e cu stiva. Cred că știi că la atmega, în momentul în care apare o întrerupere, prima chestie care o face uC e să opreacă întreruperile generale și abia apoi sare la adresa întreruperii nou apărută. Astfel celelalte întreruperi apărute nu mai sunt luate în considerare. Întreruperile generale sunt repornite de prima instrucțiune RETI, dar pentru întreruperile imbricate trebuie repornite și cu SEI iar RETI devine un simpu RET care nu face decât ca contorul program să sară înapoi unde era când a apărut întreruperea. Dacă astea nu sunt respectate, telecomanda trebuie să emită câteva zeci de coduri până se întâmplă ca unul să fie recepționat cât de cât corect. Știu asta pentru că am făcut receptoare IR cu întreruperi imbricate. Și e foarte mult de calculat ca să le faci să meargă corect. Și cu toate calculele și aranjamentele, tot e posibil ca în anumite situații citirea codului IR să fie afectată. Cel mai simplu e să nu te legi la cap când nu te doare și să lași întreruperile generale oprite pe toată durata citirii codului IR. Durează numai câteva zecimi de secundă. Și cu astea, tocmai am spus cum poți citi date seriale pe pinii captură prin întreruperi, fără să stresezi prea mult un uC Editat Octombrie 1 de cimitavita Link spre comentariu
darius_bv Postat Octombrie 2 Autor Partajează Postat Octombrie 2 Folosesc un PIC, fara sleep. De ani de zile nu am mai folosit comanda sleep. Dupa cum spuneam, decodificarea tuturor tastelor functioneaza perfect. Ca sa suflu si-n iaurt, folosesc un cuart de 4Mhz si compensez masurarea timpului tranzitiilor inclusiv cu durata instructiunilor executate pana la oprirea/pornirea timer-ului. Am prevazut o marja de eroare adaptata, in functie de durata burstului masurat, ca sa acopere si influienta descarcarii bateriei. Link spre comentariu
darius_bv Postat Octombrie 16 Autor Partajează Postat Octombrie 16 In final, s-a dovedit ca telecomanda cu pricina era un fel de "dick's head dick head", cum ar zice englezii. Cele pe care le-am cumparat nu au meteahna descrisa anterior. Pe langa aceea, are si folia lipita invers, adica semnificatia tastelor e complet aiurea. Numai bine! Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum