Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

atmega8, bascom -problem z timer0

adams40 29 Jun 2007 00:45 1862 6
  • #1
    adams40
    Level 11  
    witam! mam taki problem: chcę zliczać zewnętrzne impulsy, timer mam skonfigurowany w taki sposób:
    config Timer0 = counter, edge = falling, noice cancel = 1,
    na portd.4 mam ustawiny wewnętrzny pull-up i dodatkowo zewnętrzny rezystor podciągający 4,7k.do masy kondensatorek 100 nF. Licznik oczywiście mi liczy ale zlicza też przypadkowe impulsy. widać to na wyswietlaczu LCD kiedy wskazania nie zmieniają się po kolei tylko nastepuje np. przeskok z wartości 7 do 9. Pod wejście sygnału podpiąłem fabryczny licznik tablicowy i ten liczy dobrze. Czy ktoś pomoże mi rozwiązać ten problem?...
  • #2
    Dr_DEAD
    Level 28  
    Wszystko zależy od tego co jest źródłem impulsów. Jeżeli przycisk, to może to być efekt odbijania sie styków. Jeżeli to sygnał z innego urządzenia to może jego wydajność prądowa jest mała i zbocze zbyt wolno opada. A jeżeli sygnał jest dostarczany przez dodatkową rezystancję to może podciągający rezystor jest za mały.
  • #3
    adams40
    Level 11  
    Dr_dead....źródłem impulsów są kontaktrony, albo poprawniej zwarcie styku kontaktronu powoduje powstanie impulsu. Sprawdzę oczywiście wydajność żródła zasilania ale nie sądzę aby tu była przyczyna problemu.
    Raczej liczone sa jakieś"śmieci" z drgającego styku....i moje pytanie raczej skierowane było w tym kierunku. Zastosowałem parametr , przy konfiguracji licznika NOISE CANCEL = 1 ale nie widzę poprawy. Co jeszcze mogę zrobić??....mam na myśli rozwiązanie programowe.
    Pozdrawiam adams40
  • #4
    owurac
    Level 15  
    Noise canceller raczej nie pomoże. Można zbudować jakiś prosty filtr RC, albo filtr programowy, ale wtedy i zliczanie musi być programowe.

    Swoją drogą, po co wewnętrzny pull-up, jeśli masz zewnętrzny pull-down?
  • #5
    adams40
    Level 11  
    Witam ponownie....Najpierw ustawiłem wewn etrznego pull-up -a, a dopiero później bawiąc się układem i nie mogąc znaleźć przyczyny dałem zewnętrzny. Rozumiem, że programowe rozwiązanie eliminuje zastosowanie timer0 ??....z różnymi filtrami RC już się bawiłem. Najbardziej denerwuje mnie to, że nie mam do czynienia z dużymi częstotliwościami ....a nie mogę tego bez błędów policzyć:(
    Gdybyście zechcieli podesłać jakieś gotowe rozwiązanie programowe byłbym wdzięczny.

    Dodano po 2 [minuty]:

    owurac.....nie napisałem , ze mam zewnętrznego pull-down -a:)
  • #6
    owurac
    Level 15  
    Przepraszam, z tym pull-down źle zinterpretowałem. Jeśli chodzi o zewnętrzny filtr to chyba najłatwiej by było wziąć oscyloskop i zobaczyć ile czasu trwają drgania i na tej podstawie dobrać stałą czasową filtra.
    Co do programowego filtrowania to mogło by się sprawdzić podpięcie przycisku pod przerwanie zewnętrzne wyzwalane zboczem o ile się nie mylę w tym przypadku opadającym. W przerwaniu można poczekać kilka - kilkadziesiąt ms i jeśli stan pinu nadal jest niski to dopiero zwiększyć o jeden stan zmiennej licznikowej. To chyba najprostsze.
  • #7
    adams40
    Level 11  
    witam ponownie....chyba tak zrobię jak podpowiada mi owurac - dzięki za zainteresowanie. Co do oscyloskopu to niestety nie dysponuję na tyle dobrym abym cokolwiek dojrzał. Mam starego analoga (made in CCCP)do 10 Mhz, więc krótkie szpilki pięknie całkuje i ich nie widać :).Pobawię się z przerwaniem i w przerwaniu dam jakiś dyskryminator czasowy. Dam znać o ofektach jutro wieczorkiem.
    Pozdrawiam -adams40.