Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Praca asynchroniczna ATMega48

jacek13 08 Jun 2009 18:26 2057 7
  • #1
    jacek13
    Level 15  
    Witam
    Chciałem uzyskać pracę asynchroniczną (licznik sterowany kwarcem zegarkowym, procesor generatorem wewnętrzym).
    Napisałem prosty program (miganie diody LED co 1s):
    $regfile = "m48def.dat" ' plik danego mikrokontrolera
    $crystal = 8000000 'częstotliwość generatora wewnętrznego
    Config Portb.0 = 1 'wyjście dla LED
    Portb.0 = 1
    Enable Interrupts 'odblokowanie globalnego systemu przerwań
    Enable Timer2 'odblokowanie przerwań od przepełnienia Timer2
    Config Timer2 = Timer , Async = On , Prescale = 64 'prescaler Timer2 ustawiony na 64; właczona praca "asynchroniczna"
    On Timer2 Licz 'przerwanie od przepełnienia Timer2 o etykiecie "licz"
    Dim Czas As Word 'zmienna do odliczania 0,5s [32768(kwarc):256(pojemność licznika):64(prescaler)=2Hz]

    Do
    Loop
    End

    Licz:
    Incr Czas
    If Czas = 2 Then
    Toggle Portb.0
    Czas = 0
    End If
    Return

    I okazuje się, że licznik jest sterowany z generatora wewnętrznego.
    Gdy taki sam program wpiszę do ATMega8 to wszystko jest OK - LED miga co 1s.
    Oba mikrokontrolery (ATMega8 i ATMega48) są przewidziane do pracy asynchronicznej.
    Może ktoś podpowie co zrobić aby uzyskać poprawną pracę na ATMega48.
    Pozdrawiam Jacek
  • #2
    ZbeeGin
    Level 39  
    Uruchom symulację w BASCOM i włącz opcję podglądu przestrzeni IO (Nie zapomnij włączyć też Refresh Variables). Sprawdź czy w ASSR znajdzie się wartość 08 jak program przeleci przez CONFIG TIMER2.

    Kompilacja Twojego programu w BASCOM AVR 1.11.9.4 daje poprawne rezultaty w rejestrach. Możesz spróbować też wgrać wersję skompilowaną w najnowszej wersji. Może znów bug w datfile...?
  • #3
    jacek13
    Level 15  
    Symulacji nie mogę przeprowadzić, bo nie mam układu do tego celu.
    Wgrałem załączoną kompilację - wynik jest bez zmian.
  • #4
    janbernat
    Level 38  
    Po co ci układ fizycznie istniejący do symulacji?
    Przecież to tylko symulacja.
    Po to jest symulacja żebyś niczego jeszcze nie musiał kupować.
    Daj na początku programu:
    $sim
  • #5
    jacek13
    Level 15  
    Wykonałem symulację - wartość "ASSR" = 08
    Załatwiłem problem: zamiast wpisywać w konfiguracji Timera "async=on"
    wpisałem pod konfiguracją "ASSR = &b00100000" (właczenie pracy asynchronicznej) zgodnie z danymi katalogowymi - teraz przy symulacji "ASSR=20".
    Po tej zmianie "asynchro" działa OK.
    Pozdrawiam Jacek
  • #6
    ZbeeGin
    Level 39  
    Nowa wersja BASCOM AVR (1.11.9.5) naprawia błąd z przesuniętym bitem AS2. Teraz instrukcja CONFIG powinna działać poprawnie.
  • #7
    jacek13
    Level 15  
    Dzięki za informację.
    Jeśli można, to proszę o "namiary" na download.
    Pozdrawiam Jacek
  • Helpful post
    #8
    ZbeeGin
    Level 39  
    www.mcselec.com