bart
Guest
Wed May 21, 2008 1:03 pm
Czy da sie zrobic wlasnie cos takiego jak w czasie obslugi jednego przerwania
przyjąć kolejne?
Robie sobie taki zegarek wirujacy (Propeller display) i obsluge wyswietalania
napisu mam w przerwaniu od transoptora szczelinowego INT0, a na INT1 chcialbym
powiesic IR receiver TSOP1736, a do tego chcialbym jeszcze obsluzyc czujnik
Temp DS18B20 i jakiegos RTC czy dobrze mysle ze uda mi sie to wszystko obslozyc
jedna malutka atmega8? Program pisze w ASM czy lepiej od razu pomyslec o
rozbudowie hardware'u.
Pozdrawiam Bart.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Konop
Guest
Wed May 21, 2008 2:24 pm
bart pisze:
Quote:
Czy da sie zrobic wlasnie cos takiego jak w czasie obslugi jednego przerwania
przyjąć kolejne?
Robie sobie taki zegarek wirujacy (Propeller display) i obsluge wyswietalania
napisu mam w przerwaniu od transoptora szczelinowego INT0, a na INT1 chcialbym
powiesic IR receiver TSOP1736, a do tego chcialbym jeszcze obsluzyc czujnik
Temp DS18B20 i jakiegos RTC czy dobrze mysle ze uda mi sie to wszystko obslozyc
jedna malutka atmega8? Program pisze w ASM czy lepiej od razu pomyslec o
rozbudowie hardware'u.
Pozdrawiam Bart.
To wszystko zależy od tego jakiego rzędu to są czasy itp. Aby przerwać
przerwanie musisz po prostu odblokować przerwania w procedurze obsługi
przerwania

... ale wówczas KAŻDE INNE przerwanie przerwie aktualnie
wykonywane przerwanie

.. no ale nic

.. po kolei:
- wyświetlanie obsługujesz TYLKO za pomocą przerwania INT0, czy może
później są jeszcze jakieś zależności czasowe i wykorzystujesz jakiś
licznik??
- jak często będą zgłaszane poszczególne przerwania i jakiego rzędu
czasy są potrzebne na obsługę czujnika temperatury albo odebranie
sygnału z IR??
Co do rozbudowania hardware'u - jeśli chcesz, żeby to było małe, to
trzeba wszystko bardzo dokładnie przemyśleć

... Jeśli sterownik może
być duży, to może warto dorobić jakiś układzik zewnętrzny, i początkowo
go nie montować... tylko - jaki?? Umiesz programować CPLDki??
Pozdrawiam
Konop
PS Swego czasu miałem problem, żeby jednocześnie obsłużyć wyświetlacz
LED i czujnik temperatury 1wire

... ale wystarczyło użyć głowy i
odpalić wszystko w odpowiedniej kolejności i poszło

... dodatkowo, to
był BASCOM (korzystałem z gotowych procedur i nie mogłem się "wstrzelić"
w środek procedury z niczmy) i 1wire totalnie software'owo

...
T.M.F.
Guest
Wed May 21, 2008 2:25 pm
bart wrote:
Quote:
Czy da sie zrobic wlasnie cos takiego jak w czasie obslugi jednego przerwania
przyjąć kolejne?
Robie sobie taki zegarek wirujacy (Propeller display) i obsluge wyswietalania
napisu mam w przerwaniu od transoptora szczelinowego INT0, a na INT1 chcialbym
powiesic IR receiver TSOP1736, a do tego chcialbym jeszcze obsluzyc czujnik
Temp DS18B20 i jakiegos RTC czy dobrze mysle ze uda mi sie to wszystko obslozyc
jedna malutka atmega8? Program pisze w ASM czy lepiej od razu pomyslec o
rozbudowie hardware'u.
Pozdrawiam Bart.
Przerwanie w przerwaniu mozesz zrobic bez problemu, wystarczy, ze w
procedurze obslugi przerwania odblokujesz przerwania, najlepiej
wpierwszej instrukcji. Tylko wez pod uwage, ze czytajac DS1820, czy IR
nie bedziesz wtedy mial zadnych gwarancji co do czasu wykonania
poszczegolnych instrukcji co sie moze fatalnie odbic wszelkich petlach
opozniajacych.
Ale IR mozesz zrobic na UART, ktory jest w ATMega, z DS tez jakos sobie
poradzisz.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
entroper
Guest
Wed May 21, 2008 4:46 pm
Użytkownik "bart" <bpoznanWYTNIJTO@amu.edu.pl> napisał w wiadomości
news:629d.0000001e.48340f97@newsgate.onet.pl...
Quote:
Robie sobie taki zegarek wirujacy (Propeller display) i obsluge
wyswietalania
napisu mam w przerwaniu od transoptora szczelinowego INT0, a na INT1
chcialbym
powiesic IR receiver TSOP1736, a do tego chcialbym jeszcze obsluzyc czujnik
Temp DS18B20 i jakiegos RTC
Do IR możesz, jak słusznie Koledzy wspomnieli, dać UART. Transmisję do RTC
możesz sobie dowolnie przerywać i zawieszać, więc nie ma problemu.
Najwredniejszy będzie 1wire, bardzo wrażliwy na czasy, transmisja nie do
wstrzymania a UART już zajęty

. Masz do wyboru albo tak zorganizować sobie
czas, żeby fragmenty transmisji do DS-a mieć nienaruszalne (fragmenty, bo o
jednorazowym przesłaniu wszystkiego raczej możesz zapomnieć), albo wykrywać
zakłócenie tej transmisji przez przerwanie - oczywiście o ile zapobiegniesz
sytuacji "synchronizowania" się przerwania z transmisją, bo wtedy będziesz
miał długie okresy bez możliwości przesłania czegokolwiek.
e.
Adam Dybkowski
Guest
Wed May 21, 2008 8:48 pm
entroper pisze:
Quote:
Do IR możesz, jak słusznie Koledzy wspomnieli, dać UART. Transmisję do RTC
możesz sobie dowolnie przerywać i zawieszać, więc nie ma problemu.
Najwredniejszy będzie 1wire, bardzo wrażliwy na czasy, transmisja nie do
wstrzymania a UART już zajęty

.
Bo 1wire trzeba zorganizować w przerwaniach (timera + ew. zewnętrzne) a
nie robić na piechotę z opóźnieniami w stylu _delay_us (240) i drżeniem
o każde dodatkowe przerwanie.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
bart
Guest
Wed May 21, 2008 9:20 pm
Nigdy niekonfigurowalem USART'a ale brzmi to bardzo interesujaco, czy sadzicie
ze moznaby go skonfigurowac np do odbioru "RC5" czy tego juz za wiele?
Wiem ze moge sobie tego poszukac ale to potrwa, a niemoge sie juz doczekac
Pozdrawiam!
PS wielkie dzieki za cenne uwagi

.
Quote:
bart wrote:
Czy da sie zrobic wlasnie cos takiego jak w czasie obslugi jednego
przerwania
przyjąć kolejne?
Robie sobie taki zegarek wirujacy (Propeller display) i obsluge
wyswietalania
napisu mam w przerwaniu od transoptora szczelinowego INT0, a na INT1
chcialbym
powiesic IR receiver TSOP1736, a do tego chcialbym jeszcze obsluzyc czujnik
Temp DS18B20 i jakiegos RTC czy dobrze mysle ze uda mi sie to wszystko
obslozyc
jedna malutka atmega8? Program pisze w ASM czy lepiej od razu pomyslec o
rozbudowie hardware'u.
Pozdrawiam Bart.
Przerwanie w przerwaniu mozesz zrobic bez problemu, wystarczy, ze w
procedurze obslugi przerwania odblokujesz przerwania, najlepiej
wpierwszej instrukcji. Tylko wez pod uwage, ze czytajac DS1820, czy IR
nie bedziesz wtedy mial zadnych gwarancji co do czasu wykonania
poszczegolnych instrukcji co sie moze fatalnie odbic wszelkich petlach
opozniajacych.
Ale IR mozesz zrobic na UART, ktory jest w ATMega, z DS tez jakos sobie
poradzisz.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Adam Dybkowski
Guest
Wed May 21, 2008 9:44 pm
Q pisze:
Quote:
mnie uczyli, ze obsluga przerwania ma byc jak najkrotsza,
tzn. ma sie zakonczyc jak najszybciej sie da
To jest jedna strona medalu. Najlepiej w ogóle w przerwaniu tylko
zaznaczyć w globalnej fladze (volatile!), że coś jest do zrobienia - a
właściwą dłuższą robotę przerzucić do głównej pętli programu. Oprócz
oczywiście operacji krytycznych czasowo czyli np. odczyt bajtu z UARTu
czy wysłania kolejnej próbki dźwięku do C/A.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
T.M.F.
Guest
Thu May 22, 2008 2:06 am
bart wrote:
Quote:
Nigdy niekonfigurowalem USART'a ale brzmi to bardzo interesujaco, czy sadzicie
ze moznaby go skonfigurowac np do odbioru "RC5" czy tego juz za wiele?
Wiem ze moge sobie tego poszukac ale to potrwa, a niemoge sie juz doczekac
Pozdrawiam!
PS wielkie dzieki za cenne uwagi

.
Odpowiadaj pod postem.
Poszukaj not aplikacyjnych Atmela, tam jest przyklad jak zrobic RC5 na
UART. Co do 1-wire to jak Adam sugerowal najlepiej odmierzac czas
przerwaniami albo jakos sprytnie wykorzystac timery.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
Guest
Thu May 22, 2008 11:03 am
Quote:
Odpowiadaj pod postem.
Poszukaj not aplikacyjnych Atmela, tam jest przyklad jak zrobic RC5 na
UART. Co do 1-wire to jak Adam sugerowal najlepiej odmierzac czas
przerwaniami albo jakos sprytnie wykorzystac timery.
Przegladalem noty aplikacyjne jedyne co znalazlem o RC5 to AVR410 i AVR415
jedna dotyczy odbioru rc5, ale niestety nie przez USART, a druga to opis
nadajnika RC5 tez nie przez USART. Pierwszą wykorzystalem i program z niej
udalo sie odpalic, tylko ze zjada sporo zasobow: przerwania i timer, a co
najgorsze sporo czasu.
Jesli ktos ma jakiekolwiek materiualy AVR USART <-> RC5 to prosze o podpowiedź.
(Google slabiutko)
Obawiam sie jednak ze harakterystyka rc5, z jego Bifazowym kodowaniem bitow,
chyba bedzie nie do ugryzienia przez UART czy USART, ktory jest jednak
standartem transmisji szeregowej z tego co zdazylem doczytac. Pewnie jedyne co
mi pozostaje to skonstruowac spec. Pilota nadajacego w USART.
Pozdrawiam i milego Weekendu! Bart.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
T.M.F.
Guest
Thu May 22, 2008 2:41 pm
Quote:
Obawiam sie jednak ze harakterystyka rc5, z jego Bifazowym kodowaniem bitow,
chyba bedzie nie do ugryzienia przez UART czy USART, ktory jest jednak
standartem transmisji szeregowej z tego co zdazylem doczytac. Pewnie jedyne co
mi pozostaje to skonstruowac spec. Pilota nadajacego w USART.
Bo to nie chodzi o to, ze dostaniesz z UART gotowy wynik, chociaz w
nowszych ATMegach z USART chyba jest to obslugiwane. Natomiast UART ma
ta mila ceche, ze mozesz go wykorszystac do samplowania danych, zamiast
czekac w petli w obsludze przerwania RxD odczytujesz rejestr danych i
sobie je analizujesz.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
entroper
Guest
Mon May 26, 2008 5:53 pm
Użytkownik "Adam Dybkowski" <adybkows12@45wp.pl> napisał w wiadomości
news:g11u86$ogf$3@news.wp.pl...
Quote:
Bo 1wire trzeba zorganizować w przerwaniach (timera + ew. zewnętrzne) a
nie robić na piechotę z opóźnieniami w stylu _delay_us (240) i drżeniem
o każde dodatkowe przerwanie.
Oczywiście o ile ma się to przerwanie do dyspozycji i jest ono na najwyższym
priorytecie (jest nieprzerywalne i jest w stanie przerywać inne przerwania).
Inaczej też będzie drżenie o każde dodatkowe przerwanie :)Delaye między
bitami, bajtami itd to rzecz zupełnie drugorzędna, najważniejszy jest reżim
czasowy dla pojedynczego bitu (szczególnie odbierania przez mastera, bo
rozrzuty produkcyjne zeżarły prawie cały dopuszczalny margines).
A generalnie chodzi o to, że dodanie 1 wire do bardzo "zajętego" programu może
być bardziej kłopotliwe, niż się autorowi wątku wydaje.
BTW, nie używam _delay_xx, bo szkoda mi czasu

ale taką metodą spokojnie da
się obsłużyć 1-wire, o ile oczywiście ma się kontrolę nad programem.
e.