Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Bascom AVR] zliczanie stanu wysokiego na porcie

komor34 15 Lip 2012 17:30 1766 8
  • #1 15 Lip 2012 17:30
    komor34
    Poziom 12  

    Witam!
    Próbuję zrobić prosty programik w BASCOMIE AVR na ATmega8, który będzie mi zliczał stan wysoki na porcie b.1 i prezentował na wyświetlaczu LCD.Udało mi się już napisać taki kod:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Wszystko jest OK dobrze liczy tylko jak zacznę szybciej dawac na port stan wysoki to licznik stoi ja wolno do dobrze liczy. Gdzie popełniłem błąd?
    Pozdrawiam.

    0 8
  • #2 16 Lip 2012 10:23
    zielony_gajowy
    Poziom 13  

    Instrukcję CLS użyj przed wejściem w pętlę DO ... LOOP.
    W pętli zamiast polecenia CLS użyj polecenia LOCATE 1,1.

    Pozdrawiam

    0
  • #3 16 Lip 2012 11:32
    Press
    Poziom 22  

    a szybko i wolno to znaczy z jaka częstotliwością?
    Może zamiast polecenia bitwait zrób:

    do

    loop until pinb.1 = 1

    cls nie powinien tu być problemem.

    A najlepiej sygnał taktujący zliczaniem podaj na pin INT0 lub INT1 i ustaw przerwanie żeby reagowało na zbocze. Wtedy inkrementacje zrobisz w przerwaniu a w pętli głównej tylko wyświetlisz wynik.

    Na marginesie zamiast Count = Count + 1 bardziej elegancko i czytelnie jest wpisać incr Count

    0
  • #4 16 Lip 2012 17:42
    zielony_gajowy
    Poziom 13  

    Press napisał:
    cls nie powinien tu być problemem.

    A przed wygłoszeniem opinii zapytałeś o częstotliwość sygnałów?
    Instrukcja CLS może zajmować np. 300ms. Czy 4 impulsy na sekundę to jest coś co przekracza możliwości AVR?

    Cytat:
    A najlepiej sygnał taktujący zliczaniem podaj na pin INT0 lub INT1 i ustaw przerwanie żeby reagowało na zbocze.
    Bardzo dobre rozwiązanie, pod warunkiem, że doda się procedurę "gasikową". Może sygnał przychodzi zjakiegoś scalaka i ma strome zbocze, a może przychodzi z "skośnego" przycisku i ma 379 zboczy. ;)
    Cytat:
    Wtedy inkrementacje zrobisz w przerwaniu a w pętli głównej tylko wyświetlisz wynik.
    pod warunkiem, iż częstotliwość przerwań (interwał) będzie mniejsza od czasu trwania przerwania. Niestety, dalej nie znamy maksymalnej częstotliwości występowania impulsów.

    Na marginesie zamiast Count = Count + 1 bardziej elegancko i czytelnie jest wpisać incr Count.

    0
  • #5 17 Lip 2012 16:17
    komor34
    Poziom 12  

    zielony_gajowy próbowałem zrobić jak mówiłeś, ale nadal to samo.

    0
  • #6 18 Lip 2012 09:00
    zielony_gajowy
    Poziom 13  

    To nie pozostaje nic innego, jak zrobić w/g wskazówek

    Press napisał:
    najlepiej sygnał taktujący zliczaniem podaj na pin INT0 lub INT1 i ustaw przerwanie żeby reagowało na zbocze. Wtedy inkrementacje zrobisz w przerwaniu a w pętli głównej tylko wyświetlisz wynik.
    .
    Tylko jaka jest maksymalna częstotliwość?
    Bo, może się okazać, iż przerwanie trzeba będzie napisać w asm.

    0
  • #7 18 Lip 2012 11:29
    komor34
    Poziom 12  

    Witam.
    Wolno czyli tak około jednego dotknięcia na sekundę, a jak już szybciej dotykam to licznik stoi a jak zrobię to na porcie d2 to wtedy po jednym dotknięciu wyskakują duże liczby np: 100. Program będzie musiał złapać około 50 impulsów na sekundę.
    Pozdrawiam.

    0
  • #8 18 Lip 2012 14:41
    zielony_gajowy
    Poziom 13  

    No to sprawdź ten kod


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Na symulatorze działa. Ja osobiście używam innych metod. Ale prawie zawsze do nowej sytuacji muszę "wymyślać" inne podprogramy i wspierać się innymi układami sprzętowymi (kondensatory, oporniki, specjalizowane u.s.)

    0
  • #9 02 Lis 2012 10:08
    komor34
    Poziom 12  

    Dziękuję za pomoc już doszedłem jak to zrobić.

    0