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



Teraz jest 22 mar 2026, o 21:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 6 maja 2014, o 22:06 
Offline
Nowy

Dołączył(a): 26 lut 2014
Posty: 8
Pomógł: 0

Witam,

Piszę ten post ponieważ nie mam już pomysłów na obejście problemu. Problem prawdopodobnie jest prosty do rozwiązania ale, że jestem początkującym w temacie nie widzę tego rozwiązania...;/ Mianowicie chodzi o program do okapu (padł silnik w okapie i musiałem zdecydować się na zamiennik ponieważ oryginału nie dostałem i tutaj byłem zmuszony zmienić również elektronikę nim sterującą).

Założenia programu:

- Sterowanie silnikiem 3 przyciskami KEY2 - pierwszy bieg, KEY3 - drugi bieg, KEY4 - trzeci bieg
- Sterowanie 3 światłami LED'owymi jednym przyciskiem KEY1
- Po wyłączeniu silnika, zewnętrzny wentylator(wyciągowy) chodzi przez określony czas
- Po przytrzymaniu przez 2 sekundy przycisku KEY2 - samodzielna praca wentylatora przez określony czas dłuższy niż ten w poprzednim punkcie

- dodatkowe 2 diody jako sygnalizacja (osobny temat którym się teraz nie przejmuje - myślę, że nie będzie ciężko)

Ważną rzeczą jest to, że silnik może pracować tylko na jednym biegu (uzwojenie z odczepami - a żeby było śmieszniej silnik sterowany jest N'ka (przewodem neutralnym)

Rozwiązałem powyższe zadania w ten sposób że KEY1 po pierwszym wciśnięciu włącza nam 1 przekaźnik do którego podłączona jest 1 żarówka LED,
po drugim wciśnięciu wyłącza nam 1 przekaźnik i włącza drugi gdzie podłączone 2 żarówki LED, po trzecim wciśnięciu włączają się obydwa przekaźniki, w efekcie święcą 3 żarówki LED - To założenie udało się zrealizować.

Sterowanie silnikiem rozwiązałem w ten sposób, że jeśli naciśniemy któryś z KEY2, KEY3, KEY4 to włączy się odpowiedni przekaźnik, po ponownym jego wciśnięciu się wyłączy ale jeżeli naciśniemy jeden przycisk sterowania po czym wciśniemy inny to w efekcie poprzedni bieg musi się wyłączyć i włączyć ten odpowiadający przyciskowi który nacisnęliśmy. Tutaj udało mi się to osiągnąć ale tylko na KEY3 i KEY4.

Mój problem polega na tym, że przy użyciu funkcji superdebounce kolegi ANTYSTATYCZNEGO, nie chce mi działać wyłączenie biegu po ponownym naciśnięciu KEY2 (ponieważ na KEY2 jest tylko użyty Superdebounce) - tak jakby funkcja w programie s1_stop() działała.

Wyłączanie wentylatora zewnętrznego po czasie jeszcze nie do końca opracowałem. Jest w programie delikatny zarys funkcji do której przekazuje czas po którym powinno nastąpić wyłączenie - sprawdziłem to tylko czy działa.

Od razu mówię, że kody wykorzystane w programie są zaczerpnięte w dużej mierze z książki bluebook oraz z forum od kolegi ANTYSTATYCZNEGO - przepraszam ale sam jeszcze nie opracowałem swoich bibliotek.

Jakby ktoś mógł spojrzeć i doradzić jak się za to zabrać byłoby fajnie.

Zaznaczam, że dopiero się uczę i tak na prawdę jest to mój pierwszy poważny program.

Program pisany w oparciu o zestaw ATB 1.04 na układzie ATMEGA16 taktowanym kwarcem 11059200.

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.


common.h:

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


Niektóre zmienne w programie są kompletnie niepotrzebne ale nie robiłem porządku z nimi bo przydają mi się one do "kombinowania" no i sprawdzam po kolei jak to działa, jak to się je, po prostu testuje.

Również biblioteka do obsługi wyświetlacza jest Pana Mirka dlatego jej nie wrzucam.

Mogłem coś chaotycznie wytłumaczyć, w razie co mogę to dokładniej opisać albo najlepiej rozrysować.
Z góry dziękuję za pomoc.

Nie wiem dlaczego zjadło mi przypisanie pinów w common.h podczas pisania normalnie je widać ;/



Ostatnio edytowano 7 maja 2014, o 09:02 przez Adhewelt, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2014, o 22:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Kody programu wstaw w znacznikach "syntax=c"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2014, o 15:10 
Offline
Użytkownik
Avatar użytkownika

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

Przejrzałem pobieżnie kod i wydaje mi się, że problem masz w tej funkcji
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Błędnie założyłeś, że po wciśnięciu KEY2 wykona się pierwszy warunek a po drugim wciśnięciu wykona się drugi warunek. Jeśli zmienna status_s1 == s1_on to spełniony będzie pierwszy warunek. Wykona się funkcja s1_stop() w której zmienna status_s1 przyjmie wartość s1_off. Tym samym, za chwile będzie spełniony drugi warunek bo zmienna status == s1_off. I wykona się funkcja s1_start w której zmienna znów przyjmie wartość s1_on. A to wszystko po jednorazowym wciśnięciu KEY2. Po następnym wciśnięciu sytuacja się powtórzy.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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