Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 5 sty 2025, o 14:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 26 gru 2024, o 18:07 
Offline
Nowy

Dołączył(a): 26 gru 2024
Posty: 6
Pomógł: 0

Hej,

Pytanie zrodziło się w trakcie kodowania akurat tego procka, ale dotyczy ono de facto współczesnych procków Microchipa. W niniejszym przypadku sytuacja była następująca:
  • zasilanie 5V
  • wewnętrzny poziom odniesienia Vref = 2.5V
  • histereza 50mV
  • przerwania na oba zbocza

Zrobiłem czujnik fotoelektryczny (fotokomórkę) reagującą na przesłonięcie szczeliny. Test praktyczny polegał na tym, że w przerwaniu sprawdzałem stan wyjścia komparatora i na tej podstawie zapalałem lub gasiłem LED. Sprawdzenie stanu było pierwszym poleceniem w przerwaniu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Generalnie to zadziała kilkanaście razy, ale w jakimś momencie potrafi się pogubić. Chodzi o to, że stan wyjścia komparatora potrafi się zmienić zanim nastąpi przerwanie sprawdzające tenże stan. Niby tylko kilka cykli zegara opóźnienia mamy, ale jednak to wystarczy, by pogrzebać ideę.

To samo dotyczy GPIO ustawionych na generowanie przerwań na oba zbocza. Sprawdzanie stanu pinu w przerwaniu, by określić jaka zmiana jego stanu spowodowała to przerwanie, jest niecelowe.

Mam pytania:
1. Czy jest jakiś programowy trik, który pozwoli niezawodnie ustalić przyczynę przerwania?
2. Czy w innych prockach firmy, w tym SAM'ach mamy coś w rodzaju buforowania przyczyny przerwania etc?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2024, o 19:24 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27329
Lokalizacja: Szczecin
Pomógł: 1041

ja akurat na tych prockach nic nie robiłem - ale nawet trudno sobie wyobrazić żeby nie było możliwości ustalenia przerwania ;) zawsze jest jakiś rejestr albo rejestry z flagami przerwań ... inaczej czyli gdyby tego nie było to procki byłyby głupie jak beton ;) Na 100% nie dotarłeś do tej informacji w nocie PDF. Jeśli ktoś używał tego procka to może szybciej podpowie coś konkretnego

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2024, o 22:21 
Offline
Nowy

Dołączył(a): 26 gru 2024
Posty: 6
Pomógł: 0

Wiesz... może być tak, że coś w nocie źle zinterpretowałem.

Z drugiej zaś strony prosty eksperyment, który opisałem jasno dowodzi, że badanie stanu pinu, czy wyjścia komparatora, nie pozwoli na określenie jaka zmiana sygnału H/L czy L/H spowodowała przerwanie. Oczywiście zaczekam na "ochotnika", który objaśni mi problem :D

W międzyczasie, powiedz mi - czy w tych starszych prockach typu ATTiny85, albo pośrednich jak ATMega328, można było bazować na stanie pinu, by określić zbocze, które spowodowało przerwanie? Patrząc na noty, mamy tu podobną sytuację.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2024, o 14:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27329
Lokalizacja: Szczecin
Pomógł: 1041

Po to są komparatory stworzone w prockach i jednym z podstawowych ich zadań jest możliwość generowania przerwania w zależności od ustawionego progu napięcia - są różne konfiguracje zresztą, a twój eksperyment wcale nie dowodzi że procek na to nie pozwala - dowodzi tylko na to, że nie wiesz jak to zrobić i jak się do tego zabrać kompletnie.... A już na bazie tego twojego eksperymentu wystarczyłoby zbadać od razu w przerwaniu stan napięcia na wejściu aby zorientować się czy doszło do zmiany z H/L czy L/H ...

a jakbyś pokusił się i zajrzał do byle noty zwykłego starego avr'a - nawet tego attiny85 o którym wspominasz to znalazłbyś takie coś:

Obrazek

i dalej byś mówił że to niemożliwe? i dalej będziesz twierdził że w nowszych prockach jest to niemożliwe ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2024, o 14:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1165
Lokalizacja: Kraków
Pomógł: 93

Jeśli to taki szybki sygnał, to może przyspiesz taktowanie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2025, o 20:59 
Offline
Nowy

Dołączył(a): 26 gru 2024
Posty: 6
Pomógł: 0

Marhef napisał(a):
Jeśli to taki szybki sygnał, to może przyspiesz taktowanie?


Zawsze jadę na maksymalnym taktowaniu.
Wiesz, nie ma takiego taktowania, które nie załapie się na zmianę sygnału na jakimś pinie w trakcie kolejnych taktów.
Wydaje mi się, że jedynie buforowanie sygnału, który powoduje przerwanie (czyli zamrożenie stanu sygnału do czasu zakończenia obsługi przerwania) dałoby taką gwarancję.

------------------------ [ Dodano po: 50 minutach ]

mirekk36 napisał(a):
... nie wiesz jak to zrobić i jak się do tego zabrać kompletnie....


Gdybym wiedział, to bym nie pisał przecież.

mirekk36 napisał(a):
a jakbyś pokusił się i zajrzał do byle noty zwykłego starego avr'a - nawet tego attiny85 o którym wspominasz to znalazłbyś takie coś:

Obrazek

i dalej byś mówił że to niemożliwe? i dalej będziesz twierdził że w nowszych prockach jest to niemożliwe ?


Hmmm... musisz mi jaśniej opisać co należy zrobić, bo nie nadążam. Powiedzmy, że mam ustawione ACIS0 = ACIS1 = 0, bo analogicznie mam w nowym procku i tak ma być. Chcę reagować na przesłonięcie i odsłonięcie fotokomórki. Czyli przerwanie następuje na zmianę stanu.

Zgodzisz się ze mną, że gdy na wejściu komparatora mam fotokomórkę, to w momencie przesłonięcia jej, na tym komparatorze może zostać wygenerowana seria kilku przerwań (bo przesłona nie jest idealna)? Jeśli nie, to mogę przygotować screenshot z oscyloskopu (sygnał analogowy na wejściu komparatora + zmiany stanu na pinie testowym przy każdym przerwaniu + kolejnym pinie testowym, kopia stanu komparatora odczytana z rejestru). Mam w zasobach ATTiny85 również, więc mogę napisać procedurę testową na niego, choć tu spodziewam się totalnej zadymy, bo komparator nie ma histerezy usuwającej większość zakłóceń sygnału.

Jeśli jednak ufasz powyższemu, to wyjaśnij krok po kroku - jak dokonujesz sprawdzenia stanu komparatora, który spowodował to przerwanie: czy był wysoki, czy niski?

Od razu powiem, że odczyt rejestru stanu komparatora nie jest celowy. Czytanie bitu 5 jak niżej:
Obrazek
jest zawodne, jak pisałem: pokazuje on bieżący stan komparatora (pomijam opóźnienie 2 cykli), a nie stan, który spowodował przerwanie. Często jest on zgony z rzeczywistością, ale nie zawsze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2025, o 16:40 
Offline
Nowy

Dołączył(a): 26 gru 2024
Posty: 6
Pomógł: 0

mirekk36 napisał(a):
A już na bazie tego twojego eksperymentu wystarczyłoby zbadać od razu w przerwaniu stan napięcia na wejściu aby zorientować się czy doszło do zmiany z H/L czy L/H ...


Pominąłem dość istotny komentarz do powyższego - sorki.
Może bardziej wprost powtórzę - badanie stanu pinu, czy stanu komparatora w pierwszej instrukcji przerwania - to już za późno. Zanim przerwanie nastąpi, to poprzedzi je trochę cykli zegara, a wystarczą 1-2 cykle, by pin zmienił swoją odczytywaną wartość, i to właśnie się dzieje. Obserwowałem, że w chwilach, gdy komparator generuje całą serię przerwań, odczyt stanu wyjścia komparatora czasem potrafi być niezmienny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2025, o 19:27 
Offline
Nowy

Dołączył(a): 26 gru 2024
Posty: 6
Pomógł: 0

Temat w zasadzie rozwiązany. Przygotowując procedurę pomiarową komparatora znalazłem przyczynę generowania szybkich przerwań. Trochę się zdziwiłem. Usunę przyczynę, więc nie będzie mi potrzebne dociekanie rozwiązania programistycznego. Oto schemat:

Obrazek

Kolorami zaznaczyłem miejsce wpięcia oscyloskopu.
  • Żółty - wejście w przerwanie komparatora (H) oraz wyjście z niej (L)
  • Niebieski - odczyt stanu komparatora w pierwszej instrukcji przerwania
  • Czerwony - sygnał analogowy na wejściu komparatora
  • Zielony - masa (pomiar zakłóceń)

Kod procedury testowej (przerwania)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Test polegał na tym, że umieściłem w szczelinie czujnika jakiś element, uruchomiłem w oscyloskopie trigger na zbocze narastające sygnału żółtego. Szybkim ruchem wyciągnąłem element.

Otrzymałem następującą obserwację:

Obrazek

Jak widać, zamiast jednego przerwania powstało ich aż 8 następujących zaraz po sobie. Przypomnę, że mam ustawione generowanie przerwań przez komparator na zbocze narastające i opadające. Oczekujemy więc, że każde z przerwań będzie dotyczyło raz stanu wysokiego komparatora, raz niskiego. Na przemian. Tymczasem popatrzcie na sygnał niebieski. To odczyt stanu wyjścia komparatora - cały czas wysoki. Wygląda to tak jakbym raz włożył przesłonę w szczelinę i 8 razy ją wyciągnął.

Niby można ręką machnąć na to i skupić się na ostatnim przerwaniu, lecz tu czyha pułapka. Raz na wiele prób zdarza się, że do tej serii przerwań dochodzi jeszcze jedno, czy dwa, ale z większym opóźnieniem. Czyli mamy żółty grzebyk, przerwę i kolejne przerwanie. Wszystko w ramach tego samego ruchu wyciągania przedmiotu ze szczeliny czujnika. Zdarza się tylko wtedy i nie zawsze, że niebieski będzie w stanie L. Nasz układ zasygnalizuje, iż fotokomórka jest nadal przysłaniana. Nie potrafię obserwacji zinterpretować.

Korzyścią z eksperymentu jest to, że zrozumiałem naturę powstawania przerwań komparatora. Popatrzcie na sygnał czerwony. Narasta on, powiedzmy, liniowo. W środku skali (mam ustawione 2.5V jako napięcie odniesienia), następuje zmiana stanu komparatora i przerwanie z tym związane, ale... widoczne są tam szpilki. Zwróćcie uwagę na to, że pokrywają się one, miej więcej z nadmiarowymi przerwaniami. Pomyślałem więc, że komparator w chwili przełączania pobiera duży prąd, który zakłóca działanie czujnika. Podłączyłem więc 4tą, zieloną sondę oscyloskopu do masy. Wartość peak-to-peak zakłóceń to aż 1V, mimo iż przy procku dałem kondensator 330nF!!! Dodam lepsze filtrowanie i odrębne dla sekcji analogowej.

Test wykonałem z wyłączoną histerezą komparatora, by zasymulować działanie ATTiny85, który czegoś takiego nie posiada. Po włączeniu histerezy 50mV, grzebień rzadko się pojawia i ma góra 2 przerwania.

Te zakłócenia generują nadmiarowe przerwania, jednakże jest jeszcze drugie ich źródło. Przesłona nie odsłania czujnika zero - jedynkowo. Poza czasem ruchu, ma nieidealną krawędź oraz drży. To z kolei, od czasu do czasu, generuje opóźnione przerwanie względem "grzebienia". Wtedy i tylko wtedy, ale nie zawsze, czujnik będzie sygnalizował niewłaściwy stan (odczytany w przerwaniu). By tego uniknąć, dodatkowo w poolingu sprawdzam stan komparatora i koryguję flagę stanu komparatora odczytaną w przerwaniu. Rejestruję w logach taką korektę - zdarza się rzadko. Czasem co 30x, czasem więcej.

Do Mirka: co robię źle? Czego nie rozumiem?

Do reszty: pomocna obserwacja? Potrzebujecie czegoś więcej?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2025, o 22:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27329
Lokalizacja: Szczecin
Pomógł: 1041

User napisał(a):
wprost powtórzę - badanie stanu pinu, czy stanu komparatora w pierwszej instrukcji przerwania - to już za późno. Zanim przerwanie nastąpi, to poprzedzi je trochę cykli zegara, a wystarczą 1-2 cykle,


To może zacznij od samego początku i zamiast najpierw pisać kod (nie mówię tego z żadną ironią czy na złość) ... więc najpierw to zacznij od porządnego przygotowania założeń, poczytaj coś o częstotliwości Nyquista ... Potem zajrzyj do not PDF różnych procków i zacznij od sprawdzenia czy dają takie możliwości dla twojego założenia. Toż nawet badanie asynchroniczne na pinach cyfrowych ma swoje ograniczenia co do częstotliwości sygnałów wejściowych, a ty jeszcze po drodze (o ile w ogóle MUSISZ a tego nie wiadomo) sięgasz po komparator analogowy to wiadomo że warunki będą jeszcze bardziej ograniczone niż to o czym mówi Nyquist. Tymczasem ty niefrasobliwie zabierasz się za eksperymenty kompletnie nie zważając na parametry używanych narzędzi.

Na dodatek ty piszesz o tzw "drganiach styków" tak dla ułatwienia zrozumienia określam tego zwrotu ... gdzie nawet jeśli twoje sygnały zmniejszają się rzadziej to w przypadku tych "drgań" może dochodzić do znacznego zwiększenie częstotliwości sygnałów i ty chcesz wśród nich rozróżniać w sposób asynchroniczny nadal - różnice ...

Niestety to jest bardzo niezdrowe podejście do projektu

Ty lepiej opisz dokładnie co chcesz zrobić, co chcesz uzyskać, jaki jest twój cel a wtedy może łatwiej będzie ci pomóc i podpowiedzieć jaką drogę w ogóle obrać aby to uzyskać i jakich ew narzędzi użyć. Bo inaczej to tylko zabawa w zgadywanki

------------------------ [ Dodano po: 5 minutach ]

Napisałem to zanim przeczytałem ten ostatni post ....

teraz widzę ten twój układ wejściowy, nie wiem czy stosujesz ten konkretny optoizolator czy nie ale gorszą rzeczą wydaje się to dlaczego ty się w ogóle uparłeś na używanie do tego celu komparatora analogowego??? czy ci zależy na badaniu rzeczywiście różnych poziomów napięć ??? jeśli tak to mogłoby być to zrozumiałe ale wtedy wypadałoby raczej użyć na wejściu jakiegoś szybkiego może nawet zewnętrznego ADC może?

Tymczasem w tym twoim schemacie wystarczyłoby badać po prostu przerwania na pinie cyfrowym i reagować właśnie na konkretne pierwsze zbocze i po zawodach ...

Ale jak pisałem w poście wyżej - dokąd nie opiszesz dokładnie co ty chcesz zrobić ogólnie to tak można by tu gdybać przez 5 lat

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: wczoraj, o 18:07 
Offline
Nowy

Dołączył(a): 26 gru 2024
Posty: 6
Pomógł: 0

Odpowiadam nie po kolei - ale wg ważności.

mirekk36 napisał(a):
Ale jak pisałem w poście wyżej - dokąd nie opiszesz dokładnie co ty chcesz zrobić ogólnie to tak można by tu gdybać przez 5 lat


Racja.
Więc robię optyczny czujnik zakresu ruchu wysuwanej szuflady i innych ruchomych części w jakimś tam urządzeniu. Nie wiem ile to m/s, ale ręką pewnie szybciej machniesz. Sygnał jest po I2C słany na płytę główną. Sygnalizowane jest zarówno przysłonięcie, jak i odsłonięcie czujnika,

Schemat, który podałem zawiera dokładnie te, części, na których bazuję, włączając optoelektryczny czujnik szczelinowy. To nie jest optoizolator.

Obrazek

I ubiegając sugestię zastosowania mechanicznych switchy - nigdy więcej tego nie zrobię. :D One działają rok, czy 2, a potem sypią szpilami.

mirekk36 napisał(a):
dlaczego ty się w ogóle uparłeś na używanie do tego celu komparatora analogowego??? czy ci zależy na badaniu rzeczywiście różnych poziomów napięć ??? jeśli tak to mogłoby być to zrozumiałe ale wtedy wypadałoby raczej użyć na wejściu jakiegoś szybkiego może nawet zewnętrznego ADC może?

Tymczasem w tym twoim schemacie wystarczyłoby badać po prostu przerwania na pinie cyfrowym...


No właśnie nie chciałem użyć zwykłego IO z powodów:
  • Nie ma kontroli nad napięciem odniesienia, jak w komparatorze jest
  • Mam wpływ na wielkość histerezy
  • W tym ATTiny1604 wejścia cyfrowe nie mają układu Schmitta, więc nie powinno się pracować na analogowych wartościach

A dlaczego "uparłem" się na komparator? Bo jest i do tego celu właśnie służy! :D Mam jedną kostkę i nic więcej. Nie ma sensu dostawiać dodatkowej elektroniki do tak prostego urządzenia, chyba, że mnie przekonasz.
Komparator działa analogowo (nie bazuje na ADC), więc nie ma żadnych problemów z szybkością próbkowania. Posiada regulowaną histerezę, więc odfiltruję 95% zakłóceń. Tak jak w IO mogę reagować na każde zbocze przerwaniem. Mogę regulować napięcie odniesienia programowo - łatwiej jest wtedy regulować taki czujnik na układzie w razie potrzeby - nie trzeba ingerować w elektronikę.

mirekk36 napisał(a):
... i reagować właśnie na konkretne pierwsze zbocze i po zawodach .


No ale wtedy nie wykryję stanu odsłonięcia czujnika. Potrzebuję mieć informację o obu tych stanach, więc mam ustawioną reakcję na zbocze jedno i drugie.

mirekk36 napisał(a):
poczytaj coś o częstotliwości Nyquista


Możemy swobodnie rozmawiać używając technicznych pojęć. Studiowałem technikę cyfrową. Częstotliwość Nyquista dotyczy minimalnej szybkości samplowania sygnału analogowego, a konkretnie taktowania układu sample and hold przetwornika ADC, po to żeby można było można z takich próbek odtworzyć tenże sygnał analogowy. W praktyce przynajmniej 10-cio krotność się stosuje, ale to temat na luźną pogawędkę. W przypadku komparatora w ATTiny1604 nie ma to zastosowania, gdyż komparator jest analogowy. Buforowane cyfrowo jest jedynie jego wyjście. Ale rozumiem, co masz na myśli i co sugerujesz.

W projekcie wcale nie zakładałem sygnałów szybkozmiennych, które ujawniły się wskutek zakłóceń elektroniki, co poprawię.

Sprawdziłem też czas odpowiedzi komparatora analogowego: 50ns, więc pioruńsko szybki.

mirekk36 napisał(a):
. Potem zajrzyj do not PDF różnych procków i zacznij od sprawdzenia czy dają takie możliwości dla twojego założenia


W zasadzie napisałem tu z nadzieją, że ktoś z grupowiczów zebrał te informacje i podzieli się nimi ze mną. Inaczej bym nie prosił.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: dzisiaj, o 02:30 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27329
Lokalizacja: Szczecin
Pomógł: 1041

O Matko! nie obraź się ale za zapowiedzi i potrzeb jakie opisywałeś to myślałem, że to jakiś mega hyper skomplikowany projekt do badań wysokich częstotliwości :lol: no i tak to właśnie jest jak się od razu nie napisze o co chodzi a wymyśla się sposoby rodem z kosmosu do załatwienia tak prostej sprawy że aż głowa boli - tu nawet określenie że próbujesz strzelać z armato-haubicy do bakterii, nie jest adekwatne, ty tą armatą próbujesz wręcz ustrzelić jądro atomu. Nie piszę tego żeby się z ciebie nabijać broń Boże - ale żeby pokazać ci jak mocno przestrzeliłeś to rozwiązanie.

Po pierwsze skoro wystarczyły by ci nawet mechaniczne switche a przeszkadza ci tylko ich krótka żywotność to już mówi o tym, że strzelasz teraz z tej armaty.

Ale bardzo niepokojące i przedziwne wręcz fantasmagoryczne podejście widzę w tym twoim zdaniu, cytuję:

"
User napisał(a):
Więc robię optyczny czujnik zakresu ruchu wysuwanej szuflady i innych ruchomych części w jakimś tam urządzeniu. Nie wiem ile to m/s, ale ręką pewnie szybciej machniesz


"ręką szybciej machniesz"

no to już kompletna masakra, szczególnie jeśli studiowałeś technikę cyfrową a takich pojęć używasz do założeń projektu. Czy AŻ TAK TRUDNO ci ustalić z jaką częstotliwością albo ile maksymalnie razy na SEKUNDĘ będziesz machał tą szufladą albo innymi częściami w maszynach o których piszesz ???? Przecież to jest właśnie OKREŚLENIE podstawowych założeń, np:

Zmiany w czujniku (przesłonięcie/odsłonięcie) mogą się pojawiać np:

RAZ na sekundę
10 RAZY na sekundę
3 RAZY na godzinę

itp itd bo tak to zdaje się, mniej więcej wygląda, ale jeśli się mylę to mnie popraw.

Można to przyrównać do obsługi zwykłego PRZYCISKU mechanicznego gdzie też występują tzw "drgania styków" i masz do czynienia DOKŁADNIE z tym samym co pokazałeś na swoich oscylogramach.

Pomijam już fakt, że (nie obraź się, że piszesz że piny twojego procka) nie posiadają wejść Schmitta, no herezja - co więcej w ogóle nie ma procków avr bez takiej opcji na wejściach.

Ale ok pal pies już czy są wejścia Schmitta czy nie - to twoje rozbudowane rozważania co do konieczności użycia tu wejść analogowych, komparatorów jakichś Qurczę napięć odniesienia to już rozprawa pseudo naukowa "o obrotach ciał niemieckich" (cytat jednego z polityków) :lol: ....

Człowieku ja rozumiałbym, że pracujesz w NASA i Pentagonie i rozważasz analizę każdej szpilki (przysłowiowego prostego żeby nie powiedzieć prostackiego efektu drgań styków, od czego zwykle zaczyna się naukę programowania mikrokontrolerów w C) ... więc potrzebujesz zliczać te szpilki, analizować ich poziomy kuźwa napięć :) no szaleństwo nad szaleństwami - sorki ale nie można tego inaczej określić.

Już samo dodanie w szeregu do pinu rezystora 100R i pomiędzy nim a pinem procka kondensatora 100nF wyrżnie większość jak nie wszystkie twoje drgania styków w diabły ... to i bez tego programowo się tego pozbywamy, ale czy chociaż RAZ gdzieś w życiu - jeden RAZ czytałeś i ćwiczyłeś jak pozbywać się programowo drgań styków ????

Na twoim oscylogramie widać, że masz podstawę czasu 20us jeśli dobrze widzę więc te szpileczki "drgań styków" są typowe i pojawiają się zarówno w momencie PRZESŁANIANIA czujnika jak i odsłaniania (tak jak przy wciśnięciu przycisku i podczas jego zwolnienia) ....

Po jakiego grzyba ty chcesz reagować na jakąś wybraną szpilkę, zliczać je kuźwa ? ;) no sorki uśmiecham się - ale czy spodziewasz się, że przyjdzie DŻON z MATRIXA i będzie machał szufladą np co 50us ???? albo co 10us????? bo wtedy tak - wtedy zaczęłyby się schody ;) ale ty mówisz o "machnięciu ręką" nawet szybkim - to SZMAT CZASU .... panie, panie

No tu już nie będę opisywał technik programowej eleiminacji drgań styków bo począwszy od Bluebooka, poprzez mojego bloga, weź ty zajrzyj czasem na niego a w tym przypadku chociażby tutaj jeśli nie masz Bluebooka i nigdy w życiu się z tym nie zetknąłeś:

https://mirekk36.blogspot.com/2012/10/o ... w-cd2.html

I jeśli urozmaicisz ten sposób o przerwania na zwykłych pinach cyfrowych ... rozumiesz WEJŚCIACH cyfrowych, to pominiesz te wszystkie szpilki podczas przesłaniania i podczas odsłaniania czujnika w diabły. Przestaniesz też pisać o komparatorach, napięciach odniesienia, bo to bzdura na kółkach w tym temacie .... NO! chyba że źle zrozumiałem i jednak to szybsze machanie ręką (szufladą/elementem maszyny) będzie występowało szybciej niż co 50us .... ale w takim przypadku to jeszcze większą bzdurą jest tu mowa o komparatorach i wejściach analogowych - chyba że jednak tworzysz projekt do obsługi zaawansowanego łazika marsjańskiego i jakiejś iście skomplikowanej aparatury - ale wtedy opisz to dokładniej.

No i na koniec ostatnia masakra jaką sam sobie robisz czyli podciąganie PULL_DOWN 1K rezystor R1 od emitera .... totalny nonsens - tzn wiem być może zrobiłeś ten nonsens właśnie żeby reagować lepiej na zmieniające się napięcie (bez sensu dla całego rozwiązania) ale użyj że tego optoczujnika żeby na wyjściu działał jako zwykły klucz ZERO/JEDYNKOWO czyli wywal ten koci R1, daj podciąganie w kolektorze rezystorkiem 2,2k i sygnał z kolektora podaj do procka, już samo to spowoduje dużo lepsze dopasowanie cyfrowe układu .... czyli tak jak się należy w tego typu rozwiązaniach stosować .... i proszę zapomnij o tych analogowych swoich wynalazkach z komparatorami.

ZASTOSUJ to co opisałem szeroko i będziesz zdziwiony jak ci to zacznie ładnie działać

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO