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.

Układ generujacy impulsy na '51

baksio 18 Gru 2004 02:14 1149 5
  • #1 18 Gru 2004 02:14
    baksio
    Poziom 1  

    Witam potrzebuje pomocy ponieważ musze wykonać mikroprocesorowy układ generujący impulsy o regulowanym czasie trwania od 1ms do 100ms z rozdzielczością 0.01ms. Jest to wykonywane na '51 i chce do tego wykorzystać timer T0 tylko potrzebowałbym jakiś pomysł na rozwiazanie układu blokowego potrzebnego do napisania algorytmu programu. Dodatkowo mogły by być jakieś ciekawe linki o tej tematyce. Dzięki:)

    0 5
  • Pomocny post
    #2 18 Gru 2004 09:33
    frohme
    Poziom 21  

    Można by tak: zegar 12 MHz i wtedy cykl maszyny trwa 1 us, timer T0 ustawiasz w tryb 2 (autoreload) wpisując do jego rejestrów TH0 i TL0 wartości takie by przerwanie od niego było co 10us (problem kroku załatwiony). Tworzysz licznik programowy w którym będziesz odliczał potrzebną ilość wcześniej ustalonych przerwań. Po przekręceniu licznika reakcja na wyjściach w sensie wytwarzanie impulsu. Dalsza modyfikacja - dwa liczniki, jeden dla stanu HI drugi dla LOW i masz powtarzalne impulsy o regulowanym wypełnieniu.
    Tutaj fragment kodu dla ustawienia timera T0

    init_timer0:
    anl TMOD, #0F0H ;zeruj Timer 0
    orl TMOD, #02h ;
    mov TL0, #00h ;wartość ustawiana przez użytkownika
    mov TH0, #00h ;j.w.
    setb IE.1 ;będzie generowane przerwanie
    setb TR0 ;TCON.4 start timer
    ret
    gdzieś w programie głównym musi być:

    call init_timer0

    i obsługa przerwania

    0
  • Pomocny post
    #3 18 Gru 2004 10:57
    Dexter77
    Poziom 28  

    Tylko ze sam czas wejscia do przerwania w najgorszym przypadku moze trwac 9 cykli czyli w tym przypadku 9 us. Jak sobie wyobrazasz ze procesor zrobi cos wiecej oprocz wchodzenia i wychodzenia z przerwania ?? Trzeba wczesniej wyliczac wartosci potrzebne do wpisania w licznik i generowac tylko jedne przerwanie zmieniajace stan nozki na przeciwny. Trzeba tez uwzglednic typowa zwloke uC na wejscie do przerwania ktora typowo wynosi 4 cykle. Dla kroku 10us dawaloby to blad 40% ;)
    Pozdro
    Dexter

    0
  • Pomocny post
    #4 21 Gru 2004 11:34
    frohme
    Poziom 21  

    Fakt - przy takim zegarze i takim ziarnie czasu trochę go brakuje. Jeszcze wszystko raz przemyślę i może jakaś koncepcja sie wykluje.

    0
  • Pomocny post
    #5 23 Gru 2004 10:34
    aristot
    Poziom 14  

    mam podobny programik tylko napisz mi na majla aristot(malpa)poczta.onet.pl to ci prześle mam pytanie tylko czym chcesz zmieniać szerokość impulsów ja mam to zorganizowane za pomocą klawiszy tzn jeden klawisz zwiększa o krok w góre a drugi o krok w dół
    wartości do załadowania licznika sąwczesniej policzone w excelu i zapamietane w tablicach w programie przez co odpuszczamy sobie zmudne obliczenia procesora szczególnie jesli chodzi o liczby większe od 256 w trakcie działania programu odpowiednie pozycje tablicy są odczytywane i zapamietywane w rejestrach w momencie wywołania przerwania ładujemy te rejestry do licznika i zmieniamy stan wyjscia na przeciwny.
    działa to świetnie (sprawdzone na oscyloskopie)

    0
  • Pomocny post
    #6 23 Gru 2004 12:15
    frohme
    Poziom 21  

    Po namyśle dochodzę do wniosku, że trochę trzeba zmienić koncepcję, a i tak nie wszystko się załatwi. Pomysł jest taki: 1) zegar i wszystkie sprawy jego bez zmian i cykl maszyny 1 us. 2) ponieważ impulsy mają być nie częściej niż co 1 ms to czasu trochę jest 3) do odmierzania okresu między impulsami użyj timera2 ustawionego jako licznik w trybie auto-reload i generującego przerwanie - cienkość jest taka, że masz maksymalny czas powtarzania impulsu 65,535 ms a to trochę mało w stosunku do założeń 4) w tym przerwaniu ustawiasz bit nogi wyjściowej i wyzwalasz start timera np. timer1 do odmierzenia czasu impulsu i nic więcej 5) timer1 odmierza czas po którym generuje przerwanie w którym tylko zerujesz bit nogi wyjściowej
    Błędy w niestabilności impulsu to kilka us w zależności od czasu potrzebnego na przejęcie przerwania, co przy minimalnym czasie 1 ms jest do przyjęcia.

    0