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



Teraz jest 15 kwi 2026, o 14:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 16 mar 2015, o 21:32 
Offline
Nowy

Dołączył(a): 15 mar 2015
Posty: 3
Pomógł: 0

Witam.
Mój pierwszy post. Nie do końca jeszcze znam zasady jakie tu panują.

Chciał bym napisać program który na podstawie stanu przycisków (4szt) zmieni mi odpowiednio wyjścia sterujące przekaźnikami.

Czyli zasada prosta:
Wciskamy Przycisk_1 i trzymamy- po 1min załącza się Przekaźnik_1.
Puszczamy Przycisk_1- natychmiast wyłącza się Przekaźnik_P1.

I tak samo w pozostałych 3 przypadkach. Różne będą tylko czasy.

Mam problemy ze zrozumieniem logicznym zasady działania takiego programu dla 4 przycisków tak aby działało to wszystko w jednym momencie -niezależnie. Do tej pory programowałem raczej tylko w PHP i proste programy w C na studiach więc nie jest mi łatwo przesiąść się od razu na procki.

Jeżeli jesteście w stanie coś mi podpowiedzieć był bym wdzięczny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2015, o 21:42 
Offline
Moderator
Avatar użytkownika

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

xairo napisał(a):
Do tej pory programowałem raczej tylko w PHP i proste programy w C na studiach więc nie jest mi łatwo przesiąść się od razu na procki.

Zrozum - dlatego zdecydowanie warto zacząć od książki:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

a zanim ją dorwiesz - oglądaj sobie czasem mojego bloga i podpatruj pewne techniki programowania (z takich właśnie poradników do książek) - też ci się mogą przydać:
http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.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: 16 mar 2015, o 21:50 
Offline
Nowy

Dołączył(a): 15 mar 2015
Posty: 3
Pomógł: 0

Moja żona mówi już na Ciebie wujek Mirek tyle poradników już oglądałem ;] - sory za bezpośredniość ;]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2015, o 21:55 
Offline
Moderator
Avatar użytkownika

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

xairo napisał(a):
sory za bezpośredniość

:lol: żaden problem .... ale w tym poradniku pokazałem właśnie dość prostą a skuteczną obsługę przycisków i to obsługę nieblokującą - a tobie o to właśnie chodzi ponoć wg pierwszego postu

_________________
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: 17 mar 2015, o 14:59 
Offline
Nowy

Dołączył(a): 15 mar 2015
Posty: 3
Pomógł: 0

Nie zwracając uwagi na błędy w kodzie odnoście źle przypisanych portów C,B bo i tak porty będę ustawiał po podłączeniu wszystkiego do procka, to mój zamysł całości chyba jest już dobry.

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


Jeszcze tylko czasowe opóźnienie muszę wprowadzić w życie i gotowe :) ... chyba...

Ale naszło mnie teraz takie "zastanowienie".
Co jeżeli będę chciał wprowadzić do kodu obsługę wyświetlacza.
Dojdzie wtedy kilka linijek kodu w funkcji MAIN. Jak to wpłynie na czas reakcji urządzenia na przycisk?
Domyślam się, że jeszcze przy samym wyświetlaczu wpływ będzie nieznaczny, jednak co jak bym miał tych linijek kodu kilkadziesiąt... wykonujących np różne przekształcenia typu odczyt temperatury...
Z każdym takim elementem (wyświetlacz, temperatura, kolejny przycisk) czas obsługi pojedynczego zdarzenia się wydłuża... czy może wcale nie zawracać sobie tym głowy, gdyż to i tak będę czasy rzędu [ms]?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2015, o 15:27 
Offline
Użytkownik
Avatar użytkownika

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

xairo napisał(a):
Ale naszło mnie teraz takie "zastanowienie".
Co jeżeli będę chciał wprowadzić do kodu obsługę wyświetlacza.
Dojdzie wtedy kilka linijek kodu w funkcji MAIN. Jak to wpłynie na czas reakcji urządzenia na przycisk?
Domyślam się, że jeszcze przy samym wyświetlaczu wpływ będzie nieznaczny, jednak co jak bym miał tych linijek kodu kilkadziesiąt... wykonujących np różne przekształcenia typu odczyt temperatury...
Z każdym takim elementem (wyświetlacz, temperatura, kolejny przycisk) czas obsługi pojedynczego zdarzenia się wydłuża... czy może wcale nie zawracać sobie tym głowy, gdyż to i tak będę czasy rzędu [ms]?


Tym się nie przejmuj procesor się wyrobi nawet jak dojdzie obsługa temperatury, wyświetlacza cy innych obliczeń
użyj wtedy kwarc zewnętrzny minimum 8MHz w górę i procesor będzie się wyrabiał "a i tak przez większość czasu będzie się zastanawiał co by tu jeszcze zrobić"
warunek to nie używanie _delay_ms(time); bo to akurat go zawiesza na określony czas ... poczytaj o timerach i na nich działaj wtedy nie będzie problemu


Autor postu otrzymał pochwałę

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2015, o 08:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

Procedury obsługi przycisków i przekaźników są bardzo krótkie więc ewentualnie można je przenieść do przerwań (co do połączeń i wykrywania wciśnięcia proponuję zobaczyć rozdział z bb "Pilot na podczerwień").
Jeśli czasy zadziałania są krytyczne to takie rozwiązanie jest bardzo dobre i nie zaszkodzą mu żadne delaye i pętle while w głównej pętli programu, choćbyś podłączył 5 wyświetlaczy i 10 czujników ;)

Wysłane z mojego GT-S7710



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2015, o 09:52 
Offline
Użytkownik
Avatar użytkownika

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

A odnośnie pytania w pierwszym poście... Kiedy już uruchomisz przerwania i zrobisz timer programowy (aby nie używać w pętli głównej 'delay') to tworzysz sobie nową zmienną, którą zwiększasz z interwałem czasowym ustalonym przez ten timer (czyli np. co 100ms lub nawet sekundę) gdy przycisk będzie wciśnięty i kiedy zmienna osiągnie odpowiednią wartość - czyli dla wspomnianych 100ms jedna minuta zostanie naliczona po 600 odliczeniach, a przy interwale 1s po 60 odliczeniach - załączasz jedynkę na wybranym porcie aby włączyć przekaźnik, natomiast gdy przycisk nie jest wciśnięty (co jest równoznadzne z jego puszczeniem) permanentnie zerujesz tą dodatkową zmienną i podajesz zero na port. Dla każdego przyciku robisz analogicznie czyli jedna dodatkowa zmienna. Timer liczący interwał wystarczy tylko jeden wspólny. Myślę, że to chyba najprostszy sposób, ale podstaw programowych (czyli składnia instrukcji, itp) szukaj w książkach lub poradnikach. Z czytym sumieniem polecam na początek Mirkowego BB.


Autor postu otrzymał pochwałę

_________________
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: 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO