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



Teraz jest 24 kwi 2024, o 08:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 25 cze 2017, o 10:38 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Witam. Mam problem z wykonaniem programu do sterowania 2 LED.
Mikrokontroler z którego mają być sterowane diody to Attiny13.
Porty PB0=LED1 ; PB1=LED2.
Częstotliwość: ok 5kHz. (9.6MHz + preskaler 8)
PWM z rozdzielczością 0-255.
Zasada działania:
1.Przy włączeniu zasilania obie LED wyłączone,
2.LED1 załącza się poprzez PWM 0-255 przez czas 120sekund.
3.Jeśli LED1=128 to załącza się LED2 poprzez PWM 0-255 przez czas 120 sekund.
4.Jeśli LED1=255 to świeci ciągle przez czas 120 sekund.
5.Jeśli LED2=255 to świeci ciągle przez czas 120 sekund.
6.Jeśli minie czas 120 sekund ciągłego świecenia LED1 to LED1 zaczyna się wyłączać 255-0 przez czas 120 sekund.
7.Jeśli LED1=128 to zaczyna wyłączać się LED2 255-0 przez czas 120 sekund.

I program w pętli od 2 do 8 punktu.

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: 25 cze 2017, o 11:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1021
Lokalizacja: Trójmiasto
Pomógł: 189

bobuss88 napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
takiego tworu nie stosujemy w kodzie tylko w ustawieniach projektu.

A tak poza powyższym to nie napisałeś w czym ten problem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2017, o 12:05 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Mam ustawione porty PB0 oraz PB1 w trybie "normalnym". Nie wiem w jaki sposób zmienić żeby w pierwszej kolejności obie Led się rozjaśniały z różnicą czasową między sobą. Oraz żeby "zpauzować" jedną led żeby świeciła ciągle 120 sekund , a druga led rozjaśniała się dalej poprzez PWM. Attiny13 ma jeden timer.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2017, o 12:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1021
Lokalizacja: Trójmiasto
Pomógł: 189

OK.
Funkcja _delay_ms() to tak naprawdę makro i nie możesz traktować jej jako funkcji do której możesz przekazywać parametry podczas pracy programu. Owo makro podczas kompilacji jest zamieniane na odpowiednią liczbę "pustych" rozkazów procesora których sam program podczas pracy nie wygeneruje, więc jeśli chcesz mieć funkcję do której będziesz mógł przekazywać parametr jakim będzie czas opóźnienia musisz sobie ją napisać w oparciu o _delay_ms() np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

oczywiście taki program będzie obarczony błędem bo same instrukcje również trwają, można zmniejszyć rozdzielczość takiego programu co spowoduje że sam czas wykonywania poszczególnych rozkazów będzie mniej wpływał na czas opóźnienia.

bobuss88 napisał(a):
Attiny13 ma jeden timer.
Nie do końca jest to prawdą, zapominasz o Watchdog-u który również można wykorzystać do odmierzania czasu - jest nieco mniej precyzyjny, ale jest.

Możesz też PWM zrobić programowy, a timer wykorzystać do generowania czasu i programowych PWM-mów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2017, o 16:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1021
Lokalizacja: Trójmiasto
Pomógł: 189

Możesz jeszcze zrobić to rozbudowując nieco pętle:

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: 28 cze 2017, o 13:50 
Offline
Nowy

Dołączył(a): 15 maja 2017
Posty: 13
Pomógł: 0

Program sprawdziłem, działa. Zmieniłem tylko tryb PWM z nr3(PWM szybki) na nr5(PWM poprawny fazowo) z względu na lekkie żarzenie się wyłączonych LED.Mam parę pytań odnośnie tego programu:
1.LED1 się załączy płynnie przez czas 120 sekund, po czym świeci ciągle przez czas 120 sekund, po czym się płynnie wyłącza przez czas 120 sekund. Czy jest możliwość żeby LED1 po wyłączeniu się, od razu załączała się (a nie czekała jak w obecnym momencie aż LED2 się wyłączy)?

xentis napisał(a):
Możesz jeszcze zrobić to rozbudowując nieco pętle:

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  
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 6 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