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



Teraz jest 11 lut 2025, o 19:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 25 wrz 2013, o 11:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 wrz 2013
Posty: 78
Lokalizacja: Podlasie, Dąbrowa B.
Pomógł: 0

Witam wszystkich forumowiczów.
Na samym początku chciałbym zaznaczyć ze jestem jeszcze "zielony" jeżeli chodzi o pisanie programów.
Wiec do rzeczy...
Chcę zrobić sterowanie 7-ma lampami typu włącz\wyłącz (1 przyc. na każdą lampę ), do tego jeden przycisk wyłączający wszystkie lampy, gdzie przy wciśnięciu przycisku gaszącego wszystkie lampy jedna z siedmiu świeci jeszcze przez 10 sek. i gaśnie.

Skleciłem taki kod z bloga i książki Pana Mirka K. i wyszło mi coś takiego jak niżej. Włączanie i wyłączanie działa jak należy, ale nawet po zagłębieniu się w książkę nie mogę rozgryźć jak napisać te wyłączenie wszystkich lamp + opóźnienie jednej.
Proszę o przeanalizowanie kodu i ewentualnie jakąś podpowiedź.

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


Kody wklejamy przy pomocy syntax=c - Anty.

_________________
ATB ver:1.4, BB, ECLIPSE, Eagle



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2013, o 16:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

Zgaszenie wszystkich i opóźnienie jednej można w najprostszym przypadku rozwiązać przy użyciu delaya:
-gasisz wszystkie lampy oprócz jednej
-czekasz 10s
-gasisz ostatnią lampę

Oczywiście będzie skutkowało to całkowitym zablokowaniem uC na 10s, co w wielu przypadkach może być niedopuszczalne.
Wtedy na ratunek przybywa mechanizm timera programowego, który po zgaszeniu wszystkich lamp ustawiasz na 10s. Szczegóły w rozdziale "wstęp do systemów czasu rzeczywistego" albo rozdziale o 1-wire, o ile mnie EEPROM nie myli.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2013, o 20:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 wrz 2013
Posty: 78
Lokalizacja: Podlasie, Dąbrowa B.
Pomógł: 0

Dzięki za podpowiedź, jutro spróbuję coś pokombinować, może się uda, a jak nie to trzeba będzie kupić czasówkę hehe, bo jakoś mój EEPROM nie chce przyswoić tego nawału wiadomości :)

_________________
ATB ver:1.4, BB, ECLIPSE, Eagle



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2013, o 21:21 
Offline
Użytkownik
Avatar użytkownika

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

Masz procka więc czasówka nie jest potrzebna. Zagoń do roboty timera programowego :-)
Podam Ci kilka klocków a Ty ułóż to w jedną całość.

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


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


W pętli głównej dodajesz obsługę ósmego przycisku analogicznie jak poprzednie przyciski.
W funkcji, wywołanej wciśnięciem przycisku, wyłączasz 6 lamp i nakręcasz timer:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A w pętli głównej sprawdzasz czy timer programowy doliczył do zera. Jeśli tak wyłączasz ostatnią lampę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie twierdzę, że to jest jest najlepsze rozwiązanie. Jedno z wielu ale działa zgodnie z założeniami.
Program testowałem na ATB z Atmegą32 taktowaną wew. oscylatorem 8MHz.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2013, o 21:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 wrz 2013
Posty: 78
Lokalizacja: Podlasie, Dąbrowa B.
Pomógł: 0

No miło jest jak ktoś pomaga takim "zielonym" jak ja. Postaram się to posklejać w całość i może wreszcie zadziała, bo już uC mi się przegrzewa od myślenia ;)

_________________
ATB ver:1.4, BB, ECLIPSE, Eagle



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2013, o 21:42 
Offline
Użytkownik
Avatar użytkownika

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

Oczywiście nie zapomnij zdeklarować zmiennych prog_timer i flaga. No i włącz globalne zezwolenie na przerwania.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2013, o 18:56 
Offline
Użytkownik
Avatar użytkownika

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

a jak sterujesz lampami ? z wyjścia uc 5V ?
pytam z ciekawości :)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2013, o 10:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 wrz 2013
Posty: 78
Lokalizacja: Podlasie, Dąbrowa B.
Pomógł: 0

Sterowanie lampami ma się odbywać za pomocą triaków np BT138, ale chyba będę rezygnował z pisania programu, bo nawet po podpowiedziach nie kumam jak to posklejać w jedną całość :cry: , a musiałbym to zrobić do końca następnego tygodnia, wiec lipa.

_________________
ATB ver:1.4, BB, ECLIPSE, Eagle



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO