uklad delay



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: uklad delay
Date: Thu, 26 Dec 2002 12:58:27 +0100


mam nastepujacy problem:

potzebuje sprzetowo zrealizowac uklad ktory:

regulowal by mi czas trwania impulsu np: 20ns oraz ilosc wystapien tego
impulsu w ciagu sekundy np: 4x na sek. (docelowo ma byc zastosowany przy
klawiaturze do avr`a - chodzi o to ze kiedy wciskam przycisk podajac 0 na
pin mikrokontrolera procesor generuje 'ciagle' przerywanie - chcialbym
ograniczyc ich ilosc).

pozdr.
LB






Poprzedni Następny
Wiadomość
Spis treści
From: Janusz Raniszewski <rniski_at_nospam_man.koszalin.pl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 13:33:09 +0100


mam nastepujacy problem:

potzebuje sprzetowo zrealizowac uklad ktory:

regulowal by mi czas trwania impulsu np: 20ns oraz ilosc wystapien tego
impulsu w ciagu sekundy np: 4x na sek. (docelowo ma byc zastosowany przy
klawiaturze do avr`a - chodzi o to ze kiedy wciskam przycisk podajac 0 na
pin mikrokontrolera procesor generuje 'ciagle' przerywanie - chcialbym
ograniczyc ich ilosc).

Witam,
A nie wystarczy zadeklarować atmelkowi aby przerwanie przyjmował zboczem nie
poziomem?
Pozdr. JanuszR


Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 13:33:54 +0100


Witam,
A nie wystarczy zadeklarować atmelkowi aby przerwanie przyjmował zboczem
nie
poziomem?

No ale wtedy nie moge sprawdzic w prosty sposob jak dlugo klawisz jest
wcisniety.

pozdr.
LB




Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 13:37:11 +0100


moze lm555 ?




Poprzedni Następny
Wiadomość
Spis treści
From: Janusz Raniszewski <rniski_at_nospam_man.koszalin.pl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 14:07:27 +0100


No ale wtedy nie moge sprawdzic w prosty sposob jak dlugo klawisz jest
wcisniety.

A nie można złączyć ze sobą INT0 i INT1 jedno ustawić jako działające przy
narastającym, drugie opadającym zboczu i czas pomiędzy załączeniem a
wyłączeniem pomierzyć timerkiem?
JanuszR


Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: Re: uklad delay
Date: Fri, 27 Dec 2002 12:30:42 +0100


nie mam wolnych przerywan (btw: przerywanie musi budzic z sleep wiec z
przedzialu INT0...3 o ile sie nie myle), ani timerow niestety jedyne
rozwiazanie jakie mi zostalo to rozwiazanie sprzetowe

pozdr.
LB




Poprzedni Następny
Wiadomość
Spis treści
From: Janusz Raniszewski <rniski_at_nospam_man.koszalin.pl>
Subject: Re: uklad delay
Date: Fri, 27 Dec 2002 14:10:14 +0100


nie mam wolnych przerywan (btw: przerywanie musi budzic z sleep wiec z
przedzialu INT0...3 o ile sie nie myle), ani timerow niestety jedyne
rozwiazanie jakie mi zostalo to rozwiazanie sprzetowe

Szkoda lubię atmelki ale i te mają swoje wady. W PICach mogę jako
zewnętrzne przerwanie zadeklarować piny z całego PORTB.
Pozdr. JanuszR



Poprzedni Następny
Wiadomość
Spis treści
From: "KS" <ananass_at_nospam_wp.ppl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 13:45:40 +0100



Użytkownik "drozdu" <dreah_at_nospam_kki.net.pl> napisał w wiadomości
news:auer2l$nos$1_at_nospam_news.tpi.pl...
regulowal by mi czas trwania impulsu np: 20ns oraz ilosc wystapien tego
impulsu w ciagu sekundy np: 4x na sek. (docelowo ma byc zastosowany przy
klawiaturze do avr`a - chodzi o to ze kiedy wciskam przycisk podajac 0 na
pin mikrokontrolera procesor generuje 'ciagle' przerywanie - chcialbym
ograniczyc ich ilosc).

a nie mozesz wylaczyc tego przerwania w procesorze na jakis czas po
odebraniu przerwania od tej klawiatury, a pozniej po jakims czasie
(sprawdzonym doswiadczalnie) wlaczyc go spowrotem?

pozdrawiam
KS



Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 13:54:44 +0100


teoretycznie mogl bym ale program wisi na handlerze przerywania ;(

pozdr.
LB



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: uklad delay
Date: Thu, 26 Dec 2002 18:52:47 +0100



drozdu wrote:

regulowal by mi czas trwania impulsu np: 20ns oraz ilosc wystapien tego
impulsu w ciagu sekundy np: 4x na sek. (docelowo ma byc zastosowany przy
klawiaturze do avr`a - chodzi o to ze kiedy wciskam przycisk podajac 0 na
pin mikrokontrolera procesor generuje 'ciagle' przerywanie - chcialbym
ograniczyc ich ilosc).

A nie mozesz skanowac klawiatury na przerwaniu zegara, tj. zrobic
polling? Da sie wtedy trywialnie dopisac eliminacje drgan stykow,
autorepeat po przytrzymaniu klawisza, obsluge wielu klawiszy
wcisnietych jednoczesnie itd.

Pozdrawiam
Piotr Wyderski



Poprzedni Następny
Wiadomość
Spis treści
From: "Konop" <konop13_at_nospam_poczta.onet.pl>
Subject: Re: uklad delay
Date: Fri, 27 Dec 2002 14:44:29 +0100


regulowal by mi czas trwania impulsu np: 20ns oraz ilosc wystapien tego
impulsu w ciagu sekundy np: 4x na sek. (docelowo ma byc zastosowany przy
klawiaturze do avr`a - chodzi o to ze kiedy wciskam przycisk podajac 0 na
pin mikrokontrolera procesor generuje 'ciagle' przerywanie - chcialbym
ograniczyc ich ilosc).

Dobra, przeczytałem wszystko co tu dotąd napisane w odpowiedziach było. I
nie znalazłem jednego -czy Ty chcesz rozróżniać przyciśnięcie krótkie i
długie, czy chcesz znać dokładny czas przyciskania?? W pierwszym przypadku
ustawiasz wyzwalanie przerwania zboczem, a po zgłoszeniu tego przerwania
czekasz chwilkę i sprawdzasz stan pinu, który jest wyprowadzeniem tego
przerwania. Jeśli przycisk jest dalej wciśnięty, to jest to przytrzymanie,
jeśli nie - to znaczy, że był wciśnięty długo. W ten sposób możesz
zrealizować np. regulację czegokolwiek - przyciskasz krótko - widzisz
aktualne ustawienie, dłużej - zaczyna się zmiana, która trwa tak długo, jak
trzymany jest przycisk...
W drugim przypadku proponowałbym ten generator zbudować na procesorze, a
przerwanie zgłaszać zboczem (załóżmy, że opadającym). Przycisk z jednej
strony podpinasz do jakiegoś pinu (nazwijmy go pinem A) , a z drugiej strony
podciągasz do plusa przez rezystor i podpinasz do wejścia przerwania (pin
B). Pin A ustawiasz jako wyjście i podajesz 0 (jest tam napięcie = GND) i
procesor idzie sobie spać. Po zgłoszeniu przerwania zaczyna uruchamia się
procedura generująca impulsy na pinie A. Po jeśli przez pewien czas
przerwanie B nie będzie zgłaszane, to znów zatrzymujesz ten generator i
zostawiasz 0 na A i procek idzie spać :)...

Pozdrawiam

Konop



Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: Re: uklad delay
Date: Sat, 28 Dec 2002 15:49:44 +0100


Moze zapytam tak:

O co chodzi? Generalnie co sie stanie z pozostalymi przerywaniami...

Zalozmy ze mam nastepujace przerywania: twi, uart, adc, timer0 (rtc),
int2...6.
Przerywaniem klawiatury niech bedzie np: int2. I teraz w obsludze
przerywania
(zbocze):

do {
waitms(100);
a++;
}while(bit_is_set(pin_do ktorego podlaczony jest klawisz) && a <= 10)

wiec a = 10 -> klawisz byl wcisniety przez 1sek

dla przykladu tzymam klawisz przez te 1000ms. Ale w tym czasie moge miec
dziesiec
innych przerywan co sie z nimi stanie ? Jak mniemam bity innych przerywan
zostana ustawione
az do czasu ich obsluzenia ? Ale w takim wypadku np: timer0 liczacy czas
bedzie desynchronizowany.
tzn bedzie zliczal mniej czasu niz w zeczywistosci uplynelo.

Poza tym jak mam 5 klawiszy to dla kazdego osobna petla ??

if (key1_is_set) {
do {
}while(key1_is_set);
}

if (keyX_is_set) {
do {

}while(keyX_is_set);
}

No ale reasumujac chyba rozwiazanie tego na sprzetowy sposob wcale nie jest
tak
konieczne jak z poczatku myslalem. Widze teraz blad w moim toku rozumowania.
Sadze ze przerywanie klawiatury (na zboczu) powinienem ustawic z
przerywaniami globalnymi
wlaczonymi, pozostale zas z przerywaniami globalnymi wylaczonymi. Co
myslicie ?

pozdr.
LB




Poprzedni Następny
Wiadomość
Spis treści
From: Janusz Raniszewski <rniski_at_nospam_man.koszalin.pl>
Subject: Re: uklad delay
Date: Sat, 28 Dec 2002 16:32:56 +0100


O co chodzi? Generalnie co sie stanie z pozostalymi przerywaniami...

Witam,

Obsługa przerwaniami klawiatury nie jest najszczęśliwszym rozwiązaniem.
Przerwania służą do szybkiej obsługi zdarzeń zewnętrznych a dla uC klawiatura to
żółw. Najlepiej klawiarurę skanować timerem np. co 100ms. Wtedy możesz pobrać
status klawiatury (kombinację wciśniętych klawiszy) a reagować na nią w dowolnym
momencie (nie zajmujesz przerwań więc ich nie blokujesz). Pobranie statusu
klawiatury możesz oczywiście zrealizować przy okazji innego procesu opartego o
przewanie a związanego z timerem. Człowiek raczej nie zauważy maksymalnej zwłoki
na rekcję klawiatury 100ms. Przy okazji zliczając identyczne następujące po
sobie statusy klawiatury będziesz miał czas wciśnięcia klawisza.

dla przykladu tzymam klawisz przez te 1000ms. Ale w tym czasie moge miec
dziesiec
innych przerywan co sie z nimi stanie ? Jak mniemam bity innych przerywan
zostana ustawione
az do czasu ich obsluzenia ? Ale w takim wypadku np: timer0 liczacy czas
bedzie desynchronizowany.
tzn bedzie zliczal mniej czasu niz w zeczywistosci uplynelo.

Jeżeli uparłeś się robić to przerwaniem to w pierwszej instrukcji przewania
klawiatury wpisz

"bset 0x7" ;pozwala na przerwania (programuję w asemblerze) czyli ustawia 7 bit
w SREG (interrupt enable)

jest to po prostu pozwolenie na przerwania takie jak robi "reti" i inne
przerwania będą mogły być wywołane w czasie obsługi przerwania bieżącego.

Pozdr. JanuszR


Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <dreah_at_nospam_kki.net.pl>
Subject: Re: uklad delay
Date: Sun, 29 Dec 2002 12:56:47 +0100


ale czy napewno moge skoczyc z obslugi jednego przerywania do drugiego nie
konczac tego pierwszego ?
jak juz pisalem timerow nie mam juz wolnych, a poza tym przerywanie
klawiatury bedzie budzic z sleep.
a jest cos takiego jak priorytety ?

pozdr.
LB



Poprzedni Następny
Wiadomość
Spis treści
From: Janusz Raniszewski <rniski_at_nospam_man.koszalin.pl>
Subject: Re: uklad delay
Date: Sun, 29 Dec 2002 15:13:59 +0100


ale czy napewno moge skoczyc z obslugi jednego przerywania do drugiego nie
konczac tego pierwszego ?
jak juz pisalem timerow nie mam juz wolnych, a poza tym przerywanie
klawiatury bedzie budzic z sleep.
a jest cos takiego jak priorytety ?

Oczywiście pod warunkiem, że zachowasz wszystkie ważne rejestry ew. do każdego
przerwania przypiszesz jego własne nie używane przez inne procedury. Niestety
ustawiania priorytetów w AVRce nie znalazłem. Priorytety są następujące
"The list also determines the priority levels of the different interrupts. The
lower the address, the higher the priority level. RESET has the highest
priority, and next is INT0 (the External Interrupt Request 0), etc." czyli im
niższy adres wektora przerwań tym wyższy priorytet.
Pozdr. JanuszR