AVR: obsluga LCD zakloca INT2

Witam,

Mam procesor Atmel AVR ATmega16. Na INT0, INT1 i INT2 podawane sa sygnaly synchronizacyjne. Procedura obslugi kazdego z przerwan inkrementuje liczniki. Liczniki dla INT0 i INT1 chodza ok. 2 razy wolniej niz dla INT2. Wszystkie przerwania powstaja po wykryciu zbocza rosnacego. Zauwazylem, ze prace INT2 zakloca obsluga wyswietlacza LCD. INT2 to PB2. LCD wykorzystuje PB1, PB3, PB4, PB5, PB6, PB7. Gdy w programie glownym, zrobie zmienna, ktorej wartosc jest zwiekszana i dopiero po osiagnieciu pewnej jej wartosci LCD jest odswiezany, licznik dla INT2 pokazuje wartosc zblizona do pozostalych - generalnie, im rzadziej odswiezam zawartosc LCD, tym licznik dla INT2 dziala podobniej do pozostalych. W mojej bibliotece obslugi LCD uzywam wylacznie sbi i cbi -- nie odwoluje sie do portu poprzez PORTB=, PORTB|=, PORTB&=~, itp.

Co moze byc przyczyna takiego zachowania?

Vicky.

Reply to
Vicky
Loading thread data ...
Reply to
Rafal Baranowski
Reply to
Rafal Baranowski

Wed, 24 Nov 2004 23:29:19 +0100, na pl.misc.elektronika, Vicky napisał(a):

BTW - czy to avrgcc ? Z włączoną optymalizacją -Os kompilator robi Ci to sam :

PORTB |= _BV(PB1); 8: c1 9a sbi 0x18, 1 ; 24 PORTB &= ~_BV(PB1); a: c1 98 cbi 0x18, 1 ; 24

Reply to
Jurek Szczesiul

Probowalem tez na innym egzemplarzu - efekt podobny. Dzis jakos inaczej to dziala niz wczoraj. Czasem po wlaczeniu zasilania liczniki ida tak samo (mimo, ze wyswietlacz jest odswiezany non-stop), a czasem trzeci dziala nieznacznie szybciej.

Vicky.

Reply to
Vicky

Zrobilem w generatorze opoznienie - po wlaczeniu odczekuje ok. 3 sek. i dopiero potem generuje impulsy. Zauwazylem, ze po wlaczeniu zasilania (mimo, ze generator jeszcze nie zaczal nic generowac) licznik od INT2 ma jakas wartosc (na ogol 0, ale czasem ok. 30, 700, 900 - roznie). Stad potem pewnie te rozbieznosci we wskazaniach. Ale jeszcze nie wiem, skad to sie bierze -- jakies zaklocenia.

Vicky.

Reply to
Vicky

Problem chyba rozwiazany. Gdy podlacze oscyloskop do PB2, dziala wszystko idealnie. Gdy odlacze oscyloskop, od razu wariuje. Zatem trzeba jakis kondensator podpinac. Na razie moj uklad, to pajak. Dlatego tez moga powstawac zaklocenia (dlugie kable, byle jak podlaczone).

Vicky.

Reply to
Vicky

Vicky snipped-for-privacy@hotmail.com napisał(a):

A włączyłeś pullup-a na PB2 ???

Pzdr. Piotrek Sz.

Reply to
Piotrek Sz.

Thu, 25 Nov 2004 10:37:42 +0100, na pl.misc.elektronika, Vicky napisał(a):

-O2 jeszcze optymalizuje. Dopiero przy wyłączonej (-O0) przestaje :

PORTB |= _BV(PB1); 8: 80 91 38 00 lds r24, 0x0038 c: 82 60 ori r24, 0x02 ; 2 e: 80 93 38 00 sts 0x0038, r24 PORTB &= ~_BV(PB1); 12: 80 91 38 00 lds r24, 0x0038 16: 8d 7f andi r24, 0xFD ; 253 18: 80 93 38 00 sts 0x0038, r24

Reply to
Jurek Szczesiul

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.