logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom problem ze zliczaniem impulsów z zewnątrz.

mrslawcio 30 Lis 2009 11:23 3222 12
REKLAMA
  • #1 7326874
    mrslawcio
    Poziom 12  
    Witam

    Mam problem ze zliczaniem impulsów z zewnątrz za pomocą timer0. Czy mógłby ktoś sprawdzić czy poniższy kod jest ok. Sygnał podaję na pinb.0, port jest podciągnięty za pośrednictwem rezystora 10k do 5V


    $regfile = "M16def.DAT"
    $crystal = 8000000
    $baud = 57600

    Dim Czestotliwosc As Byte
    Config Timer0 = Counter , Edge = Rising

    Enable Interrupts
    Enable Timer0

    Do

    Start Timer0
    Wait 1
    Stop Timer0
    Czestotliwosc = Counter0
    Print "Freq: " ; Czestotliwosc

    Loop
  • REKLAMA
  • REKLAMA
  • #3 7327210
    mrslawcio
    Poziom 12  
    Zliczam ilość impulsów z przycisku podłączonego do masy. Dokładność sobie później poprawię, na początek nic mi nie zlicza i nie wiem w czym jest problem.

    Pozdrawiam
    Sławek
  • REKLAMA
  • #4 7327490
    arnoldziq
    VIP Zasłużony dla elektroda
    Jeżeli sprawdzasz przycisk podłączony do masy, to czemu przerwanie Timer ma być wyzwalane zboczem rosnącym ?
    Config Timer0 = Counter , Edge = Rising 
  • #6 7327568
    mrslawcio
    Poziom 12  
    I tylko timer1 ma możliwości zliczania impulsów z zewnątrz?
  • #7 7327588
    arnoldziq
    VIP Zasłużony dla elektroda
    Możesz użyć Timer0, ale przy zboczu rosnącym, to możesz liczyć tylko zwalnianie przycisku podłączonego do masy a nie jego naciśnięcia. Jeden warunek : Timer0 musi mieć wejście podpięte przez rezystor do zasilania układu, aby jakiekolwiek zbocze rosnące tam wystąpiło.
  • REKLAMA
  • #8 7327623
    mrslawcio
    Poziom 12  
    Reasumując.
    Sygnał mam podać na pind.6 i podciągnąć go do 5V?
  • #9 7327657
    arnoldziq
    VIP Zasłużony dla elektroda
    Nie zapomnij o rezystorze, bo inaczej przycisk będzie robił zwarcie na zasilaniu. 10k będzie w sam raz.
  • #10 7330875
    mrslawcio
    Poziom 12  
    Witam

    Poprawiłem wejście na portd.6 i nic nie pomogło. Wydaje mi się że jest problem z programem. Dopisałem jeszcze dwie linie aby sprawdzić czy przycisk działa - przycisk jest ok.

    $regfile = "M16def.DAT"
    $crystal = 8000000
    $baud = 57600

    Dim Czestotliwosc As Byte
    Config Timer0 = Counter , Edge = Rising

    Print "Licznik"
    Ddrd.6 = 0
    Print Pind.6

    Enable Interrupts
    Enable Timer0

    Do

    Start Timer0
    Wait 1
    Stop Timer0
    Czestotliwosc = Counter0
    Print "Freq: " ; Czestotliwosc

    Loop
  • #11 7331207
    xury
    Specjalista automatyka domowa
    Na spokojnie jeszcze raz poczytaj Helpa i notę Atmega16. Wejście Icp jest wejściem Timera1 a nie Timera0. Myślę też że do tego co ty chcesz zrobić można by się obyć bez Timera tylko na wejściu INTx zliczać zbocza, a potem w pętli analizować te dane.
  • #12 7331298
    mrslawcio
    Poziom 12  
    $regfile = "M16def.DAT"
    $crystal = 8000000
    $baud = 57600

    Dim Czestotliwosc As Long
    Config Timer1 = Counter , Edge = Rising

    Print "Licznik"

    Enable Interrupts
    Enable Timer1

    Do

    Start Timer1
    Wait 1
    Stop Timer1
    Czestotliwosc = Counter1
    Print "Freq: " ; Czestotliwosc
    Counter1 = 0

    Loop

    Sygnał podaję na portb.1 i wszystko śmiga.
    Nie wiem tylko dlaczego nie działa to na timer0.
    Jeszcze się pobawię.
    W nocie katalogowej Atmega16 jest informacja, że źródłem zewnętrznych impulsów timer0=portb.0 timer1=portb.1. Przedstawia to poniższy schemat.

    Bascom problem ze zliczaniem impulsów z zewnątrz.

    Poniższy kod przedstawia użycie timer0 jako licznika sygnałów zewnętrznych (przykład z Helpa bascoma)

    Config Timer0 = Counter , Edge = Rising

    Do
    Print Tcnt0
    Loop Until Tcnt0 >= 10


    Wydaje mi się, że jest jakiś problem z Bascomem przy użyciu timer0 jako licznika.
    Prośba o info czy komuś udało się uruchomić timer0 jako counter sygnałów zewnętrznych.

    Pozdrawiam
    Sławek
  • #13 7421558
    mrslawcio
    Poziom 12  
    Witam

    Problem rozwiązany.
    $regfile = "M16def.DAT"
    $crystal = 8000000
    $baud = 57600

    Dim Czestotliwosc As Long
    Config Timer0 = Counter , Edge = Rising


    Tccr0 = 7

    Print "Licznik"
    Ddrb.0 = 0
    Print Pinb.0

    Enable Interrupts
    Enable Timer0

    Do

    Start Timer0
    Tccr0 = 7
    Wait 1
    Stop Timer0
    Czestotliwosc = Counter0
    Print "Freq: " ; Czestotliwosc
    Print Tccr0
    Counter0 = 0

    Loop

    Okazało się, że problem jest jak wcześniej pisałem z bascomem. Podczas wykonania instrukcji Start Timer0 zerowany jest rejestr TCCR0
    W rejestrze TCCR0 ustawia się tryb pracy timera0. Do zliczania impulsów zewnętrznych należy do TCCR0 wpisać 7 lub 6.

    Temat można uznać za zamknięty.

    Pozdrawiam
    Sławek
REKLAMA