Schemat który podałem wyżej niby działa jak trzeba, ale nadal coś nie pasuje procowi, raz łapie ok, ale jeszcze czasem łapie te iskrzenie - połączyłem równolegle 3 kondy: 100u, 100n, 100p. Jak były wszytkie trzy to proc wogóle nie widział zwarcia, dla 100n+100p zachowywał sie chyba najlepiej, sam 100p nie starczał, proc widział pewnie każdą iskę.
Teraz spróbuję generować jedynie jednorazowe 0 przy zwarciu wg Twojego schematu Czarutek - byłem nie chętny bo całkowicie musze zmienić algorytm, ale no co pozostaje
.
Popatrzmy oczami kondensatora
Na obu okładkach jest 5V, bo jest naładowany przez rezystory. Po zwarciu ma nastapić zero(cały ładunek ucieka z okładki do masy przez styk), więc przyjmę, że stanie się to w tym samym momencie co zwarcie - brak oporu styku - ogólnie bardzo stromy przebieg(nawet nie obchodzi nas ile to bedzie trwało - obchodzi nas tylko okres kiedy potencjał na P1.0 jest poniżej 0,5V). Zaraz po tym, kond zaczyna się ładować się na nowo. Znając przebieg wiemy, że z początku bardzo szybko potencjał rośnie, a dopiero potem zwalnia, my chcemy, aby ten potencjał poniżej 0,5V trwał jakiś dłuższy okres czasu(taki aby proc zdążył zauważyć, że jest 0), więc można przyjąć nawet, że poniżej 0,5V odpowiada 1/100 czasu ładowania sie konda do "pełna" - czyli do 5V. Chcę aby zero trwało:
Kod: Zaznacz cały
cykl = ( 1 / 11059200 ) * 12 = około 1,085 * 10^-6 [sek]
okres zera = cykl * 1000 = około 1,085 * 10^-3 to dajmy 10^-3 sekundy to odpowiada 1000 cyklom. (np. komenda sprawdzająca czy na porcie jest zero "JNB bit , etykieta" trwa 4 cykle[48 taktów] więc proc zdążyłby sprawdzić 250 razy czy zero wystąpiło)
Jeśli zero przy takich założeniach trwa 10^-3 sekundy to kod musi się ładować 10^-3 * 100 = 0,1 sek(z założenia, że potencjał poniżej 0,5V panuje przez 1/100 czasu ładowania się konda). Taki okres spokojnie mieści się w 1 sekundzie(czyli naszym 1Hz - obrocie silnika) więc możemy tak zrobić - żadne iskrzenie nie będzie w stanie zamotać procesora.
Więc jesli nie pomyliłem nic wcześniej kond ma ładować sie przez 0,1 sek. Czas ładowania to t = C * R więc przy C = 100u R musi wynosić 1M. Drugi rezystor to tylko rezystor ładujący drugą okładkę, więc nie ma on wpływu na potencjał portu P1.0, więc dam 10k, tak aby był mały pobór prądu, a kond zdążył się naładować przed ewentualnym zwarciem.
Dla pewności zapytam - nic nie pomyliłem? Będzie ok?