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.

ATmega8535 i przerwanie od Timer0

15 Lis 2005 09:51 1323 3
  • Poziom 11  
    Witajcie.

    Robię malutkie projekty korzystając z Bascoma. Do tej pory wyłącznie na 2313 i jakoś sobie radziłem. W nowym projekcie postanowiłem zastosować Atmega8535 i od razu natrafiłem na problem. Mianowicie po włączeniu przerwań od Timer0 nic nie działa jak powinno. Pomimo tego że procedura obsługi wyświetlacza jest wołana z obsługi przerwania na wyświetlaczu nie aktualizują się wskazania - wyświetla wartości zerowe Czasami przy częstym wołaniu odczytu klawisza cały program "idzie w las" na wyświetlaczu pokazują się różne krzaczki, czasem procesor restartuje się.
    Gdy tylko wyłączę przerwanie od Timer0 wszystko działa jak powinno.Generator wewnętrzny ustawiłem na 4MHz, Bascom demo 1.11.7.9.

    Config Porta = Input
    Config Portd = Output
    Portd = &B11111111
    Config Portb = &B01111100
    Portb = &B00000011

    Declare Sub Wsw(l1 As Byte , L2 As Word)

    Config Timer0 = Timer , Prescale = 256
    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Enable Interrupts
    Enable Timer0

    Start Adc
    Start Timer0

    On Timer0 Przerwanie

    Dim Wsk As Byte
    Dim Pom As Word
    Dim Pomoc As Byte

    Cursor Off
    Cls

    Wsk = 100

    Do
    Debounce Pinb.0 , 0 , Klawisz , Sub
    Loop
    End

    Klawisz:
    Wsk = Wsk + 1
    Call Wsw(wsk , Pom)
    Return

    Przerwanie:
    Incr Pomoc
    If Pomoc = 70 Then
    Pom = Getadc(0)
    Call Wsw(wsk , Pom)
    Pomoc = 0
    End If
    Return

    Sub Wsw(l1 As Byte , L2 As Word)
    Cls
    Lcd "1 linia " ; L1
    Lowerline
    Lcd "2 linia " ; L2
    End Sub

    Program jest oczywiście przykładowy. Gdy zamiast przerwania etkietę Przerwanie: wołam przy pomocy funkcji Debounce wszystko jest OK.
    Klawiatura na porcie B, wyświetlacz na porcie D, port A będzie cały wykorzystany na przetwornik zaś na porcie C będzie wyświetlacz LED.
    Może powinienem przestawić któryś z FuseBitów, a może konfiguracja Timer0 powinna być inna. Naprawdę nie wiem gdzie popełniam błąd.

    Będę wdzięczny za wszelkie sugestie.
    Pozdrawiam
    Krzysiek
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Użytkownik usunął konto  
  • Poziom 17  
    a to studio AVR to jaki jecyk, czy czasem nie C?
  • Poziom 39  
    KrzysiekG napisał:
    Witajcie.
    ...
    Program jest oczywiście przykładowy. Gdy zamiast przerwania etkietę Przerwanie: wołam przy pomocy funkcji Debounce wszystko jest OK.
    ...
    Naprawdę nie wiem gdzie popełniam błąd.

    Będę wdzięczny za wszelkie sugestie.
    Pozdrawiam
    Krzysiek

    To mi wygląda , na zbyt mały stos.Zwiększ parametr HW Stack na 100 i sprawdź , czy pomogło.

    Piotrek