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



Teraz jest 17 kwi 2026, o 00:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 2 mar 2015, o 18:47 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Witam. jestem początkującym programistą. Z chęci nauki i zdobywania wiedzy praktycznej postanowiłem zbudować a raczej zaprogramować stoper. Zainspirowany tematem kolegi:
topic4399.html

Zaczołem próbować własnych sił, nie długo było trzeba czekać by napotkać na problemy. Czy po wpisaniu funkcji:

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


Nie powinna zmienna s, zwiększać się co jeden aż do 60?? No u mnie jest tak, że odrazu pojawia się wartość 60. O czym zapomniałem??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2015, o 18:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 sty 2014
Posty: 39
Lokalizacja: Pszczyna
Pomógł: 4

Jedyne opóźnienie zastosowałeś przed główną pętlą, czyli program wyświetla napis Stoper, czeka 1 sekundę i wskakuje do pętli gdzie z pełną prędkością odlicza do 60 bez opóźnień.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2015, o 19:00 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

No racja. Ale jak się do tego zabrać ?? Jeżeli wcześniej uruchomię timer to będzie się on odnosił do pętli while??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2015, o 19:07 
Offline
Użytkownik

Dołączył(a): 16 sty 2015
Posty: 84
Pomógł: 6

Polecam poczytać o przerwaniach, co to jest i jak z tego korzystać (można też obejrzeć poradniki Mirka w tym temacie).
Poczytać o timerze samym w sobie i jak generować przerwania w określonych odstępach czasu.

Jak już to zrobisz proponuję żebyś w przerwaniach generowanych mniej wiecej co sekundę (w miarę rozwijania projektu poprawiać dokładność) inkrementował swój licznik. Pamiętaj o volatile - również do przeczytania na blogu Mirka.



Ostatnio edytowano 2 mar 2015, o 19:18 przez rekon, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2015, o 19:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 sty 2014
Posty: 39
Lokalizacja: Pszczyna
Pomógł: 4

Funkcja _delay_ms() nie uruchamia żadnego timera, ona po prostu wprowadza procesor w stan bezczynności. Dopisz _delay_ms(1000) na końcu pętli co spowoduje, że po dodaniu i wyświetleniu liczby procesor odczeka każdorazowo 1 sekunde.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2015, o 19:22 
Offline
Użytkownik

Dołączył(a): 16 sty 2015
Posty: 84
Pomógł: 6

o kurcze, przepraszam nie zrozumiałem zamysłu projektu i "timer" mnie zmylił. Oczywiście rozwiązanie kolegi szymon12w na tym etapie będzie oczywiście najlepsze. Tak jak zostało wspomniane _delay_ms(1000) to funkcja która mówi procesorowi aby w danym miejscu zatrzymać wykonywanie programu na 1000 ms czyli 1 s (delay = opóźnienie), a następnie zacząć kolejną instrukcję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2015, o 16:33 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Witam ponownie. Jestem aktualnie po poradniku o przerwaniach Pana Mirka, no można powiedzieć nie jestem taki zielony jak poprzednio. Ale czegoś mi jeszcze brak mam nadzieję, że pomożecie :D

Chce zrobić stoper, póki co zrobiłem zmienna która liczy sekundy i chciałem aby na wyświetlaczu były wyświetlone same sekundy.O to mój kod:

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


Ustawione PINY jako wyjścia, to po prostu tak dla testów także proszę się nie dziwić. Gdzie mój problem ?? A na w ustawieniu czasów. Bo na wyświetlaczu oczywiście wszystko się wyświetla zmienna s i zliczanie sekund jest. Tylko z taka zawrotną prędkością, jak poradzić sobie z ustawieniem czasu zliczania impulsów (przerwania) jak mam tylko takie dzielniki: 1024, 256, 64, 8. Zliczanie sekund więc częstotliwość jaka powinienem uzyskać to 1Hz. Ale nie mam pojęcia jak to ustawić. Proszę Was o rady :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2015, o 20:20 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Prędkość mojego MCU to 1000000 Hz. Bardzo przepraszam za nie zastosowanie Twoich rad, może to dlatego że niektórych nie rozumiem.

1. Wstawiłem _delay_ms w funkcję { ...}, faktycznie prędkość wykonywanej operacji spadała, ale nie rozumiem na jakiej zasadzie to działa. Jak to obliczyć, żeby przerwanie wystąpiło co 1 sek ?
2. Zmienną uint_t wstawiłem jako globalną, bo gdy wstawiam do funkcji main wektor przerwania nie wie co to jest ta zmienna "s".
3. Napisałem while(1) po prostu z przyzwyczajenia.

Przepraszam, jeśli uraziłem. To naprawdę nie chcący, błędy nie wynikają z olewczego podejścia tylko raczej z braku wiedzy. Przepraszam jeszcze raz :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2015, o 22:03 
Offline
Użytkownik

Dołączył(a): 16 sty 2015
Posty: 84
Pomógł: 6

jest fajna praktyka - jak ktoś Ci coś radzi a Ty nie rozumiesz zapytaj o to czego nie rozumiesz ;) Ty się czegoś dowiesz a pomagający Ci będzie miał jakiekolwiek podstawy do tego żeby wierzyć że czytasz ze zrozumieniem - a uwierz z tym czasem jest ciężko

czy Ty wiesz co robi każda z Twoich linijek kodu jedna po drugiej?
Jest fajna metoda której mnie uczono podczas przyswajania programowania :
"metoda gumowej kaczuszki" czyli tłumaczysz kaczuszce swój kod tak długo aż ona kiwnie głową że rozumie ;) chodzi o to że przy prostych programach można analizować każdą linijkę osobno i wtedy na pewno zrozumiesz gdzie masz błąd

mokrowskiego nie jest tak łatwo urazić całe szczęście :) przynajmniej mam taką nadzieję...

ogólnie w momencie w którym była mowa o likwidacji zmiennych globalnych (o czym sam muszę doczytać) nie było jeszcze mowy o przerwaniu... I lepiej zrobisz jak narazie zrozumiesz kod bez przerwania - przerwanie to następny etap... na razie zrób to wszystko na delayach (to takie moje subiektywne zdanie) ja wyskoczyłem z tymi przerwaniami bo nie do końca zrozumiałem pierwszy post odpowiednio. Przerwania to nic strasznego ale najpierw ogarnij C samo w sobie a później walcz kolejno z możliwościami procka



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 1 gość


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