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

Arduino Pro Mini - timer1 CTC, przerwanie co sekundę

lekto 12 Cze 2015 18:40 1998 13
REKLAMA
  • #1 14766024
    lekto
    Poziom 35  
    Posty: 2716
    Pomógł: 294
    Ocena: 299
    Męczę się od kilku godzin nad uruchomieniem timera1, ma on za zadanie migać diodą led (0.5Hz). Arduino jest zamontowane na płytce stykowej, zasilane i programowane z USBasp, do pinu 9 jest podłączona dioda led i rezystor.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14766180
    Konto nie istnieje
    Poziom 1  
  • #3 14766203
    lekto
    Poziom 35  
    Posty: 2716
    Pomógł: 294
    Ocena: 299
    Wiem o tym, mi chodzi to że muszę odczytać temperaturę z DS18B20 i wyświetlić ją na stronie, chce się tym odczytem zająć co kilka sekund w przerwaniu żeby nie tracić czasu podczas wysyłania strony.
  • REKLAMA
  • Pomocny post
    #4 14766256
    namok
    Poziom 25  
    Posty: 529
    Pomógł: 91
    Ocena: 74
    Ten odczyt musi być dokładnie co kilka sekund? Nie wystarczy do tego millis()?
  • #5 14766308
    lekto
    Poziom 35  
    Posty: 2716
    Pomógł: 294
    Ocena: 299
    W sumie to by mogło być, ale dalej mnie zastanawia dlaczego nie mogę uruchomić tego timera.
  • Pomocny post
    #6 14766360
    namok
    Poziom 25  
    Posty: 529
    Pomógł: 91
    Ocena: 74
    Timer1 jest używany jako pwm. Sprawdź czy bez wywoływania pwm dla tego timera jest on wstępnie skonfigurowany - odczytaj po prostu jego rejestry.
  • REKLAMA
  • #9 14766676
    lekto
    Poziom 35  
    Posty: 2716
    Pomógł: 294
    Ocena: 299
    Na to wychodzi, funkcja millis() podaje czas od uruchomienia arduino i liczy ją za pomocą timera0.
  • #10 14766725
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Czyli pisząc programy w tym środowisku i nie znając go dogłębnie, wykorzystując bezpośrednie ustawianie rejestrów należy brać pod uwagę, że bity mogą nie mieć wartości domyślnych po resecie.
  • REKLAMA
  • #11 14766801
    Konto nie istnieje
    Poziom 1  
  • #12 14766825
    lekto
    Poziom 35  
    Posty: 2716
    Pomógł: 294
    Ocena: 299
    Nie potrafiłem uruchomić przerwania a moim projekcie, dlatego stworzyłem nowy projekt który miał tylko migać diodą za pomocą tego przerwania, żeby nie bawić się z plikiem >100 linii i też nie chciało to działać, dlatego spytałem o ten projekt z diodą. Na odpowiedzią na pytanie dlaczego to nie działa była podpowiedź żeby sprawdzić jak jest ustawiony timer1 po restarcie i okazało się że Arduino ustawia timer1 w tryb PWM, Phase Correct 8-bit. Nie wiedziałem o tym i chcąc go przestawić w CTC przestawiałem go niechcący w tryb Fast PWM 8-bit.
  • #13 14767082
    namok
    Poziom 25  
    Posty: 529
    Pomógł: 91
    Ocena: 74
    Generalnie z timerem1 cośtam się zrobić da, nawet na przerwaniach. Trzeba tylko ściągnąć odpowiednią biblitekę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W przykładzie dioda miga co 0,15s ale czas można zmienić.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zmagał się z konfiguracją timera1 w Arduino Pro Mini, aby uzyskać miganie diodą LED z częstotliwością 0.5Hz. W odpowiedziach omówiono tryb CTC oraz konieczność ustawienia rejestrów TCCR1A i TCCR1B, aby timer działał poprawnie. Ustalono, że Arduino domyślnie ustawia timer1 w tryb PWM, co uniemożliwia działanie w trybie CTC bez odpowiednich modyfikacji. Zasugerowano również użycie biblioteki TimerOne do łatwiejszej obsługi przerwań. Użytkownik odkrył, że jego wcześniejsze próby były nieudane z powodu nieprawidłowej konfiguracji timera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA