Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki
Teraz jest 15 lis 2019, o 18:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 7 maja 2017, o 22:26 
Offline
Nowy

Dołączył(a): 07 maja 2017
Posty: 7
Pomógł: 0

Cóż, nie wiedziałem jak dokładnie zatytułować wątek więc napisał jak napisałem...

Mikrokontroler to Atmega32 taktowana zewnętrznym kwarcem 8MHz
Mam taki oto szkielet programu w którym w pętli Do zagnieżdżona jest pętla While

Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wiadomo, że jeśli warunek nie jest spełniony to program cały czas krąży w pętli while.

Równocześnie z pętlą while program wykonuje inne zadania - m.in.:
- obsługa wyświetlacza
- zwiększanie pięciu liczników (co sekundę)
- pomiar i uśrednianie ADC na jednym kanale
Te 3 zadania wykonuję w przerwaniu od TIMER0 - co 1 sekundę

Wszystko działa, ale nadszedł czas na modyfikację programu.
Musiałem dodać obsługę klawiatury oraz...komunikację przez UART...
Dodałem obsługę tych dodatkowych instrukcji w przerwaniu od timera0 i działa, ale wydaje mi się, że za dużo tego się dzieje w tym przerwaniu.

Pytanie do Was:
Jak usprawnić cały program i urządzenie żeby trochę odciążyć ilość tych operacji w tym przerwaniu?

Czy dodanie kolejnego przerwania od TIMER2 i wrzucenie tam niektórych funkcji coś pomoże?
Chciałbym zwiększyć częstotliwość taktowania do 16MHz - czy to dobry pomysł?

Czy jest jakaś inna możliwość usprawnienia działania takiego programu?



Ostatnio edytowano 7 maja 2017, o 23:09 przez Qume, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2017, o 07:16 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 902
Pomógł: 61

Generalnie w przerwaniu powinieneś ustawić tylko flagę na 1 a w pętli głównej sprawdzać jej stan i gdy jest równy 1 wtedy wykonujesz wszystkie zadania jakie teraz masz w przerwaniu. Jeżeli przerwania jest zgłaszane co sekundę to tych zadań w pętli głównej może być naprawdę dużo :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2017, o 09:18 
Offline
Użytkownik

Dołączył(a): 19 lip 2013
Posty: 553
Pomógł: 30

Na zwykłym IF Then możesz się pozbyć pętli while. Co do przerwań to tak jak wyżej napisane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2017, o 16:27 
Offline
Nowy

Dołączył(a): 07 maja 2017
Posty: 7
Pomógł: 0

Jarecki napisał(a):
Generalnie w przerwaniu powinieneś ustawić tylko flagę na 1 a w pętli głównej sprawdzać jej stan i gdy jest równy 1 wtedy wykonujesz wszystkie zadania jakie teraz masz w przerwaniu. Jeżeli przerwania jest zgłaszane co sekundę to tych zadań w pętli głównej może być naprawdę dużo :)


Chciałbym tak zrobić jak piszesz bo to by było super rozwiązanie (czasem je stosuję w innych programach bez pętli while), ale jak wspominałem pętla główna u mnie do załączenie podświetlenia i od razu skok do pętli while a z pętli while do pętli Do program "wyskakuje" tylko na chwilę i to w różnych odstępach czasu.
Na początku co 10 sekund a potem nawet co 30 minut... - tyle trwają procesy które wykonują się w pętli while.

Jeszcze jedno pytanie odnośnie Bascomowego symulatora.
Czy spotkał się ktoś z tym, że symulator krąży sobie tylko w pętli Do Loop a nie skacze do przerwań od timera?
Mam właśnie taki przypadek.
Próbowałem nawet na innym programie - pętla Do robi coś tam a w przerwaniu powinien się zwiększać jakiś tam licznik (zmienna Word) i niestety w symulatorze nic się z tą zmienną nie dzieje...Dlaczego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO