Niedziała INT1 w AT90s8515
Masz problem? Zapytaj na forum elektroda.pl
From: "Michal" <mi15_at_nospam_poczta.onet.pl>
Subject: Niedziała INT1 w AT90s8515
Date: 2 Nov 2004 12:57:38 +0100
Witam
Moze ktos spotkal sie z podobnym problemem, a mianowicie potrzebuje wykorzystac
w moim ukladzie przerwania INT0 i INT1, niestety ale podprogram przerwania INT1
nie zostaje wykonany po podaniu odpowiedniego sygnalu. Procek to AVR 8515
(probowalem tez na ATmega8515 i takze brak reakcji)
Zaznaczam ze wszystkie bity sa ustawione tak jak potrzeba, probowalem zmieniac
aby przerwania byly wyzwalane od innego zbocza itp. i efekt ciagle taki sam ze
INT0 dziala, a INT1 nie chce : (((
Uzywam kompilatora C - AVR Edit
Michal.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: Niedziała INT1 w AT90s8515
Date: Tue, 2 Nov 2004 13:03:31 +0100
Zaznaczam ze wszystkie bity sa ustawione tak jak potrzeba
Skoro wszystko jak potrzeba, to ja nie wiem co to moze byc.
Cuda jakies chyba :)
peters
From: "Piotrek Sz." <zumek_at_nospam_WYTNIJ.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Tue, 2 Nov 2004 13:30:55 +0000 (UTC)
Michal <mi15_at_nospam_poczta.onet.pl> napisał(a):
..
Zaznaczam ze wszystkie bity sa ustawione tak jak potrzeba, probowalem zmieniac
aby przerwania byly wyzwalane od innego zbocza itp. i efekt ciagle taki sam ze
INT0 dziala, a INT1 nie chce : (((
..
A my byśmy chcieli zobaczyć na własne oczy te ustawienia :-)
Pzdr.
Piotrek Sz.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: mi15_at_nospam_poczta.onet.pl
Subject: Re: Niedziała INT1 w AT90s8515
Date: 2 Nov 2004 16:42:21 +0100
A my byśmy chcieli zobaczyć na własne oczy te ustawienia :-)
oto wycinek programu gdzie ustawiam warunki przerwania
GIMSK=1<<INT1; //
GIMSK=1<<INT0; //
MCUCR=1<<ISC10; // przerwania INT1
MCUCR=1<<ISC11; //
MCUCR=1<<ISC00; // przerwania INT0
MCUCR=1<<ISC01;
obsluga podprogramow wyglada nastepujaco
SIGNAL(SIG_INTERRUPT0)
{
....
}
i dla INT1
SIGNAL(SIG_INTERRUPT1)
{
...
}
oba podprogramy sa prawie ze identyczne, zapalaja 4 lampy tyle ze jedno
przerwanie powoduje zapalenie lamp w jedna strone, a drugie przerwanie lampy
zapalaja sie kolejno w druga strone. Jeszcze raz zaznaczam ze INT 0 dziala i
ma sie dobrze :((
nasuwa mi sie mysl czy czasem kompilator nie ma bledu !!!
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Niedziała INT1 w AT90s8515
Date: Tue, 02 Nov 2004 19:02:14 +0100
On 2 Nov 2004 16:42:21 +0100, mi15_at_nospam_poczta.onet.pl wrote:
A my byśmy chcieli zobaczyć na własne oczy te ustawienia :-)
oto wycinek programu gdzie ustawiam warunki przerwania
GIMSK=1<<INT1; //
GIMSK=1<<INT0; //
Na moj gust to niniejszym wlaczyles INT0, ale wylaczyles wszystkie
inne .. nie ma sie co dziwic ze nie dzialaja ..
J.
From: "Piotrek Sz." <zumek_at_nospam_WYTNIJ.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Tue, 2 Nov 2004 18:10:47 +0000 (UTC)
GIMSK=1<<INT1; //
GIMSK=1<<INT0; //
I dziwisz się że masz tylko INT0.Przecierz sam ładujesz maskę dla INT1,a potem
dla INT0 tym samym kasując dla INT1.W 2-giej lini brakuje "magicznago" symbolu
"OR".
Pozdrawiam
Piotrek Sz.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: =?ISO-8859-2?Q?Niedzia=B3a?= INT1 w AT90s8515
Date: Tue, 2 Nov 2004 18:13:41 +0000 (UTC)
Piotrek Sz. <zumek_at_nospam_wytnij.gazeta.pl> wrote:
GIMSK=1<<INT1; //
GIMSK=1<<INT0; //
I dziwisz się że masz tylko INT0.Przecierz sam ładujesz maskę dla INT1,a potem
dla INT0 tym samym kasując dla INT1.W 2-giej lini brakuje "magicznago" symbolu
"OR".
I nie tylko w 2giej. We wszystkich linijkach gdzie modyfikujesz kilka razy ten sam
rejestr, do drugiej i kolejnych modyfikacji ORuj wartosc rejestru z maska bitowa.
j.
Pozdrawiam
Piotrek Sz.
From: "Piotrek Sz." <zumek_at_nospam_WYTNIJ.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Tue, 2 Nov 2004 18:19:59 +0000 (UTC)
..
I nie tylko w 2giej. We wszystkich linijkach gdzie modyfikujesz kilka razy ten
sam
rejestr, do drugiej i kolejnych modyfikacji ORuj wartosc rejestru z maska bitow
..
A z tego niezbicie wynika że jesteś początkującym C-ownikiem :-)
Jako ja:-)
Pzdr.
Piotrek Sz.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: mi15_at_nospam_poczta.onet.pl
Subject: Re: Niedziała INT1 w AT90s8515
Date: 3 Nov 2004 05:30:19 +0100
..
I nie tylko w 2giej. We wszystkich linijkach gdzie modyfikujesz kilka razy
ten
sam
rejestr, do drugiej i kolejnych modyfikacji ORuj wartosc rejestru z maska
bitow
o żesz qrw.... ale ze mnie lama : )))) nie wiedzialem ze trzeba wszystkie bity
zmieniac w jednej linijce z ORami,
uogólniając:
Wpisanie GIMSK=1<<INT0; powoduje ustawienie innych biow na zero??? zaraz
zajrze do ksiazki
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: =?ISO-8859-2?Q?Niedzia=B3a?= INT1 w AT90s8515
Date: Wed, 3 Nov 2004 05:27:58 +0000 (UTC)
mi15_at_nospam_poczta.onet.pl wrote:
..
I nie tylko w 2giej. We wszystkich linijkach gdzie modyfikujesz kilka razy
ten
sam
rejestr, do drugiej i kolejnych modyfikacji ORuj wartosc rejestru z maska
bitow
o żesz qrw.... ale ze mnie lama : )))) nie wiedzialem ze trzeba wszystkie bity
zmieniac w jednej linijce z ORami,
uogólniając:
Wpisanie GIMSK=1<<INT0; powoduje ustawienie innych biow na zero??? zaraz
zajrze do ksiazki
Wpisuje do rejestru bajt z ustawionym tylko jednym bitem. Poprzednia
wartosc jest zamazywana. Albo ORuj bity przy przypisaniu:
GIMSK=(1<<...) | (1<<...) | ...
albo dodaj ORa do kolejnych:
GIMSK=1<<...; /* nadpisanie GIMSK bajtem z ustawionym tylko jednym bitem */
GIMSK|=1<<...; /* ustawienie pojedynczego bitu bez zmiany wartosci pozostalych bitow w rejestrze */
GIMSK|=1<<...;
j.
From: mi15_at_nospam_poczta.onet.pl
Subject: Re: Niedziała INT1 w AT90s8515
Date: 3 Nov 2004 08:58:50 +0100
Wpisuje do rejestru bajt z ustawionym tylko jednym bitem. Poprzednia
wartosc jest zamazywana. Albo ORuj bity przy przypisaniu:
GIMSK=(1<<...) | (1<<...) | ...
albo dodaj ORa do kolejnych:
GIMSK=1<<...; /* nadpisanie GIMSK bajtem z ustawionym tylko jednym
bitem */
GIMSK|=1<<...; /* ustawienie pojedynczego bitu bez zmiany wartosci
pozostalych bitow w rejestrze */
GIMSK|=1<<...;
Teraz juz kapuje : )))) Wielkie dzieki!!
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Niedziała INT1 w AT90s8515
Date: Wed, 03 Nov 2004 11:13:40 +0100
On Wed, 3 Nov 2004 05:27:58 +0000 (UTC), Jacek R. Radzikowski wrote:
GIMSK=1<<...; /* nadpisanie GIMSK bajtem z ustawionym tylko jednym bitem */
GIMSK|=1<<...; /* ustawienie pojedynczego bitu bez zmiany wartosci pozostalych bitow w rejestrze */
Na to radze uwazac - nie zawsze rejestr specjalny da sie odczytac..
J.
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: =?ISO-8859-2?Q?Niedzia=B3a?= INT1 w AT90s8515
Date: Wed, 3 Nov 2004 13:44:23 +0000 (UTC)
J.F. <jfox_nospam_at_nospam_poczta.onet.pl> wrote:
On Wed, 3 Nov 2004 05:27:58 +0000 (UTC), Jacek R. Radzikowski wrote:
GIMSK=1<<...; /* nadpisanie GIMSK bajtem z ustawionym tylko jednym bitem */
GIMSK|=1<<...; /* ustawienie pojedynczego bitu bez zmiany wartosci pozostalych bitow w rejestrze */
Na to radze uwazac - nie zawsze rejestr specjalny da sie odczytac..
Racja. Bezpieczniej bedzie przypisac w jednym podstawieniu.
ATSD to porzadny kompilator powinien to zoptymalizowac do jednej
operacji. Moze wiec dzialac nawet jesli rejestr nie daje sie czytac,
ale na tym bym nie polegal przy pisaniu programu.
j.
J.
From: "Piotrek Sz." <zumek_at_nospam_WYTNIJ.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Wed, 3 Nov 2004 17:05:12 +0000 (UTC)
No to żeby tak dopełnić formalności :) należy nadmienić że bity nie tylko się
ustawia ale także kasuje i zmienia na przeciwny.Ciekawe jak z tym zagadnieniem
kolega (autor postu) sobie z tym radzi ?
Pzdr.
Piotrek Sz.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: mi15_at_nospam_poczta.onet.pl
Subject: Re: Niedziała INT1 w AT90s8515
Date: 3 Nov 2004 23:02:05 +0100
No to żeby tak dopełnić formalności :) należy nadmienić że bity nie tylko się
ustawia ale także kasuje i zmienia na przeciwny.Ciekawe jak z tym
zagadnieniem
kolega (autor postu) sobie z tym radzi ?
Szczerze mowiac jestem troche poczatkujacym choc napisalem juz pare programow
na rozne mikrokontrolery, problem polega na tym ze programuje od czasu do
czasu i przewaznie w roznych jezykach. Np pisalem programy (ktore dzialaja
choc sa pewnie w nich bledy) na TINY15 - asembler, PIC16F84 - asembler i C,
90s8515 - C, atmega8 - C, byly to przewaznie dosc proste programy, problem
ktory tutaj poruszylem plega na tym ze zaczalem uzywac polecen z
operatorami '<<' ktorych nie do konca rozumialem i tutaj wielkie dzieki dla
wszystkich ktorzy przyczynili sie do tego ze teraz juz wiem o co chodzi : )
Zwykle uzywalem poprosu wpisu bajtu do rejestru typu: GIMSK = 0b00000011
lub '00000011'.
W tym przypadku podpatrzylem pare cudzych programow i zastosowalem polecenia
ktore inetrpetowalem na swoj sposob :))
Mam jeszcze problem z innym programem ale najpierw musze dokonczyc ten.
pozdrawiam serdecznie Michal S.
PS. ostatnio wzialem sie jeszcze za programowanie w VisualBasicu dla Excela, a
na prace dyplomowa pisalem program w C++ Builder, tak wiec jak widzicie cos
tam wiedzy mam ale zdecydowanie za malo doswiadczenia.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: "Piotrek Sz." <zumek_at_nospam_WYTNIJ.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Wed, 3 Nov 2004 22:30:37 +0000 (UTC)
mi15_at_nospam_poczta.onet.pl napisał(a):
Szczerze mowiac jestem troche poczatkujacym choc napisalem juz pare programow
na rozne mikrokontrolery, problem polega na tym ze programuje od czasu do
..
Jeśli Cię uraziłem to bardzo przepraszam ,nie było to moim zamiarem.
Chciałem zwrócić tylko uwagę na zawiłości języka C (sam dopiero się "wgryzam")
i jak to jedno małe poleconko może "anulować" nam ileśtam poprzedzających je
poleceń.
Pozdrawiam
Piotrek Sz.
PS
Ja również piszę w kilku językach i czasami mi się myli np. AmigaE(taaak
jescze uzywam) z Clipperem czy FoxPro, lub asm dla 51 z asmem dla 680xx czy
AVR ... :)
Poprostu Wieża Babel ;-)
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: =?iso-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Wed, 3 Nov 2004 19:01:06 +0100
Jacek R. Radzikowski wrote:
ATSD to porzadny kompilator powinien to zoptymalizowac do jednej
operacji.
Rejestr maski przerwan to rejestr specjalnego przeznaczenia,
kompilator nie ma prawa nawet o tym "pomyslec".
Pozdrawiam
Piotr Wyderski
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: =?ISO-8859-2?Q?Niedzia=B3a?= INT1 w AT90s8515
Date: Thu, 4 Nov 2004 23:20:05 +0000 (UTC)
Piotr Wyderski <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl> wrote:
Jacek R. Radzikowski wrote:
ATSD to porzadny kompilator powinien to zoptymalizowac do jednej
operacji.
Rejestr maski przerwan to rejestr specjalnego przeznaczenia,
kompilator nie ma prawa nawet o tym "pomyslec".
W sumie to nie tylko rejestry, ale wszystkie zmienne zadeklarowane
jako volatile
pzdr.
j.
Pozdrawiam
Piotr Wyderski
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: =?ISO-8859-2?Q?Niedzia=B3a_INT1_w_AT90s8515?=
Date: Wed, 03 Nov 2004 20:33:56 +0100
Jacek R. Radzikowski wrote:
ATSD to porzadny kompilator powinien to zoptymalizowac do jednej
operacji. Moze wiec dzialac nawet jesli rejestr nie daje sie czytac,
ale na tym bym nie polegal przy pisaniu programu.
ciekawe, co by wyszło po optymalizacji czegoś takiego:
for (;;) {
PORTA = _BV(0);
PORTA |= _BV(1);
PORTA |= _BV(2);
PORTA |= _BV(3);
PORTA |= _BV(4);
PORTA |= _BV(5);
PORTA |= _BV(6);
PORTA |= _BV(7);
}
w.
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Niedziała INT1 w AT90s8515
Date: Wed, 03 Nov 2004 11:13:40 +0100
On 3 Nov 2004 05:30:19 +0100, mi15_at_nospam_poczta.onet.pl wrote:
o żesz qrw.... ale ze mnie lama : )))) nie wiedzialem ze trzeba wszystkie bity
zmieniac w jednej linijce z ORami,
uogólniając:
Wpisanie GIMSK=1<<INT0; powoduje ustawienie innych biow na zero??? zaraz
zajrze do ksiazki
Lama z cieba straszna :-)
A czemu mialoby dzialac inaczej ? To jest instrukcja PODSTAWIENIA.
P.S. W C sa struktury bitowe ..
J.
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: =?iso-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Wed, 3 Nov 2004 19:08:36 +0100
J.F. wrote:
P.S. W C sa struktury bitowe ..
I tak i nie, tzn. standard nie okresla w ktorym miejscu
zostanie przydzielone wskazane pole bitowe, wiec zapomnij
o definiowaniu w ten sposob struktury rejestrow specjalnych.
W tym zastosowaniu nie maja one zadnego sensu. Poza
tym patrzylem kiedys w jaki sposob kompilator (gcc)
korzysta z pol bitowych -- zdisasemblowalem kod,
popatrzylem, podnioslo mi sie cisnienie, przestalem
korzystac z tego mechanizmu... :-)
Pozdrawiam
Piotr Wyderski
From: Jan Dubiec <jdx_at_nospam_SPAMTRAP.slackware.pl>
Subject: Re: =?iso-8859-2?q?Niedzia=B3a?= INT1 w AT90s8515
Date: 04 Nov 2004 01:26:09 +0100
On Wed, 3 Nov 2004 19:08:36 +0100, "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl> wrote:
J.F. wrote:
P.S. W C sa struktury bitowe ..
I tak i nie, tzn. standard nie okresla w ktorym miejscu
zostanie przydzielone wskazane pole bitowe, wiec zapomnij
o definiowaniu w ten sposob struktury rejestrow specjalnych.
A jakie miejsce masz na myśli? Pytam ponieważ ja w sam raz używam pól
bitowych właśnie do definiowania struktur SFR-ów. :-)
Regards,
/J.D.
--
Jan Dubiec, jdx#slackware.pl, mobile: +48 506 790442
Głęboka wiara wymaga płytkiego rozumu i nikłej wiedzy.
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: =?iso-8859-2?Q?Re:_Niedzia=B3a_INT1_w_AT90s8515?=
Date: Thu, 4 Nov 2004 14:34:33 +0100
Jan Dubiec wrote:
I tak i nie, tzn. standard nie okresla w ktorym miejscu
zostanie przydzielone wskazane pole bitowe, wiec zapomnij
o definiowaniu w ten sposob struktury rejestrow specjalnych.
A jakie miejsce masz na myśli?
Standard ISO C99, ustep 6.7.2.1:
"An implementation may allocate any addressable storage unit large
enough to hold a bit-field. If enough space remains, a bit-field
that immediately follows another bit-field in a structure shall be
packed into adjacent bits of the same unit. The order of
allocation of bit-fields with a unit (high-order to low-order or
low-order to high-order) is implementation defined. The alignment
of the addressable storage unit is unspecified."
Pytam ponieważ ja w sam raz używam pól
bitowych właśnie do definiowania struktur SFR-ów. :-)
No to korzystasz z niezdefiniowanego zachowania. :-)
Standard nie gwarantuje Ci, ze bity zostana przydzielone
polom w kolejnosci np. od najmniej znaczacego do najbardziej
znaczacego. Taka rzecz musi byc jasno okreslona w dokumentacji
kompilatora (jako rozszerzenie/doprecyzowanie standardu);
w przeciwnym przypadku nie wolno na niej opierac wiary
w poprawna konstrukcje programu. :-)
Pozdrawiam
Piotr Wyderski