[BASCOM] Przerwania a program główny...
-
piotrek7700
- Użytkownik
- Posty: 105
- Rejestracja: 09 mar 2006, 8:15
- Lokalizacja: Leszczyna
- Kontakt:
[BASCOM] Przerwania a program główny...
chciałbym w sterowniku do przedwzmacniacza wykorzystać wewnętrzne przerwania od timera 2 (w mega 16 lub 32) . pytanie nie daje mi spać "czy jak będę się komunikował i2c, odbierał rc5, komunikował się przez 1 wire, korzystał z uart, to czy przerwanie zakończy proces nadawania czy najpierw skończy nadawać a dopiero później przejdzie do zliczenia impulsów?
pozdrawiam
pozdrawiam
Ostatnio zmieniony 01 sty 1970, 1:00 przez piotrek7700, łącznie zmieniany 1 raz.
Re: przerwania a program główny...
Mikrokontroler jest układem integrującym w jednej obudowie sam mikroprocesor i urządzenia pefyferyjne i należy je rozpatrywać niezależnie. Przerwanie dotyczy mikroprocesora, czyli tej części, która wykonuje program. Układy peryferyjne są sterowane przez mikroprocesor ale pracyją od niego niezależnie. Przykładowo UART, który dostał polecenie wysłania znaku jest już nie do zatrzymania. Tak samo zachowają się wszystkie inne zespoły mikrokontrolera. Podobnie w przypadku I2C. Jeżeli użyjesz sprzętowego kontrolera, to nić nie zaburzy transmisji. Jeżeli będziesz realizował transmisję I2C w sposób programowy, tj. napiszesz program, który będzie tak sterował wyprowadzeniami, że przebieg będzie zgodny z wymogami stanrardu I2C, to przerwanie może przeszkadzać w generowaniu odpowiednich sygnałów, jednak nie zawsze jest to na tyle krytyczne, że transmisja "się urwie".lowelas7700 pisze:chciałbym w sterowniku do przedwzmacniacza wykorzystać wewnętrzne przerwania od timera 2 (w mega 16 lub 32) . pytanie nie daje mi spać "czy jak będę się komunikował i2c, odbierał rc5, komunikował się przez 1 wire, korzystał z uart, to czy przerwanie zakończy proces nadawania czy najpierw skończy nadawać a dopiero później przejdzie do zliczenia impulsów?
pozdrawiam
-
piotrek7700
- Użytkownik
- Posty: 105
- Rejestracja: 09 mar 2006, 8:15
- Lokalizacja: Leszczyna
- Kontakt:
jeżeli użyje sprzętowego kontrolera.... czyli jak w programie głównym wywołam funkcje ic2start to wyśle wszystkie dane przez i2c i dopiero później zliczy impuls? bo chciałbym wbudować prosty układ zliczający impulsy co sekundę...peryferyjny układ rtc nie wchodzi w rachube bo nie potrzeba mi wyświetlania godziny tylko żeby zliczał kwadranse i zmienił stan jednej ze zmiennych. chciałbym aby to była w miarę równy kwadrans...
a jeśli program będzie w trakcie odbioru rc5 i nadejdzie przerwanie?
a jeśli program będzie w trakcie odbioru rc5 i nadejdzie przerwanie?
To oprogramuj to tak, aby po nadejściu przerwania ustawić sobie jakąślowelas7700 pisze:a jeśli program będzie w trakcie odbioru rc5 i nadejdzie przerwanie?
zmienną (flagę) i tak szybko jak się da obsługę przerwania zakończyć.
Wtedy czas obsługi będzie krótki i to nie będzie zakłócało transmisji lub innych zadań.
A w programie głównym zerkasz sobie na tę flagę kiedy masz akurat czas,
robisz to co trzeba - gdy ona się zmieni. A potem ją zerujesz...
N.
Jaki impuls?lowelas7700 pisze:jeżeli użyje sprzętowego kontrolera.... czyli jak w programie głównym wywołam funkcje ic2start to wyśle wszystkie dane przez i2c i dopiero później zliczy impuls?
Można zaprogramować licznik/zegar by zliczał impulsy zegara systemowego (po wstępnym podzieleniu) i przepełnienie się licznika było sygnałem przerwania. Dobierając odpowiednio stopień podziału wstępnego dzielnika można uzyskać sygnał przerwania co jakiś czas. Licznik zawsze będzie liczyć, jest zespołem autonomicznym, i co jakiś czas będzie zgłaszać sygnał przerwania. Jeżeli mikroprocesor w danej chwili ma zablokowane przyjmowanie przerwań, to ono "się zakolejkuje" i zostanie obsłużone w najbliższym możliwym czasie. W obsłudze przerwania możesz zliczać liczbę wywołań i w ten sposób odmierzać czas.lowelas7700 pisze:bo chciałbym wbudować prosty układ zliczający impulsy co sekundę...peryferyjny układ rtc nie wchodzi w rachube bo nie potrzeba mi wyświetlania godziny tylko żeby zliczał kwadranse i zmienił stan jednej ze zmiennych. chciałbym aby to była w miarę równy kwadrans...
Co znacza w miarę równy kwardans. Jeżeli uzyskasz przerwanie co 1 ms i nie zgubisz zadnego przerwania, to mierzysz czas z dokładnością 1ms. Czy to jest wystarczająca dokładność?lowelas7700 pisze:chciałbym aby to była w miarę równy kwadrans...
Jażeli nie jest zablokowana możliwość przyjmowania przerwania, to mikroprocesor przejdziee do jego obsługi, czyli aktualnie wykonywany program zostaje zawieszony na czas obsługi przerwania. Z tego powodu obsługa przerwań powinna być nak najkrótsza. Jeżeli zablokujesz przyjmowanie przerwań, to zostanie oni obsłużone później (po umożliwieniu ich przyjmowania). Jeżeli licznik/zegar zgłasza przerwanie przykładowo co 1 ms, ty, przy okazji obsługi RC5 zablokujesz przyjmowanie przerwań na czas dłuższy, to możesz zgubić sygnał o upłynięciu czasu 1ms. Jeżeli blokada przerwań będzie wystarczająco krótka, a przerwanie od upływu czasu przyjdzie w trakcie, to nic się nie stanie. Możesz to sobie wyobrazić jako: raz dostaniesz przerwanie po 1.5 ms ale bastępne będzie po 0.5 ms, co sumatycznie i tak odmierzy czas 2 ms.lowelas7700 pisze:a jeśli program będzie w trakcie odbioru rc5 i nadejdzie przerwanie?
-
piotrek7700
- Użytkownik
- Posty: 105
- Rejestracja: 09 mar 2006, 8:15
- Lokalizacja: Leszczyna
- Kontakt:
procek będzie chodził (w zasadzie juz jest na płytce uniwersalnej ) na 16 MHz to przerwanie od timera i zwiększenie o 1 jakiejś zmiennej zajmie "trochę mniej niż chwilunie"...
ok. kolejne pytanie...jeśli użyję uart (rs232) to co będzie jeśli w jeden uC zacznie wysyłać dane, a drugi będzie w zupełnie innym miejscu i nie będzie zamierzał odbierać danych? czy jeśli jeden zacznie nadawać to drugi automatycznie przeskoczy do odbioru danych? czy odbierze dane przechowa je przez chwilę i dopiero kiedy program główny będzie chciał je otrzymać to zostaną przekazane?
pozdrawiam. może dla wielu z Was to banalne pytania ale dla mnie łączność przez rs232 będzie krokiem milowym....
[ Dodano: 2007-03-20, 14:37 ]
impuls w sensie przerwania i przejścia do
incr sekund
ok. kolejne pytanie...jeśli użyję uart (rs232) to co będzie jeśli w jeden uC zacznie wysyłać dane, a drugi będzie w zupełnie innym miejscu i nie będzie zamierzał odbierać danych? czy jeśli jeden zacznie nadawać to drugi automatycznie przeskoczy do odbioru danych? czy odbierze dane przechowa je przez chwilę i dopiero kiedy program główny będzie chciał je otrzymać to zostaną przekazane?
pozdrawiam. może dla wielu z Was to banalne pytania ale dla mnie łączność przez rs232 będzie krokiem milowym....
[ Dodano: 2007-03-20, 14:37 ]
impuls w sensie przerwania i przejścia do
incr sekund
To, że UART odbierze znak może być sygnałem przerwania. Jego obsługa powinna sprowadzić się do jego odczytu z rejestru odbiornika (bo następne przerwanie nadpisze znak i poprzedni zostanie utracowny) i zachowania go w pamięci do poźniejszego użycia. NIGDY nie należy liczyć, że obierzesz znak we właściwym momencie. W programie odbierającym należy sprawdzić, czy w buforze jest przechowywany znak i ewentualnie go pobrać z bufora w pamięci.lowelas7700 pisze:procek będzie chodził (w zasadzie juz jest na płytce uniwersalnej ) na 16 MHz to przerwanie od timera i zwiększenie o 1 jakiejś zmiennej zajmie "trochę mniej niż chwilunie"...![]()
ok. kolejne pytanie...jeśli użyję uart (rs232) to co będzie jeśli w jeden uC zacznie wysyłać dane, a drugi będzie w zupełnie innym miejscu i nie będzie zamierzał odbierać danych? czy jeśli jeden zacznie nadawać to drugi automatycznie przeskoczy do odbioru danych? czy odbierze dane przechowa je przez chwilę i dopiero kiedy program główny będzie chciał je otrzymać to zostaną przekazane?
pozdrawiam. może dla wielu z Was to banalne pytania ale dla mnie łączność przez rs232 będzie krokiem milowym....
PS
W jakim języku chcesz programować procka?
-
piotrek7700
- Użytkownik
- Posty: 105
- Rejestracja: 09 mar 2006, 8:15
- Lokalizacja: Leszczyna
- Kontakt:
-
piotrek7700
- Użytkownik
- Posty: 105
- Rejestracja: 09 mar 2006, 8:15
- Lokalizacja: Leszczyna
- Kontakt: