logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR ATMega16] Nie działa Timer0

cackoarek 09 Lip 2009 21:26 2571 7
  • #1 6760094
    cackoarek
    Poziom 26  
    Witam

    Procesor jak w temacie. Podłączyłem sygnał zmienny (fala prostokątna) do obu nóżek PortB0 (T0) i PortB1 (T1).
    Napisałem program w celu sprawdzenia czy oba liczniki działają:

    $regfile = "M16def.dat"                                     'Wybór kontrolera ATMega16
    $crystal = 8000000                                          'Kwarc 16MHz
    Config Lcd = 20 * 2                                         'Rodzaj wyświetlacza
    Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = Portc.4 , E = Portc.0 , Rs = Portd.7
    Config Timer0 = Counter , Edge = Falling
    Config Timer1 = Counter , Edge = Falling
    Enable Timer0
    Start Timer0
    
    Enable Timer1
    Start Timer1
    
    Do
    Cls
    Lcd Timer0
    Locate 2 , 1
    Lcd Timer1
    Waitms 200
    Loop


    I okazuje się że licznik T1 działa (zlicza impulsy) zaś licznik T0 stoi.

    Czego może to być przyczyna? Spalona końcówka czy coś trzeba jeszcze ustawić? W dokumentacji jest, że na tej nóżce jest XCK od USART'a. Może mam to włączone? Ręce mi już opadają :(
    W trybie Timera oba działają prawidłowo.
  • #4 6761123
    Konto nie istnieje
    Poziom 1  
  • #5 6761439
    cackoarek
    Poziom 26  
    Niestety żaden Wasz pomysł nie działa. O dziwo podłączyłem inną kostkę ATmega16 i jest ten sam problem. Widać błąd w programie albo coś z kompilatorem :/

    Dodano po 5 [minuty]:

    Dziwne... ale jak zmieniłem 1-wszą linijkę
    z
    $regfile = "M16def.dat"

    na
    $regfile = "M163def.dat"

    to Counter0 ożył :) Jakieś nienormalne.
    Problem rozwiązany :)
  • #6 6763543
    janbernat
    Poziom 38  
    Wydaje mi się że problem został "zamieciony pod dywan"
    Atmel podaje żeby nie stosować ATMega163 w nowych projektach tylko ATMega16
    http://www.atmel.com/atmel/acrobat/doc1142.pdf
    Którą wersję Bascoma używasz?
    A jak zamiast start TIMER0- wpiszesz do rejestru TCCR0 CS02=1, CS01=1 a CS00=0-to będziesz miał lepiej.

    Dodano po 7 [minuty]:

    korrus666 napisał:
    Tak to jest jak się pisze w języku wyższego poziomu i tak na prawdę nie wiadomo co te procedury robią..

    Dlatego bez datasheeta nie da rady:cry:
    Ale można chociaż się trochę dowiedzieć.
    Informatycy utrzymują że w procesorach jest "dym" i krasnoludki.
    A elektronicy wiedzą że są elektrony i czarownice :D
  • #7 6769047
    cackoarek
    Poziom 26  
    janbernat napisał:
    Którą wersję Bascoma używasz?

    1.11.8.1

    Nic nie poradzę że pod ustawieniami ATMega16, ATMega161, ATMega162 nie działa. Pod ATMega161 licznik ożył ale nie generowały się przerwania. Dziwne - ale prawdziwe.
    janbernat napisał:
    A jak zamiast start TIMER0- wpiszesz do rejestru TCCR0 CS02=1, CS01=1 a CS00=0-to będziesz miał lepiej.

    Być może by zadziało... albo i nie bo wydaje mi się że rozkaz start Timer0 robił to samo. Więc po prostu w pliku definicyjnym procka adresy do rejestrów miał źle podane.
REKLAMA