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



Teraz jest 7 kwi 2026, o 14:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 14 maja 2014, o 20:20 
Offline
Użytkownik

Dołączył(a): 21 sie 2013
Posty: 43
Lokalizacja: Siekierczyn
Pomógł: 0

Witam
Chcę sterować diodą LED w ten sposób:

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


Chcę się pozbyć delay i zrobić to na nie blokujących przerwaniach.
Oczywiści można tak:

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


ale czasy między LED_ON a LED_OFF są różne i nie działa tak jak trzeba. Jestem jaszcze początkujący i nie wiem jak mam sobie z tym poradzić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 20:57 
Offline
Użytkownik

Dołączył(a): 05 gru 2012
Posty: 67
Lokalizacja: Warszawa
Pomógł: 4

Podpowiem tak:
skonfiguruj Timer tak żeby generował przerwanie co określony czas np. 1ms, w obsłudze przerwania zliczaj zmienną np. licznik i jak licznik zliczy do 100, zwiększ zmienną np. flaga o 1, czyli flaga będzie się zwiększać co 100ms.

W pętli głównej programu sprawdzaj zmienną flaga (oczywiście musi być typu volatile) i tak :
jeżeli flaga==3 LED_OFF;//opóźnienie 300ms
jeżeli flaga==4 LED_ON;// 300ms+100ms
jeżeli flaga==8 LED_OFF;//300ms+100ms+400ms

na końcu (po wszystkich warunkach) zerujemy zmienną flaga.

itd.
przepraszam za takie opisowe rozwiązanie, ale chodziło mi o przedstawienie samej idei, powinieneś dać radę, jeżeli nie to napiszę kawałek programu.

pozdrawiam
Wojtek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Pomysl na szybko to

mozesz zrobic Timer3=y nad LED_TOG wstawic x++; a ponizej. If x = 0 to y = 300
If x = 1 to y = 100 i tak do x 4 i w ostatnim ifie kasowax x do 0

Wysłane z telefonu

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 21:17 
Offline
Moderator
Avatar użytkownika

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

Andrzej1980 napisał(a):
ale czasy między LED_ON a LED_OFF są różne i nie działa tak jak trzeba. Jestem jaszcze początkujący i nie wiem jak mam sobie z tym poradzić.


można też sobie zrobić tablicę czasów np:

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



i potem

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

_________________
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: 16 maja 2014, o 21:55 
Offline
Użytkownik

Dołączył(a): 21 sie 2013
Posty: 43
Lokalizacja: Siekierczyn
Pomógł: 0

Złożyłem wszystko w całość i kod działa tak jak trzeba pod Atmega8 oczywiście. Wygląda to tak:

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


Ale jak przerobie tak:
Czyli rozdzielę tablice czasy na dwie części ( funkcje) to już nie działa tak jak trzeba. Nie rozumiem dlaczego

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


------------------------ [ Dodano po: 13 minutach ]

Podejrzewam, że gdybym to zrobił na osobnych timerach sprzętowych to by działało. Timety programowe tak jakby na siebie nachodzą i dlatego te nieprawidłowe działanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 maja 2014, o 23:00 
Offline
Moderator
Avatar użytkownika

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

Andrzej1980 napisał(a):
Timety programowe tak jakby na siebie nachodzą i dlatego te nieprawidłowe działanie


Timery na siebie nie nachodzą :( ... ty nachodzisz panie kochany jako programista .... takich "cosiów" to można ze 200 zrobić .... tylko trzeba pogłówkować ;) ... pokazałem jak zacząć, reszta należy do ciebie .... bo na dwóch timerach sprzętowych przy takim podejściu wyjdzie ci ten sam misz-masz, a ciekawe co byś zrobił jakby potrzeba było 4 albo 5 efektów ? ... hmmm ??? skąd tyle sprzętowych timerów? ... pewnie trzeba byłoby po jakiś ARM sięgnąć ?

nie nie .. nie tędy droga ... cała przyjemność to dobrze zrozumieć działanie timerów a później je stosować ....

w Bluebooku masz poza tym pokazane jak stosować timery programowe w kilku wariantach i jak np synchronizować niejako czas pomiędzy nimi ;) .... więc do dzieła

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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