Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Skok do podprogramu co ok 5s

17 Gru 2009 10:23 1053 9
  • Poziom 21  
    Witam Musze się zgłosić do was bo juz nie wyrabiam. Chodzi mi o najprostszy programik działający w tle który będzie skakał do podprogramu A: co około 5s.

    Znalazlem cos takiego:

    Code:

    Enable Interrupts
    Ocr2 = 20                                                   
    Tccr2 = 5                                                 
                                                       
    Enable Oc2
    On Oc2 A

    do
    ....
    loop

    A:


    Tylko nie wiem co to są te Ocr2 , Tccr2

    Czy to będzie działało? Napisałem to ale dziwnie się zachowuje przy zmianie tych liczb Ocr2 , Tccr2.
    Procesor to ATMEGA8 taktowany wew osc 8Mhz
  • Poziom 38  
    " przy zmianie tych liczb Ocr2 , Tccr2."
    To nie są zwykłe liczby tylko nazwy rejestrów w procesorze.
    Można im przypisać różne wartości- ale nie dowolne.
  • Pomocny post
    Poziom 33  
    wykorzystaj wolny timer w uC , wprowadź zmienną licznikową i np. co określoną ilość przepełnień timer ,skok do prodprogramu ;)
  • Poziom 21  
    Idee niby znam tylko dajcie jakiś zarys.
  • Poziom 14  
    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer0_pelny

    Config Pinb.0 = Output
    Led Alias Portb.0

    Dim A As Byte

    Enable Timer0
    Enable Interrupts



    Do
    Loop



    Timer0_pelny:
          Incr A
             If A = 152 Then
                A = 0
                Toggle Led
             End If
       Return


    Powinno działać. Warto ściągnąć program do obliczania co ile będzie wywoływane przerwanie: https://www.elektroda.pl/rtvforum/viewtopic.php?p=602999#602999

    Po uruchomieniu programu wybierasz częstotliwość kwarcu, timer i dobierasz odpowiednio do potrzeb preskaler. Największa wartość to najdłuższy czas, czyli przy preskalerze równym 1024 przerwanie będzie wykonywane co 32,768 ms, żeby odliczyć 5 sekund należy podzielić 5000 ms przez 32,768 ms i otrzymamy wynik, czyli ile razy przerwanie musi być wywołane, żeby upłynęło 5 sekund. Myślę, że teraz Ci się trochę rozjaśniło...

    Pozdrawiam!
  • Poziom 21  
    No teraz rozumiem ale nie działa :(

    Dodano po 8 [minuty]:

    Moze dlatego ze używam internal RC oscilator
  • Poziom 14  
    Musi działać ;). Podłączyłeś do portu B.0 diodę LED (oczywiście przez rezystor)?

    Dodano po 1 [minuty]:

    Ja też używam wewnętrznego i zaprogramowałem ATMEGĘ, żeby sprawdzić i program działa jak należy, czyli co 5 sekund miga dioda LED.
  • Poziom 21  
    oto fragment mojego kodu:
    Code:

    'STEROWNIK PIECA C.O.    ATMEGA8

    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer0_pelny



    Config Portb.7 = Output
    Config Portb.6 = Output
    Config Portc.4 = Input
    Config Portc.5 = Input
    Config Portd.7 = Output
    Config Portd.6 = Output
    Config Portd.5 = Output
    Config Portd.4 = Output
    Config Portc = Input

    Pompa_piec Alias Portd.7
    Pompa_bojler Alias Portd.6
    Dmuchawa Alias Portd.5
    Zawor Alias Portd.4
    Podswietlanie Alias Portb.7

    Cls
    Cursor Off
    Set Podswietlanie
    Dim Piec As Integer
    Dim Bojler As Integer
    Dim A As Byte
    Dim Aa As Single
    Dim Bb As Single

    Dim Aaa As Byte
    Cls
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    Deflcdchar 3 , 231 , 229 , 231 , 224 , 224 , 224 , 224 , 224       ' replace ? with number (0-7)
    Cls
    '-----------------------------------------------------------
    Enable Timer0
    Enable Interrupts

    Timer0_pelny:
          Incr A
             If A = 20 Then
                A = 0
                Toggle Podswietlanie
             End If
       Return
  • Pomocny post
    Poziom 14  
    A gdzie jest umieszczony główny program? Musi być po instrukcjach Enable Timer0 i Enable Interrupts.
  • Poziom 21  
    O kurde o tym nie wiedziałem szeri88 bardzo mi pomogłeś bo przynajmniej wiem już z czym się to je. Szczere dziękuje. pozdrawiam