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

Attiny13A - Timer CTC nie działa, LED nie miga zgodnie z oczekiwaniami

Rikko 13 Wrz 2016 23:25 1653 13
  • #1 15930043
    Rikko
    Poziom 7  
    Witam, poddałem sie i nie wiem dlaczego nie działa mi timer w attiny13a
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    128000Hz/1024=125Hz (z ta czestotliwoscia zlicza timer po zastosowaniu preskalera)

    1/125Hz=0.008s (tyle wynosi 1 cykl timera)

    0.008s * 100 = 800ms (wiec co tyle powinno wystepowac przerwanie wiec i miganie leda)


    Ale led tylko swieci... jakies sugestie?
  • #2 15930133
    ZeeWolf
    Poziom 28  
    Jeżeli podałeś cały kod programu, to brakuje Ci Kolego głównej pętli :P:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 15931276
    Rikko
    Poziom 7  
    No faktycznie brakowało :D
    Ale dodanie petli itak niczego nie zmienia dioda nie miga, petla moze byc pusta bo caly kod moze byc zadelkarowany w funkcji main
  • #4 15931314
    Konto nie istnieje
    Konto nie istnieje  
  • #5 15931368
    michalko12
    Specjalista - Mikrokontrolery
    Rikko napisał:
    Ale dodanie petli itak niczego nie zmienia dioda nie miga, petla moze byc pusta bo caly kod moze byc zadelkarowany w funkcji main

    Dodaj bardziej sensowną pętlę, żeby kompilator nie pozbył się jej w trakcie optymalizacji np. czytaj jakiś rejestr w tej pętli.
  • #6 15931401
    grko
    Poziom 33  
    michalko12 napisał:
    Rikko napisał:
    Ale dodanie petli itak niczego nie zmienia dioda nie miga, petla moze byc pusta bo caly kod moze byc zadelkarowany w funkcji main

    Dodaj bardziej sensowną pętlę, żeby kompilator nie pozbył się jej w trakcie optymalizacji np. czytaj jakiś rejestr w tej pętli.


    Nope. Kompilator nigdy nie zoptymalizuje w ten sposób nieskończonej pętli.
  • #7 15931419
    ZeeWolf
    Poziom 28  
    grko napisał:

    Nope. Kompilator nigdy nie zoptymalizuje w ten sposób nieskończonej pętli.

    Nie jestem pewien czy w Atmel Studio nie mialem kiedys takiego problemu wlasnie z wlaczona optymalizacja (kompilator usuwal petle i program konczyl sie po jednym przebiegu). Glowy jednak nie dam, bo to dawno bylo ;) - ale dla pewnosci mozna wstawic inline asm z instrukcja nop albo przy testowaniu kompilowac bez optymalizacji.
  • #8 15931530
    Konto nie istnieje
    Konto nie istnieje  
  • #9 15931541
    michalko12
    Specjalista - Mikrokontrolery
    No nie usuwa. Przy okazji zauważyłem, że w załączonym kodzie używany jest rejestr TIMSK zamiast TIMSK0. Może tu jest problem.


    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod
  • #10 15931657
    Rikko
    Poziom 7  
    Sorry zle przepisalem na forum, w programie mam normalnie TIMSK0.
    Probowalem bez optymalizacji tez nie działa, az w koncu przestalo mi wykrywac procka w atmel studio moze go jakos zablokowalem ehhh a czlowiek chcial tylko zamigotac dioda wez tu sie nie zniechecij
  • #11 15931695
    grko
    Poziom 33  
    @Piotrus_999 W standardzie C99 jest tylko coś takiego:

    Cytat:

    An iteration statement causes a statement called the loop body to be executed repeatedly until the controlling expression compares equal to 0.


    Nie jest bezpośrednio wskazane, że jest to UB.
  • #13 15931774
    grko
    Poziom 33  
    Cytat:
    W C11 w sumie też UB

    Niby gdzie jest tak napisane? W ostatecznej wersji standardu jest wyraźnie napisane jakie jest zachowanie. Zauważ, że w pdf na który się tu powołujesz paragraf nie jest taki sam jak w standardzie:

    C11
    Cytat:

    An iteration statement whose controlling expression is not a constant expression...


    PDF:
    Cytat:

    An iteration statement that performs no input/output operations...
  • #14 15939501
    Fredy
    Poziom 27  
    Sprawdz, czy na pewno masz taktowanie 128Khz.
    Może masz Internal, ale 4.8, albo 9.6Mhz ?
    Jeżeli masz oscyloskop to sprawdź , czy dioda świeci bo ma napięcie stałe, czy też ma przebieg prostokątny, ale o dużej częstotliwości.
    Jeśli tak, to odczytaj częstotliwośc tego przebiegu i będziesz wiedzieć w czym problem.
REKLAMA