Blacksmith Postat Decembrie 18, 2024 Autor Partajează Postat Decembrie 18, 2024 (editat) Deoarece totul e facut de mine, iti dai seama ca am facut cumva sa ma asigur ca e de la buton. Pe de alta parte, butonul este si acum acolo, insa e dat disable din soft de vreo 6 luni, si nu a mai existat nici un shutdown din senin... Apropo, aceste shutdown-uri nu sint fortate (prin pierderea brusca a alimentarii), ci se urmeaza procedura standard de safe-shutdown. Si singura comanda prin care se poate face asta, vine de la buton... Daca ne cunoastem de 10-15 ani si tu imi recomanzi mie sa caut intrerupatoare prin tv-uri vechi... inseamna ca n-ai inteles nimic din ce fac eu... Asta faceam acum 25 de ani. Aveam un boschetar abonat pe care il plateam sa-mi caute placi electronice defecte prin tomberoane, ca nu aveai de unde sa cumperi. Dar intre timp am mai evoluat si noi... Acum, nu doar ca folosesc doar piese noi la produsul final, dar trebuie neaparat sa fie piese in productie activa si sa existe stocuri mari la magazin. Nu fac productie de serie ca sa vand, dar nu concep ca un montaj al meu sa nu poata fi reprodus oricand de oricine doreste, pentru ca nu se mai gasesc piesele. Si pana la urma, contactele de la intrerupatoarele de semnal nu sufera de "wetting current" ? Editat Decembrie 18, 2024 de Blacksmith Link spre comentariu
sesebe Postat Decembrie 18, 2024 Partajează Postat Decembrie 18, 2024 Acum 22 minute, Blacksmith a spus: ...... . Si singura comanda prin care se poate face asta, vine de la buton... ....... N-ai citit cu atenție sau n-ai inteles ce am spus. Ca să nu lungesc discuția, poate fi și o problema SW în cod, nu neapărat semnal prost ajuns la întrarea procesorului. Link spre comentariu
Blacksmith Postat Decembrie 18, 2024 Autor Partajează Postat Decembrie 18, 2024 E chiar simpla partea de soft a butonului. Pun o intrerupere pe pin-ul ala, si cand se declanseaza astept 1 secunda, citesc din nou pin-ul si daca intr-adevar isi mentine starea de 1 logic, dau shutdown. Link spre comentariu
Vasile5 Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 (editat) 1. Dacă dorești să păstrezi schema pe care ai prezentat-o în primul post, trebuie să renunți la R2 sau să alegi o valoare mult mai mică pentru R2. Așa cum ai conceput schema, atunci când întrerupătorul este închis, nodul respectiv ar trebui să fie în 0 logic sau o valoare apropiată de 0 volți. Teoretic vei avea 0,06V (ceea ce este bine), dar în realitate - nodul tău fiind separat de masă printr-o rezistență relativ mare (1k), se va afla oarecum într-o poziție "floating", putând fi influențat de zgomotul elecromagnetic. Renunță la R2 sau alege o valoare mult mai mică pentru R2, cel puțin de zece ori mai mică. 2. Condensatorul ales are o valoare cam mare. La butoane se folosesc în general ceramici de 100nano - 200nano. Condensatorii de valori mari ajută la filtrarea în frecvență joasă, dar zgomotul electromagnetic este reprezentat de schimbări foarte rapide, iar valori mari ale condensatorului nu te avantajează. Crescând prea mult valoarea condensatorului vei introduce și întârzieri la acționarea butonului. Dacă dorești o capacitate de valoare mare în scop de a realiza o filtrare mai bună, este bine să pui doi condensatori mai mici în paralel pentru a obține valoarea dorită sau pui un condensator mare și unul mic în paralel. Fiind în paralel, ESR-ul va scădea, iar capacitatea va crește, deci vei obține o filtrare mai bună. 3. Rutina software de citire a butonului, așa cum ai prezentat-o, nu este corectă. Rutina software trebuie să facă mai multe citiri rapide, succcesive. Exemplu, citește valoarea butonului de 10 ori, o citire la fiecare 20milisecunde. Dacă la peste 90% din citiri valoarea găsită este 1 logic, atunci concluzionează că butonul este în starea 1, dacă însă la 90% din citiri valoarea este 0 logic, declară validă starea 0. Dacă niciuna din condiții nu este îndeplinită, starea este incertă și rutina se reia. Valoarea de 90% se numește "button reading confidence level". Nu este suficient să citești valoarea doar de 2 ori la interval de o secundă pentru că foarte ușor pot apărea erori. Nu trebuie să ignori zgomotul electromagnetic sau să-l consideri ca ceva improbabil (o raritate), ci ceva prezent permanent și care mai devreme sau mai târziu va influența montajul dacă nu este corect realizat. Gîndește-te că o simplă descărcare electrostatică are cîțiva kV. Ori, astfel de descărcări se produc zilnic atunci când atingem aparatul sau când părți ale aparatului aflate în mișcare se electrizează (dacă montajul nu e bine ecranat). Un telefon mobil care transmite și se află în apropierea montajului va influența cu siguranță valorile citite de microcontroller, mai ales dacă firul de la microcontroller pînă la buton este lung. Ca regulă, condensatorul trebuie să fie cât mai aproape de pinii microcontrollerului și de valoare potrivită, nici prea mare nici prea mic (valori mai mari sunt mai bune ..dacă sunt realizate în paralel), iar firul până la buton trebuie să fie cât mai scurt - atât cât permite montajul. Editat Decembrie 19, 2024 de Vasile5 1 Link spre comentariu
Vasile5 Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 (editat) R1 este și acesta cam mare, un curent care să asigure stabilitate ar fi în jur de 1mA sau 2mA cred. Eu am înțeles ceea ce ai scris despre "wetting current", dar cred că nu oxidarea contactului cauzează problema ci valorile componentelor nu sunt alese astfel încât să obții stabilitate. Nici software-ul nu este bine făcut, nefiind suficient să citești doar o valoare sau două. Gândește-te că microcontrollerele au impedanță mare pe intrare, iar citirea se face la frecvență foarte mare, foarte rapid, deci oricând pot apărea o valoare sau două eronate (chiar și la interval de mai multe secunde!, nu doar la început pe frontul on/off). E adevărat că la început zgomotul tip "bouncing" de la acționarea butonului este cel mai ușor de observat, dar asta nu înseamnă că după prima secundă am scăpat de zgomot. Dacă vrei să te convingi de existența zgomotului, declară pinul "analog input" și loghează valorile de tensiune citite de microcontroler pe pin. Vei vedea că printre milioanele de citiri pe care le poate face mocrocontrolerul pe secundă, apar și valori "mai deosebite", și asta nu doar în prima secundă. Aceste valori eronate nu apar doar la început, pe frontul on sau off și apoi dispar definitiv, ci din cînd în când mai apare cîte o valoare (cîteva valori) care "ies din grafic". Osciloscopul nu poate "prinde" aceste spike-uri, dar microcontroller-ul le prinde. Ori, dacă tu ai conceput rutina software să ia decizii doar pe baza a două citiri, e doar o chestiune de timp până ce se nimerește ca ambele citiri să fie eronate. //offtopic Probabil deja cunoști multe dintre cele pe care le-am scris. Nu trebuie să te simți jignit, uneori cauza problemei este tocmai un amănunt banal pe care îl cunoaștem dar care ne scapă. Editat Decembrie 19, 2024 de Vasile5 1 Link spre comentariu
Blacksmith Postat Decembrie 19, 2024 Autor Partajează Postat Decembrie 19, 2024 @Vasile5 Interesant ! Mersi pentru informatii... De ce sa ma simt jignit ? Chiar ma simt onorat ! Doar eu le-am cerut... M-am gandit sa pun 1.5k cu 50R. Cu valorile astea, nodul va sta 100mV. Iar curentul prin intrerupator va fi 2mA. E ok ? In legatura cu condensatorul... Mie nu imi trebuie sa reactioneze foarte rapid butonul. O intarziere de 1s este perfecta. Doar este un buton de shutdown, pe care nu il freci toata ziua. Si oricum, dupa ce il apesi, microcontrolerul incepe sa salveze datele (care dureaza ceva) si apoi executa comanda. Deci intarzierea introdusa de orice cond pus pe intrerupator, e nesemnificativa. Acum, daca pun 1.5k cu 50R, acel cond de 2.2uF devine chiar mic. Integreaza tensiunea doar pe vreo cateva milisecunde. Iar "bouncing-ul" intrerupatorului poate dura si 100-200ms. Dar n-am ce sa fac, nu am cum sa pun mai mult de 2.2uF. Daca acest cond este smd ceramic cu ESR mic, mai are rost sa pun si un 100nF in paralel cu el ? In legatura cu rutina software de citire... Interesanta idee ! Sa vad cum o implementez... In softul meu, microcontrolerul nu citeste continuu pinul butonului (ca nu pot sa-l tin ocupat doar cu asta), ci am setat o intrerupere care executa rutina la fiecare front crescator. Link spre comentariu
Blacksmith Postat Decembrie 19, 2024 Autor Partajează Postat Decembrie 19, 2024 Mai, dar condensatorul ala de filtraj nu ramane incarcat dupa ce intrerup tensiunea microcontrolerului si distruge pinul ? Link spre comentariu
modoran Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 Dar miliardele alea de aparate ce contin taste si procesor in ele de ce nu se distrug nici unul ? Te inspiri din alea. Multe au doar buton si direct intr-un pin, atat, cu software ca lumea, evident. Pun pariu ca se gaseste vreo librarie pentru platforma ta. Nu mai face de capul tau, copiaza ceva gata facut. Link spre comentariu
Vasile5 Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 (editat) Cu cât cât crești curentul mai mult, cu atât câștigi stabilitate în nodul respectiv, dar nici în această direcție nu trebuie exagerat pentru că va reprezenta un consum inutil. Încearcă să crești progresiv până ajungi la o valoare care îți convine. Dacă această creștere nu ajută, cauza problemei trebuie căutată în altă parte. În general, butoanele microcontrolerului se alimentează din aceeași sursă cu microcontrolerul sau chiar din microcontroler. În cazul tău, butonul se alimentează din sursă separată - am înțeles corect? Dacă se alimentează din sursă separată, având în vedere că nu folosești optocuplor probabil masa este comună. Acest aspect poate crea sau nu probleme - depinde de montaj. Masa cum este făcută? Dacă sursa de tensiune nu este baterie, asigură-te că e stabilă. Dacă pe aceeași sursă sunt legate și alte componente care consumă mult, este posibil ca sursa să aibă spike-uri când unul dintre aceste dispozitive se cuplează/decuplează și aceasta poate introduce o declanșare nedorită. Astfel de situații sunt de obicei greu de depistat, poți testa de zece ori și totul e OK, iar abea a 11 oară să apară un spike. Oricum, o valoare foarte mică a lui R2 ajută, iar o rutină software care să preia mai multe valori iar va ajuta. Eu nu mă pricep prea bine la butoane, dar cred că un timp de bouncing de 200ms este mult prea mare. Asta reprezintă aproape un sfert de secundă! Ceva nu e în regulă cu acel buton, probabil are loc alt fenomen. Oricum, ai dreptate, dacă micșorezi valoarea rezistenței nu poți micșora și condensatorul. Un 100n în paralel ajută la frecvențe mari, poți încerca să adaugi dacă e la îndemână. Legat de afirmațiile colegului Modoran. Cu tot respectul, dar nu sunt de acord că ar trebui să folosești o librărie deja făcută. Codul pentru buton poți să-l faci singur și doar făcând înveți. Puteai să cumperi un aparat deja făcut însă nu ai fi avut satisfația propriei realizări și nici n-ai fi descoperit aceste fenomene importante, dar subtile. Aceste subtilități nu le poți descoperi și înțelege decât experimentând. Iată, un simplu buton pune atât de multe probleme interesante și înțelegând tot ce se întâmplă acolo conduce la o înțelegere profundă a electronicii, o înțelegere pe care nu o poți dobândii decât experimentând și nu citind cărți sau preluând ceva deja făcut. Editat Decembrie 19, 2024 de Vasile5 2 Link spre comentariu
Blacksmith Postat Decembrie 19, 2024 Autor Partajează Postat Decembrie 19, 2024 (editat) Cam asta ar fi circuitul echivalent la ce am eu... Ce e in microcontroler, doar am estimat, ca nu stiu exact cum e. Dar sigur se prezinta ca o sarcina pe alimentare iar intrarea GPIO e de impedanta inalta. Placa de Pico are pe ea un converor DC-DC, cu un cond de 47uF si produce 3.3V pentru microcontroler si restul. Cand se da shutdown, se intrerupe cu un mosfet minusul ce alimenteaza convertorul DC-DC al Pico, nu tensiunea de 3.3V. Am facut ca in schema si vad ca merge ok. Tensiunea pe pinul GPIO, fata de masa microcontrolerului scade la 0V imediat ce mosfetul taie alimentarea. Nu sint chiar sigur daca acel cond de 10uF de la buton se descarca prin diodele interne ESD ale microcontrolerului sau prin sarcina pe care o prezinta chiar microcontrolerul. Dar vad ca nu se intampla nimic si totul e bine. I-am pus R4 tocmai pentru a limita curentul la 1.5mA in caz ca o ia prin diode. Cred ca or rezista la o mica descarcare de 1.5mA, nu ? Acum, daca am R4, cred ca pot sa scad R2 si la 10 ohmi... O sa modific si la circuitul de la NAS, unde isi dadea shutdown singur, si va spuna la anul pe vremea asta daca au mai aparut declansari false... Editat Decembrie 19, 2024 de Blacksmith Link spre comentariu
mihaiaurul Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 2 hours ago, Blacksmith said: Ce e in microcontroler, doar am estimat, ca nu stiu exact cum e. Link spre comentariu
Blacksmith Postat Decembrie 19, 2024 Autor Partajează Postat Decembrie 19, 2024 (editat) Mda, asta o stiu... e si in datasheet-ul microcontroler-ului. Dar nu se specifica ce fel de diode sint alea, cat de capabile sint. Am citit pe forum la Raspberry, si inginerii aia zic ca alea nu sint "diode de protectie" ci mai mult "diode ESD". Apoi, nu stiu daca microcontrolerul prezinta o sarcina constanta, care consuma toata energia din condul de filtrare, daca ii tai alimentarea converorului ce il alimenteaza. Si daca da, ce rezistenta are ? Sau daca, se dezactiveaza sub o anumita tensiune si trece in impedanta inalta... iar condul ramane incarcat. Dar astea sint fantezii... Evident ca nu avem de unde sa aflam. Ar fi fost frumos sa stiu, dar na... Dar daca merge asa cum e, sint multumit. Editat Decembrie 19, 2024 de Blacksmith Link spre comentariu
mihaiaurul Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 (editat) 3 hours ago, Vasile5 said: Iată, un simplu buton pune atât de multe probleme interesante și înțelegând tot ce se întâmplă acolo conduce la o înțelegere profundă a electronicii, o înțelegere pe care nu o poți dobândii decât experimentând și nu citind cărți sau preluând ceva deja făcut. Dacă nu stăpânești teoria, nu citești cărți, nu ai cum să înțelegi Niciodată ce se întâmplă hard/soft la apăsarea unui buton, să zicem. 6 minutes ago, Blacksmith said: Dar nu se specifica ce fel de diode sint alea, cat de capabile sint. Pentru problema ta, nu conteză ce diode sunt. 1N4007 pot sa fie. Sau EFD108. Editat Decembrie 19, 2024 de mihaiaurul Link spre comentariu
sesebe Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 Nu se specifica direct ce diode sint dar asta se poate afla indirect cunoscind tehnologia de fabricatie a IC-ului Iar curentul maxim TREBUIE sa fie specificat in datasheet, trebuie doar sa stii ce si cum sa cauti. Daca nu gasesti da-mi link la datasheetul integratului si ma pot uita eu sau alti colegi. Nu am chef sa caut ce integrat folosesti si apoi sa caut si datasheetul. De obicei curentul este intre 1-5mA, cel mai probabil 1.5mA sau 2 mA. Link spre comentariu
mihaiaurul Postat Decembrie 19, 2024 Partajează Postat Decembrie 19, 2024 12 minutes ago, Blacksmith said: Apoi, nu stiu daca microcontrolerul prezinta o sarcina constanta, care consuma toata energia din condul de filtrare, daca ii tai alimentarea converorului ce il alimenteaza. Si daca da, ce rezistenta are ? Sau daca, se dezactiveaza sub o anumita tensiune si trece in impedanta inalta... iar condul ramane incarcat. Dacă tu pui condensatori de zeci de micro pe acel pin al PI, ai șansa să-l alimentezi pentru o scurtă perioadă (prin dioda de protectie dinspre Vcc) și după ce-i tai alimentarea Pi-ului. 1 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