[51] wykrywanie dowolnego zbocza
Masz problem? Zapytaj na forum elektroda.pl
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_op.pl>
Subject: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 11:47:47 +0200
Powitanko,
O ile wykrycie narastajacego ALBO opadajcego zbocza jest banalne, 2
linijki w asm, to zapetlilem sie nad problemem jak rozpoznac dowolne
zbocze (czyli zmiane stanu 1 linni portu, bez wzgledu na to, w ktora
strone). Poratuje ktos pomyslem idei?:-)
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
*** UWAGA: ODPOWIADAM TYLKO Z ADRESU: pavel(malpa)klub/chip/pl (Wszystko
co piszesz na "odpowiedz", czyli na opajak(malpa)op.pl, jest kasowane)
From: Waldemar Krzok <waldemar.krzok_at_nospam_charite.de>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 11:59:15 +0200
Pawel "O'Pajak" wrote:
Powitanko,
O ile wykrycie narastajacego ALBO opadajcego zbocza jest banalne, 2
linijki w asm, to zapetlilem sie nad problemem jak rozpoznac dowolne
zbocze (czyli zmiane stanu 1 linni portu, bez wzgledu na to, w ktora
strone). Poratuje ktos pomyslem idei?:-)
Pozdroofka,
Pawel Chorzempa
asemblera 51 nie znam, ale tak w pseudokodzie:
mov R1,port_1
gugu: mov R2,port_1
cmp R2,R1
beq gugu
Waldek
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_op.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 12:28:19 +0200
Powitanko,
mov R1,port_1
gugu: mov R2,port_1
cmp R2,R1
beq gugu
Cos w tym rodzaju kombinowalem, tylko, ze jesli zmiana nastapi np w
trakcie porownywania r1 i r2, to kicha:-( Wykryje tylko zmiany pomiedzy
kolejnymi "mov"...
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
*** UWAGA: ODPOWIADAM TYLKO Z ADRESU: pavel(malpa)klub/chip/pl (Wszystko
co piszesz na "odpowiedz", czyli na opajak(malpa)op.pl, jest kasowane)
From: Waldemar Krzok <waldemar.krzok_at_nospam_charite.de>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 12:36:55 +0200
Pawel "O'Pajak" wrote:
Powitanko,
mov R1,port_1
gugu: mov R2,port_1
cmp R2,R1
beq gugu
Cos w tym rodzaju kombinowalem, tylko, ze jesli zmiana nastapi np w
trakcie porownywania r1 i r2, to kicha:-( Wykryje tylko zmiany pomiedzy
kolejnymi "mov"...
opóźnienie zawsze będzie. A to cmp złapie wtedy za następnym przejściem.
Nie wykryjesz, jak między mov-ami masz przejście 0-1-0 lub 1-0-1. Ten
podany kod to oczywiście jeden "szczał", dalej musi być mov R1,R2 (albo
neg R1) i możesz szukać dalej. Jak chcesz szybciej, to tylko układ
różniczkujący na wejściu przerwania może pomóc.
Waldek
From: Mariusz Dybiec <mardyb_at_nospam_poczta.onet.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 12:33:04 +0200
Pawel "O'Pajak" wrote:
Powitanko,
O ile wykrycie narastajacego ALBO opadajcego zbocza jest banalne, 2
linijki w asm, to zapetlilem sie nad problemem jak rozpoznac dowolne
zbocze (czyli zmiane stanu 1 linni portu, bez wzgledu na to, w ktora
strone). Poratuje ktos pomyslem idei?:-)
Pozdroofka,
Pawel Chorzempa
Oczywiście można odczytywać port i porównywać z poprzednim odczytem.
Tylko albo to będzie powolne albo zużyjesz całą moc.
Można to zrobić na wejściu przerwania. Przy starcie procka ustaw
przerwanie na stan przeciwny niż widzi port. W obsłudze przerwania
zmieniasz na odwrotny.
--
Pozdrawiam
MD
"Ja nie myślę, ja dyskutuję na pcoa" (c) Artur Karaźniewicz
From: "Tomasz Gumny" <tgumny_at_nospam__at_nospam_idn.org.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 13:32:43 +0200
Można to zrobić na wejściu przerwania. Przy starcie procka ustaw
przerwanie na stan przeciwny niż widzi port. W obsłudze przerwania
zmieniasz na odwrotny.
Standardowa 51 przerwanie wykrywa tylko przerwania na opadajacym zboczu.
Najprosciej podac sygnal na INT0 i zanegowany na INT1 i oba wejscia ustawic
na wykrywanie (opadajacego) zbocza.
TG
From: Mariusz Dybiec <mardyb_at_nospam_poczta.onet.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 13:48:07 +0200
Tomasz Gumny wrote:
Można to zrobić na wejściu przerwania. Przy starcie procka ustaw
przerwanie na stan przeciwny niż widzi port. W obsłudze przerwania
zmieniasz na odwrotny.
Standardowa 51 przerwanie wykrywa tylko przerwania na opadajacym zboczu.
Najprosciej podac sygnal na INT0 i zanegowany na INT1 i oba wejscia ustawic
na wykrywanie (opadajacego) zbocza.
TG
No tak już zapomniałem jak jest w czystym 51. W C535 starsze wejścia:
INT2 i INT3 można programować na zbocze opadające lub narastające.
--
Pozdrawiam
MD
"Ja nie myślę, ja dyskutuję na pcoa" (c) Artur Karaźniewicz
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 16:44:45 +0200
Mariusz Dybiec napisał(a):
Można to zrobić na wejściu przerwania. Przy starcie procka ustaw
przerwanie na stan przeciwny niż widzi port. W obsłudze przerwania
zmieniasz na odwrotny.
gorzej jak w trakcie obsługi przerwania zmieni się stan.
w.
From: Mariusz Dybiec <mardyb_at_nospam_poczta.onet.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 17:34:10 +0200
Wojtek Kaniewski wrote:
Mariusz Dybiec napisał(a):
Można to zrobić na wejściu przerwania. Przy starcie procka ustaw
przerwanie na stan przeciwny niż widzi port. W obsłudze przerwania
zmieniasz na odwrotny.
gorzej jak w trakcie obsługi przerwania zmieni się stan.
Gdyby był wyzwalany stanem a nie zboczem to wychodząc z przerwania
natychmiast zareagowałby na następne. Ale to akurat teoretyzowanie bo
faktycznie nie ma możliwości zmiany na wyzwalanie wysokim.
--
Pozdrawiam
MD
"Ja nie myślę, ja dyskutuję na pcoa" (c) Artur Karaźniewicz
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Wed, 18 May 2005 16:19:06 +0200
O ile wykrycie narastajacego ALBO opadajcego zbocza jest banalne, 2
linijki w asm, to zapetlilem sie nad problemem jak rozpoznac dowolne
zbocze (czyli zmiane stanu 1 linni portu, bez wzgledu na to, w ktora
strone). Poratuje ktos pomyslem idei?:-)
Ja zazwyczaj robię to poprzez szeregowy wpis stanu portu do najmłodszego
bitu w bajcie i
przesuwanie tego bajtu w lewo. Jezeli 8 kolejnych odczytow jest takich
samych to albo
masz w bajcie 00000000 albo 11111111.
A przy zmianie to wiadomo. Dodatkowo działa to jako filtr przeciw
zakłóceniowy.
Możesz też badać dwa najmłodze bity w tym bajcie poprzez ich maskowanie itp.
Pzdr
megaraptor
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_op.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Thu, 19 May 2005 00:10:21 +0200
Powitanko,
Wielkie dzieki wszystkim za rady. Ukladzik, ktory cwicze bedzie badal
czas trwania impulsu i odpowiednio to obrabial. Zbocza nie beda czesciej
niz co 200uS, wiec czasu jest duzo i nie trzeba przerwan.
Rozwiazanie w mieszance asm/bascom, moze komus sie przyda:
Dim Flag As Bit
Pocz:
jnb p3.3,petl0
jb p3.3,petl1
!petl0:
jnb p3.3,petl0
Flag = 1
Gosub Obs1
!petl1:
jb p3.3,petl1
Flag = 1
Gosub Obs1
Goto Pocz
Obs1:
If Flag = 1 Then
P3.7 = 0
Waitms 5
P3.7 = 1
Flag = 0
End If
Return
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
*** UWAGA: ODPOWIADAM TYLKO Z ADRESU: pavel(malpa)klub/chip/pl (Wszystko
co piszesz na "odpowiedz", czyli na opajak(malpa)op.pl, jest kasowane)
From: "Tomasz Gumny" <tgumny_at_nospam__at_nospam_idn.org.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Thu, 19 May 2005 01:03:49 +0200
Ukladzik, ktory cwicze bedzie badal
czas trwania impulsu i odpowiednio to obrabial.
Zwykle do tego celu wykorzystywało się wejścia INT0/INT1
w trybie bramkowania zegara timerów T0/T1...
Czy w programie przewidziałeś sytuację że impuls się nie pojawi
lub pojawi się i będzie za długi albo... w ogóle nie zniknie?
TG
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_op.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Thu, 19 May 2005 02:19:43 +0200
Powitanko,
Zwykle do tego celu wykorzystywało się wejścia INT0/INT1
w trybie bramkowania zegara timerów T0/T1...
Odpalac timer mozna tez inaczej, flaga. Inty sa niestety na falling
edge, a ja musze reagowac takze na narastajace...
Czy w programie przewidziałeś sytuację że impuls się nie pojawi
lub pojawi się i będzie za długi albo... w ogóle nie zniknie?
Wlasnie do tego chce wykorzystac przerwanie od timera. W obsludze bedzie
wyskok z petli glownej.
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
*** UWAGA: ODPOWIADAM TYLKO Z ADRESU: pavel(malpa)klub/chip/pl (Wszystko
co piszesz na "odpowiedz", czyli na opajak(malpa)op.pl, jest kasowane)
From: "Tomasz Gumny" <tgumny_at_nospam__at_nospam_idn.org.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Thu, 19 May 2005 10:48:32 +0200
Zwykle do tego celu wykorzystywało się wejścia INT0/INT1
w trybie bramkowania zegara timerów T0/T1...
Odpalac timer mozna tez inaczej, flaga. Inty sa niestety na falling
edge, a ja musze reagowac takze na narastajace...
Nie o to chodzi. Poczatek i koniec impulsu wykrywasz JB/JNB, ale dzieki
bramkowaniu odczytujesz z timera dokladna dlugosc impulsu.
TG
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Sun, 22 May 2005 14:13:45 +0200
Pawel "O'Pajak wrote:
Odpalac timer mozna tez inaczej, flaga. Inty sa niestety na falling edge,
a ja musze reagowac takze na narastajace...
A może rozwiązanie radykalne: zamień 51 na jakiś _porządny_
mikrokontroler. W AVR-ku możesz sobie ustawiać zbocze wyzwalające.
Pozdrawiam
Piotr Wyderski
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Thu, 26 May 2005 01:36:57 +0200
Piotr Wyderski wrote:
Odpalac timer mozna tez inaczej, flaga. Inty sa niestety na falling
edge, a ja musze reagowac takze na narastajace...
A może rozwiązanie radykalne: zamień 51 na jakiś _porządny_
mikrokontroler. W AVR-ku możesz sobie ustawiać zbocze wyzwalające.
Nie na każdym wejściu przerywającym.
A może od razu ARM? :)
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Fri, 27 May 2005 13:59:39 +0200
Adam Dybkowski wrote:
mikrokontroler. W AVR-ku możesz sobie ustawiać zbocze wyzwalające.
Nie na każdym wejściu przerywającym.
A o którym modelu mówisz? Bo wszystkie stosowane
przeze mnie chipy (2313, 8515 i 8535) na to pozwalały.
A może od razu ARM? :)
Jak szaleć, to szaleć: Stratix II. :-)
Pozdrawiam
Piotr Wyderski
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Fri, 27 May 2005 23:04:24 +0200
Piotr Wyderski wrote:
mikrokontroler. W AVR-ku możesz sobie ustawiać zbocze wyzwalające.
Nie na każdym wejściu przerywającym.
A o którym modelu mówisz? Bo wszystkie stosowane
przeze mnie chipy (2313, 8515 i 8535) na to pozwalały.
Na przykład ATmega128: na pinach INT4..7 można wybrać wyzwalanie
dowolnym zboczem a na pinach INT0..3 tylko wyzwalanie
rosnącym/malejącym/niskim poziomem. Nie mam pojęcia, dlaczego na tym
zaoszczędzili kilka tranzystorów.
A mowa w wątku była o wyzwalaniu dowolnym zboczem bez ciągłego
przeprogramowywania rosnącym/malejącym/rosnącym...
BTW: AT90S8535 w ogóle nie pozwalał na wyzwalanie dowolnym zboczem.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Sun, 29 May 2005 23:13:15 +0200
Adam Dybkowski wrote:
Na przykład ATmega128:
Nie używałem meg, ceny Cyclone a ATmega128
zachęcają do zakupu tego pierwszego.
BTW: AT90S8535 w ogóle nie pozwalał na wyzwalanie dowolnym zboczem.
Pozwalał, cytat z datasheetu:
". Bit 7 - INT1: External Interrupt Request 1 Enable
When the INT1 bit is set (one) and the I-bit in the Status Register (SREG)
is set (one), the external pin interrupt is enabled.
The Interrupt Sense Control1 bits 1/0 (ISC11 and ISC10) in the MCU general
Control Register (MCUCR) define whether
the external _interrupt is activated on rising or falling edge of the INT1
pin or level sensed_."
A zwłaszcza tabelka:
". Bits 3, 2 - ISC11, ISC10: Interrupt Sense Control 1 Bits 1 and 0
The External Interrupt 1 is activated by the external pin INT1 if the SREG
I-flag and the corresponding interrupt mask in the
GIMSK is set. The level and edges on the external INT1 pin that activate the
interrupt are defined in Table 9.
Table 9. Interrupt 1 Sense Control
ISC11 ISC10 Description
0 0 The low level of INT1 generates an interrupt request.
0 1 Reserved
1 0 The falling edge of INT1 generates an interrupt request.
1 1 The rising edge of INT1 generates an interrupt request."
Podkreślenie moje. I tak samo z drugim wejściem przerwań zewnętrznych.
Pozdrawiam
Piotr Wyderski
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Mon, 30 May 2005 02:31:29 +0200
Piotr Wyderski wrote:
Na przykład ATmega128:
Nie używałem meg, ceny Cyclone a ATmega128
zachęcają do zakupu tego pierwszego.
-o Czyli ile?
ATmega128 kosztuje obecnie około 32 zł (Seguro: 32,94 zł; Propox: 31,60
zł). O jakiej Alterce dokładnie piszesz?
BTW: AT90S8535 w ogóle nie pozwalał na wyzwalanie dowolnym zboczem.
Pozwalał, cytat z datasheetu:
[...]
Table 9. Interrupt 1 Sense Control
ISC11 ISC10 Description
0 0 The low level of INT1 generates an interrupt request.
0 1 Reserved
1 0 The falling edge of INT1 generates an interrupt request.
1 1 The rising edge of INT1 generates an interrupt request."
I gdzie tu widzisz możliwość wyzwalania dowolnym zboczem? Można wybrać
albo niskim poziomem, albo zboczem opadającym, albo zboczem
narastającym. ATmega128 w miejsce ustawienia "Reserved" ma na niektórych
przerwaniach wyzwalanie zboczem dowolnym.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Mon, 30 May 2005 12:39:30 +0200
Adam Dybkowski wrote:
-o Czyli ile?
46 + VAT.
O jakiej Alterce dokładnie piszesz?
O najmniejszej, 1C3 speed grade 8 w TQFP100.
I gdzie tu widzisz możliwość wyzwalania dowolnym zboczem? Można wybrać
albo niskim poziomem, albo zboczem opadającym, albo zboczem narastającym.
Aaa... to się nie zrozumieliśmy. Pisząc "dowolnym" miałem na myśli
"istnieje możliwość wyboru dowolnego zbocza", a nie "wyzwalanie
każdym z obu zbocz jednocześnie". OK, takiej możliwość nie ma.
Można to jednak zasymulować łącząc dwie linie przerwań zewnętrznych,
jedną ustawić na rising edge, drugą na falling edge, a oba przerwania
obsługiwać za pomocą tego samego handlera.
Pozdrawiam
Piotr Wyderski
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Mon, 30 May 2005 23:57:14 +0200
Piotr Wyderski wrote:
Można to jednak zasymulować łącząc dwie linie przerwań zewnętrznych,
jedną ustawić na rising edge, drugą na falling edge, a oba przerwania
obsługiwać za pomocą tego samego handlera.
O, ciekawy pomysł. Jakoś wcześniej na to nie wpadłem (bo i nie miałem
takiej potrzeby w ATmedze 128). :-)
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
From: Artur <zielpro_at_nospam_wp.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Tue, 31 May 2005 00:27:28 +0200
Adam Dybkowski napisał:
O, ciekawy pomysł. Jakoś wcześniej na to nie wpadłem (bo i nie miałem
takiej potrzeby w ATmedze 128). :-)
To na szeregowy kondensator na wejściu INTx też pewnie nie wpadłeś? ;-)
pzdr
Artur
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
From: "Piotr Nabielec" <eloy_at_nospam_tlen.pl>
Subject: Re: [51] wykrywanie dowolnego zbocza
Date: Thu, 19 May 2005 00:38:08 +0200
Hej,
O ile wykrycie narastajacego ALBO opadajcego zbocza jest banalne, 2
linijki w asm, to zapetlilem sie nad problemem jak rozpoznac dowolne
zbocze (czyli zmiane stanu 1 linni portu, bez wzgledu na to, w ktora
strone). Poratuje ktos pomyslem idei?:-)
Ja podrzuce idee magicznej funkcji : XOR.
wynik xora dla dwoch takich samych bitow jest 0, a roznych 1.
Wystarczy wiec xorowac wartosc poprzednia z obecna i jak jest 1 to znaczy,
ze sa rozne.
Mozesz czytac caly port do bufora i xorowac od razu cale bajty, bedziesz
mial maske bitowa tego, co sie zmienilo.
(a to mozna przesunieciem cyklicznym przez CY i od razu skakac gdzie
trzeba... ale nie rozpedzajmy sie :).
Pozdrawiam
--
Piotr Nabielec
http://www.eloy.z.pl