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.

Mikrokontroler '51 - migająca LED z f=2Hz, licznik T2

pan smuga 10 Sty 2015 02:41 564 4
  • #1 10 Sty 2015 02:41
    pan smuga
    Poziom 3  

    Witam. Otóż mam taki problem: muszę zrobić diodę migająca z częstotliwością 2Hz. Częstotliwość kwarcu jest 12 MHz, z czego wynika, że impuls jest co 1?s. A więc dioda powinna się zapalać i gasić co 500 000 impulsów. Próbowałem rozwiązać to w taki sposób, że ustawiłem licznik T2 w trybie autoreload, a ponadto wpisałem:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    A w kontrolerze przerwania:
    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Jednakże licznik ma dużo mniejszą częstotliwość niż założone 2Hz. Dioda miga co kilka(naście) sekund. Gdzie popełniłem błąd?

    0 4
  • Pomocny post
    #2 10 Sty 2015 07:48
    Badmaneq
    Poziom 23  

    Timer T2 nie ma rejestru 16 b sklada sie z dwoch rejestrow 8 b. TH2 starsze 8 b licznika i TL2 mlodsz 8 b licznika. Jesli chcesz wpisac wartosc 156D to wpisujesz 15 do TH2, a do TL2 wartosc 6D. Kolejna rzecz dotyczaca trybu przeladowania wartosc przeladowania dla T2 wpisujesz do rejestrow RLDH i RLDL.

    0
  • Pomocny post
    #3 10 Sty 2015 08:58
    BlueDraco
    Specjalista - Mikrokontrolery

    Timer w klasycznym 51 liczy z częstotliwością 12 x mniejszą od częstotliwości kwarcu, czyli w tym przypadku 1 MHz
    Ustaw timer tak, żeby zgłaszał przerwania z jakąś "okrągłą" częstotliwością, np. 100 Hz (ładujesz do timera 10000). W procedurze obsługi przerwania odliczasz i co 25 przerwań zmieniasz stan diody na przeciwny.

    0
  • #4 10 Sty 2015 11:29
    kemot55
    Poziom 30  

    Napisz jaki masz procesor (bo są teraz wynalazki z rdzeniem '51 działające szybciej niż pierwowzór) i czym kompilujesz kod. Poza tym załącz cały program (teraz brakuje konfiguracji rejestrów).
    A korzystasz z jakiegoś symulatora?

    0
  • #5 10 Sty 2015 11:41
    pan smuga
    Poziom 3  

    Dzięki za pomoc. Teraz już widzę błąd w moim toku rozumowania.

    0