Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 4 mar 2025, o 22:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 3 kwi 2016, o 16:53 
Offline
Nowy

Dołączył(a): 03 kwi 2016
Posty: 23
Pomógł: 0

Witam. Jestem nowym użytkownikiem tego forum, założyłem ten wątek ponieważ chciałbym prosić Was o sprawdzenie dwóch programów opartych o przerwania. Jeden ma za zadanie przy wciśniętym klawiszu PD3 mikrokontrolera ATmega16 zmienić stan diody PB6. Wklejam dwie wersje jedną z "eliminacją" zjawiska drgań styków, drugą bez tego rozwiązania (nie jestem pewny czy dobrze robię umieszczając w przerwaniu "_delay"). Drugi program ma za zadanie "przesuwać" diody w lewą stronę (w pętli). Zdaje sobie z tego sprawę, że dobrana przeze mnie częstotliwość będzie wynosić około 25Hz, jednak chodzi mi o sprawdzenie poprawności kodu tego programu (dołączam oba pliki tego programu: main.c oraz d_led.c).

Program pierwszy (eliminacja drgań styków):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Program pierwszy (bez "eliminacji" drgań):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


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


Pozdrawiam i czekam na odpowiedzi :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 17:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
nie jestem pewny czy dobrze robię umieszczając w przerwaniu "_delay"

Źle, a nawet bardzo źle robisz. Procedura przerwania powinna trwać maksymalnie krótko, bo w tym czasie wstrzymywane są inne działania kodu.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 17:03 
Offline
Nowy

Dołączył(a): 03 kwi 2016
Posty: 23
Pomógł: 0

Czyli ta wersja bez uwzględnienia tego zjawiska jest ok? Jak drugi program?

Zauważyłem, że nie zadeklarowałem pinów portu jako wyjścia (w pliku d_led.c), a także nie wygasiłem ich (w domyśle diod LED) na starcie programu w związku z tym w należało by jeszcze dołączyć następujący kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 17:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Eliminację drgań styków powinieneś zrobić. Mirek na swoim blogu i video poradnikach o tym pisze.

W drugim programie w przerwaniu sterujesz 4 pinami, ale do modyfikujesz cały port C. Jak robisz to świadome, to OK. Ale możesz się na tym kiedyś przejechać, jak coś podłączysz na dalsze piny.
Dodatkowo przy starcie programu zaczynasz sekwencję nie od 1 tylko od 2. Także nie wpływa to na działanie, ale do czasu jak będziesz musiał przelatywać po starcie po kolei od 1 do 8 (zależnie do czego ma służyć ten kod).

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 18:04 
Offline
Nowy

Dołączył(a): 03 kwi 2016
Posty: 23
Pomógł: 0

Skorzystałem właśnie z jego przykładu na eliminację drgań. Nie znalazłem w bluebooku innych przykładów.. Jeśli chodzi o drugi program nie rozumiem dlaczego zaczynam od 2. Zmienna licznik na samym początku ma wartość 1, binarnie ...01. Czy o to chodzi? Kod ma za zadanie zmieniać stan poszczególnych pinów portu C na 1, 2, 4, 8 w pętli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 18:45 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Nie tylko z bluebooka się ucz, ale także masz blog Mirka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 19:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Jeśli chodzi o drugi program nie rozumiem dlaczego zaczynam od 2. Zmienna licznik na samym początku ma wartość 1, binarnie ...01. Czy o to chodzi? Kod ma za zadanie zmieniać stan poszczególnych pinów portu C na 1, 2, 4, 8 w pętli.
Twoja pętla wystawia na port C w pętli stan na piny 2, 4, 8, 1. Zaczynasz od wartości 2 a nie jeden, bo najpierw inkrementujesz a potem wystawiasz. Ma to tylko znaczenie przy pierwszym wystawieniu o ile coś to u Ciebie zmienia. Jak to będzie sterowanie segmentami LED, to na nic nie wpłynie. Ale jakby to było sekwencyjne wyzwalanie jakiś zależnych zdarzeń to mogło by mieć znaczenie. Chodzi o to byś wiedział i to robił świadomie.

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 20:35 
Offline
Nowy

Dołączył(a): 03 kwi 2016
Posty: 23
Pomógł: 0

Teraz rozumiem, rzeczywiście nie zwróciłem na to uwagi. Dziękuje za odpowiedzi. Temat do zamknięcia.



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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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