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



Teraz jest 24 kwi 2024, o 01:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 19 sty 2021, o 18:57 
Offline
Użytkownik

Dołączył(a): 18 lis 2020
Posty: 31
Pomógł: 0

Witam Was,

Mam takie zagadnienie, którego doświadczyłem i które chciałbym jakoś rozwiązać. MCU ma kilka pinów, które mogą spowodować jedno, konkretne przerwanie (wejścia PCINTxx). Celem jest ustalenie, który z tych pinów jest sprawcą. Kłopot polega na tym, że impuls wywołujący przerwanie może być trochę krótszy niż 20 cykli zegara. Sprawdziłem, że 20 cykli zegara zajmuje odpalenie procedury przerwania, więc dla krótkich pobudzeń, odczyt stanu pinów nie jest celowy. W tak krótkim / długim czasie mogą one zmienić swój stan. Bazowanie na tej metodzie da fałszywy odczyt co do ustalenia źródła zdarzenia.

Jak sobie radzicie w takich przypadkach? Jedyne co mi do głowy przychodzi, to generator monostabilny na wejściu procka, przedłużający czas trwania impulsu. Wtedy będzie sens analizować stan pinów. Czy można prościej?

P.S.
Dokładnie to pytanie skierowałem do Kardasia. Wyśmiał mnie. Przesłał całą litanię głupich tekstów. Dodał, że za fałszywy odczyt mogę trafić do więzienia i oświadczył iż będzie ignorował moje maile. Czy też macie podobne z nim doświadczenia?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2021, o 19:54 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Nie wchodząc w szczegóły i bez żadnej analizy to chyba da się jednak szybciej zareagować/obsłużyć na wystąpienie przerwania. Po drugie zawsze możesz użyć szybszego zegara lub zewnętrznego portu i/o.

Na temat P.S. się nie ustosunkuję bo to jakieś szaleństwa z palca wyssane (lub kompletne niezrozumienie/nadinterpretacja) - ja osobiście (jak i wielu innych) nigdy nie miałem żadnych problemów z Mirkiem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2021, o 20:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2015
Posty: 183
Pomógł: 10

MarekSz napisał(a):
Celem jest ustalenie, który z tych pinów jest sprawcą. Kłopot polega na tym, że impuls wywołujący przerwanie może być trochę krótszy niż 20 cykli zegara. Sprawdziłem, że 20 cykli zegara zajmuje odpalenie procedury przerwania


Gdy na pinie obsługującym zewnętrzne przerwanie pojawi się odpowiedni stan, zostanie natychmiast ustawiona odpowiednia flaga. Poczym mikrkontroler przejdzie do opsługi procedury przerwania. Samo ustawienie flagi odbywa się niemal natychmiast. Przejście do obsługi procedury przerwania może zajać kilka cykli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2021, o 20:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2019
Posty: 147
Pomógł: 37

PCINTy są zebrane w trzech grupach, jak w każdej ustawisz przerwanie na tyko jednym pinie to masz identyfikację bez dodatkowych sprawdzeń. Jak dorzucisz do puli INT0 i INT1 to masz do dyspozycji 5 pinów. Inaczej się chyba nie da.
Na STM32 też nie jest słodko, piny o tym samym numerze są podpięte do jednego przerwania (tyle że jest ich 16 :).

_________________
Think for yourself and question authority.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2021, o 21:38 
Offline
Użytkownik

Dołączył(a): 18 lis 2020
Posty: 31
Pomógł: 0

micky napisał(a):
Nie wchodząc w szczegóły i bez żadnej analizy to chyba da się jednak szybciej zareagować/obsłużyć na wystąpienie przerwania. Po drugie zawsze możesz użyć szybszego zegara lub zewnętrznego portu i/o.


Oczywiście mając komfortową sytuację, gdzie możemy pozwolić sobie na wykorzystanie tylko 3 linii przerwań, powiedzmy INT0..2, to problem znika. Ja mam na myśli wyłącznie sytuację, gdzie operujemy na np. 4+ liniach, np. PCINT0..7. Czyli powiedzmy "multiplikatorze" źródeł jednego przerwania. Szybszy procek jest też rozwiązaniem, ale tu i tak bieda, bo na 20MHz jest (chyba) koniec zakresu w 8-bitowcach. Reasumując... chyba bez rozwiązań sprzętowych raczej się nie obędzie. Prawda?

micky napisał(a):
Na temat P.S. się nie ustosunkuję bo to jakieś szaleństwa z palca wyssane (lub kompletne niezrozumienie/nadinterpretacja) - ja osobiście (jak i wielu innych) nigdy nie miałem żadnych problemów z Mirkiem.


Mam nadzieję, ze to jakieś totalne nieporozumienie było. Tak czy owak zostałem "spalony".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2021, o 00:09 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

a co to za układ daje Ci takie krótkie impulsy?

chyba prockiem już tego nie przeskoczysz - możesz dać układ z rodziny 7474 - są to przerzutniki D z nazwy, ale w środku zobaczysz, że to RS i zatrzaśnie Ci taki impuls.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2021, o 08:19 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1080
Pomógł: 73

MarekSz napisał(a):
Witam Was,

Mam takie zagadnienie, którego doświadczyłem i które chciałbym jakoś rozwiązać. MCU ma kilka pinów, które mogą spowodować jedno, konkretne przerwanie (wejścia PCINTxx). Celem jest ustalenie, który z tych pinów jest sprawcą. Kłopot polega na tym, że impuls wywołujący przerwanie może być trochę krótszy niż 20 cykli zegara. Sprawdziłem, że 20 cykli zegara zajmuje odpalenie procedury przerwania, więc dla krótkich pobudzeń, odczyt stanu pinów nie jest celowy. W tak krótkim / długim czasie mogą one zmienić swój stan. Bazowanie na tej metodzie da fałszywy odczyt co do ustalenia źródła zdarzenia.


Jak często będą pojawiały się przerwania? Nie możesz użyć przerwań INTx zamiast PCINT? Reagujesz na zbocze przerwania INTx i od razu widać na którym pinie się pojawiło. Zamiast komplikować sprzęt użyj atmegi128, tam jest chyba 8 przerwań INTx



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2021, o 12:20 
Offline
Użytkownik

Dołączył(a): 18 lis 2020
Posty: 31
Pomógł: 0

landrynek napisał(a):
a co to za układ daje Ci takie krótkie impulsy?

chyba prockiem już tego nie przeskoczysz - możesz dać układ z rodziny 7474 - są to przerzutniki D z nazwy, ale w środku zobaczysz, że to RS i zatrzaśnie Ci taki impuls.


Jest to układ mechaniczny, który ma zdarte krańcówki. Ale nie fiksuj się na tym aspekcie. Pytanie zadałem pod pretekstem tego, co zaszło, a celem jest przede wszystkim samoedukacja :-)

Właśnie tak kombinuję, aby w tę stronę pójść, co opisałeś. Choć początkowo, aby się nie bawić w konieczność kasowania zapalonych bitów, myślałem o monowibratorze. Gdzieś kiedyś widziałem scalak - debouncer wielokanałowy do obsługi m.in. przycisków. Nie mogę tego odszukać w Google. Chyba na takiej zasadzie on działał. Widziałeś coś takiego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2021, o 19:42 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

MAX811/MAX812 - na jeden kanał chociaż ic do czegoś innego, może coś typu SN74LVC1G123?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2021, o 20:38 
Offline
Użytkownik

Dołączył(a): 18 lis 2020
Posty: 31
Pomógł: 0

landrynek napisał(a):
MAX811/MAX812 - na jeden kanał chociaż ic do czegoś innego, może coś typu SN74LVC1G123?


I to jest dobry kierunek. Idąc tym tropem znalazłem to cudo: SN54/74LS374. Jest to zatrzask na zbocze narastające. Wystarczy taktować wejście zegarowe częstotliwością < 1/20 tego co CPU i sprawa załatwiona. Wtedy zyskamy szansę na odczytanie pinu powodującego przerwanie. A wersja HC może pracować z dowolnym napięciem od 2 do 6v



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: 10 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO