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



Teraz jest 13 sie 2026, o 23:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 31 paź 2015, o 18:59 
Offline
Nowy

Dołączył(a): 27 paź 2015
Posty: 6
Pomógł: 0

Mam taką oto działającą pętlę- chodzi o zapalanie w kolejności kolejnej diody LED:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I dysponuje skonfigurowanym Timerem 200Hz:

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


Chciałbym zamienić funkcję delay w pętli abym nie zatrzymywał całego programu tylko żeby pętla wykonywała się wolniej. Jak to zrobić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2015, o 19:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Potrzebny Ci prosty timer programowy na dodatkowej zmiennej. Czytałeś BB?

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2015, o 22:13 
Offline
Nowy

Dołączył(a): 27 paź 2015
Posty: 6
Pomógł: 0

Jestem w trakcie a mógłbyś mi podać jak wyglądałby kod? Chce na prostym przykładzie to zrozumieć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2015, o 22:24 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

jeśli mogę wtrącić to niech szanowny Kolega zerknie tutaj topic1648.html
myślę iż ten temat rozjaśni niejasności jeśli jednak wprowadzam zamieszanie , proszę o zignorowanie postu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2015, o 23:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

O, kolega @SunRiver chyba swoim linkiem wskazał wszystko w tym temacie.
Zacznij coś pisać, pokaż kod i będziemy dyskutować dalej :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2015, o 21:05 
Offline
Nowy

Dołączył(a): 27 paź 2015
Posty: 6
Pomógł: 0

Chłopaki ale ja ogarniam to co jest tam napisane, chodzi mi o zastosowanie tego w pętli for. Jakieś wskazówki oprócz tego, że należy to zrobić na Timerze programowym.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2015, o 22:13 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

ja sobie delaye robię np tak ....

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


ewentualnie .....

na kilkadziesiąt różnych sposobów ... zależnie co jest mi potrzebnie
więc ... jak dobrze przemyślisz działanie timera będziesz wiedział jak użyć go jako swój delay ...
co jest proste w sumie ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2015, o 22:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

SunRiver napisał(a):
ja sobie delaye robię np tak ....

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




Przepraszam jeśli wprowadzam zamieszanie, ale..
A nie powinno być int32_t i; lub nawet uint32_t ? Przecież int to short int (int16_t), zakres -32768 do 32767 (2 bajty).
Dla potrzeb tej funckji Delay() przydałoby się użyć uint32_t (long int), zakres 0 do 4294967295 (4 bajty).
Oczywiście mowa o AVR GCC, bo przecież o dział "Język C dla AVR" chodzi. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2015, o 23:21 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

anshar napisał(a):
Przepraszam jeśli wprowadzam zamieszanie, ale..


ależ nie wprowadzasz zamieszania , niemniej wprowadziłem sobie małe uproszczenie ....
jak widać łatwe do wykrycia ...:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2015, o 08:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

@mateusz1364, zapewne chodzi o nieblokujące miganie, a więc w przerwaniach musisz mieć coś w tym stylu:

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


Jeśli przerwania będą wywoływane, np. co 100ms to jednostką czasową dla pętli głównej będziesz miał właśnie to 100ms czyli aby nie blokować czasu dla całej pętli, a tylko moment, w którym masz kolejną zmianę świecenia led potrzebujesz coś takiego jak poniżej:

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


Teraz zrób testy i przeanalizuj wszystko.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2015, o 00:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Takie połączenie pętli for i timera programowego jest wg mnie trochę bez sensu z dwóch powodów.

Po pierwsze. Program po wejściu do pętli for będzie w niej "siedział" tak długo aż ta pętla się nie skończy. Reszta programu w tym czasie nie będzie się wykonywać nawet jeśli wewnątrz pętli będzie zastosowany timer programowy. Bo co z tego, że wewnątrz jest timer programowy skoro program kręci się we wnętrzu pętli for. Jeśli taka pętla trwała by np. 3 sekundy to na ten czas program zostaje niejako "uwięziony" w jej wnętrzu.

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

W tym przypadku jeśli zmienna Timer3 będzie różna od zera to pętla bardzo szybko przejdzie wszystkie swoje obiegi i zakończy swój żywot.

Ale instrukcja
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nie wykona się bo warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nie będzie spełniony.

Zamiast pętli for użył bym takiej konstrukcji
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 lis 2015, o 00:12 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27464
Lokalizacja: Szczecin
Pomógł: 1045

mateusz1364 napisał(a):
uint8_t i, liczba=1;
for(i=0;i<8;i++)
{
        PORTB=liczba;
 
        liczba=liczba*2;
        _delay_ms(200);
 
}


to jest podejście, które określiłbym "DO GÓRY NOGAMI" i kompletnie nie ma sensu na siłę próbować tego rozwiązać z pętlą for i timerem programowym żeby zastąpić delay_ms - bo wychodzą potworki ;)

Tak jak pisze mniej więcej na końcu jacekk232, albo i tak

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


I masz "latającą" diodę LED po całym PORTB ;) .... to już nie jest "Do góry nogami" ... a nie trzeba żadnej pętli for().

------------------------ [ Dodano po: 4 minutach ]

Można jeszcze tak ;) z wykorzystaniem sierżanta :lol:

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


co to jest sierżant ? ;) warto zajrzeć na bloga do wersji wojskowej
http://mirekk36.blogspot.com/2012/10/ro ... skowa.html

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2015, o 11:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Cytuj:
Takie połączenie pętli for i timera programowego jest wg mnie trochę bez sensu z dwóch powodów.


Ja wiem, że takie połączenie jest bezsensowne (dokładnie w tym przypadku, bo przecież w pętli mogły by się akurat wykonywać poza timerem jeszcze inne działania), ale @mateusz1364 chciał zobaczyć zasadę zastępowania delay przez timer programowy (widać link Sun'a go nie przekonał). Założyłem, że całość kodu rozpoczyna się standardowo po bożemu od while(1) co w takiej sytuacji i tak by wszystko działało (co prawda raz ale działało) o ile zmienna liczba wyrzucona by była przed to while.
Generalnie ja tu widzę złe początki, bo rozpoczynanie programu od pętli nieskończonej wydaje się być standardem (poza nielicznymi wyjątkami) i na takich podstawach @mateusz1364 się powinien również skupić.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2015, o 11:43 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27464
Lokalizacja: Szczecin
Pomógł: 1045

SylwekK napisał(a):
Ja wiem, że takie połączenie jest bezsensowne

Ja tego nie pisałem broń Boże do ciebie ;) ... tylko do autora wątku ....

A myślę, że każde z rozwiązań które tu zostało podane przyda mu się do lepszego zrozumienia - jak należy podchodzić do tematu ....

Bo te timery programowe wystarczy tylko RAZ załapać i nagle okazuje się CUD ;) a człowiek później tego nie zapomina tak jak jazdy na rowerze ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2015, o 12:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

mirekk36 napisał(a):
Bo te timery programowe wystarczy tylko RAZ załapać i nagle okazuje się CUD a człowiek później tego nie zapomina tak jak jazdy na rowerze


Bo to prawda! Nie wiem czy Ci to już mówiłem kiedyś, ale to jakoś dawno temu jeszcze w moich początkach bascomowych w jakimś temacie na elektrodzie to TY zaproponowałeś takie właśnie rozwiązanie, które momentalnie mi się spodobało i stosuję do dzisiaj :)

_________________
http://www.sylwekkuna.com



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Baidu [Spider] i 4 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