eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem z Timerami w Atmega64L › Problem z Timerami w Atmega64L
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!p
    ostnews.google.com!j35g2000yqh.googlegroups.com!not-for-mail
    From: j...@g...com
    Newsgroups: pl.misc.elektronika
    Subject: Problem z Timerami w Atmega64L
    Date: Sat, 21 Feb 2009 02:50:00 -0800 (PST)
    Organization: http://groups.google.com
    Lines: 88
    Message-ID: <f...@j...googlegroups.com>
    NNTP-Posting-Host: 87.239.220.99
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-1
    Content-Transfer-Encoding: 7bit
    X-Trace: posting.google.com 1235213400 1442 127.0.0.1 (21 Feb 2009 10:50:00 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Sat, 21 Feb 2009 10:50:00 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: j35g2000yqh.googlegroups.com; posting-host=87.239.220.99;
    posting-account=bxU6XQoAAABfVsDPwNjjFdGkMm7zFALP
    User-Agent: G2/1.0
    X-HTTP-UserAgent: Opera/9.63 (Windows NT 5.1; U; pl) Presto/2.1.1,gzip(gfe),gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:557746
    [ ukryj nagłówki ]

    Witam, mam problem z poprawnym uruchomieniem timerow na w/w atmedze.
    Do tej pory bawilem sie Atmega32 i problemow nie bylo.

    Problem tkwi w tym, ze nie dzialaja mi przerwania od timerow.
    Dodatkowo wydaje mi sie (jedynie z obserwacji), ze zmiana
    preskalerow tez nie wplywa na szybkosc zliczania...
    Porownywanie z wzorcami porownania z OCR(x) tez...

    Timery poprostu licza sobie od 0 do 255 i automatycznie zeruja sie.
    i tak w nieskonczonosc, zawsze z ta sama predkoscia.

    Atmega64L taktowana wewnetrznym generatorem RC 1MHz
    Zasilanie 3.3V

    Ponizej zamieszczam przykladowy problem, ktory NIE dziala na
    Atmedze64L, natomiast bezblednie dziala na Atmedze32:

    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <avr/iom32.h>

    volatile unsigned int interrupts2 = 0;
    volatile unsigned int interrupts0 = 0;

    void io_init(void)
    {
    DDRG &= ~(1 << PG3); // Wejscie TOSC2 - 32kHz
    DDRG &= ~(1 << PG4); // Wejscie TOSC1

    DDRD &= ~(1 << PD2); // Wejscie RxD
    DDRD |= (1 << PD3); // Wyjscie TxD
    }

    ISR(SIG_OVERFLOW2)
    {
    interrupts2++;
    TCNT2 = 0;
    }

    ISR(SIG_OVERFLOW0)
    {
    interrupts0++;
    TCNT0 = 0;
    }

    int main(void)
    {

    io_init();
    uart_init();

    TIMSK &= ~(1 << TOIE2);
    TIMSK &= ~ (1 << OCIE2);
    ASSR |= (1 << AS2);
    TCCR2 |= (1 << CS22);
    TCCR2 |= (1 << CS20);

    while(ASSR&0x07);

    TIMSK |= (1 << TOIE2);
    TIMSK |= (1 << OCIE2);
    OCR2 = 0x99;


    TIMSK |= (1 << TOIE0);
    TIMSK |= (1 << OCIE0);
    TCCR0 &= ~(1 << WGM00);
    TCCR0 &= ~(1 << WGM01);
    TCCR0 |= (1 << CS02);
    TCCR0 &= ~(1 << CS01);
    TCCR0 &= ~(1 << CS00);

    SREG |= 0x80;

    while(1)
    {

    }

    return 0;
    }

    Rezultat wyrzucam sobie na konsole COM za pomoca uarta
    Zmienne interrupts0 i interrupts2 sa ciagle rowne zero...

    Prosze o jakies wskazowki, bo juz mi rece opadaja :(

    Pozdrawiam, Piotr

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: