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



Teraz jest 4 maja 2024, o 02:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 8 paź 2013, o 12:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Witajcie.

5 dni temu dotarła do mnie blue książka i programator. W wolnych chwilach siedzę, czytam i dłubie na płytce stykowej. Elekronicznie nie ma problemu. Ale programowo....
No nie jest lekko :D
W każdym razie nauczyłem sie kilku rzeczy, które mi radoche wielką sprawiają. Umiem zapalać ledy, migać nimi, umiem sprawdzić czy przycisk jest wciśnięty a jesli jest to coś tam sie zawsze dzieje (miga, brzęczy itd.) :D Totalne podstawy.

aha... przycisk... no właśnie. Trafiłem na mur, którego od dwóch dni nie mogę przebić.

Wymyśliłem sobie taką rzecz:

Do atmegi podłączone są dwie diody i przycisk. LED1, LED2 i P1
Jeśli nacisnę P1 to na 10 sekund zapala się LED1 (niezależnie od tego czy nadal trzymam P1 wciśnięty czy nie)
Jeśli w ciągu tych dziesięciu sekund puściłem P1 to LED1 gaśnie a po 1,5 sekundy zapala się LED2 i świeci 5 sekund.
Jeśli puściłem P1 po tych 10 sekundach świecenia LED1 to nie dzieje się nic a kolejne naciśnięcie P1 znów zapala LED1 na 10 sekund itd.

I powiem Wam, że nie mam w ogóle koncepcji jak się do tego zabrać. Kombinowałem pętlami, delayami, warunkami, break`ami ale jakos nie mogę nawet wpaśc na pomysł jak to zrealizować.

Moja prośba jest taka, żeby ktoś mnie tylko nakierował (biorąc pod uwagę mój level: ultra początkujący) na to jak by sie za to pi razy drzwi wziąć. Czego użyć (programowo oczywiście). A może rzuciłem się na zbyt głęboka wodę póki co ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2013, o 12:49 

Pomógł: 0

Wrzuć kod, bo akurat zabrakło kryształowych kul ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2013, o 13:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Po wciśnięciu i zapaleniu LED1 odpalasz dodatkowy licznik (lub wykorzystujesz ten od świecenia LED - optymalniej), który zlicza do 10sekund (oczywiście oparty na przerwaniu z timera sprzętowego) i sprawdzasz czy przycisk wciąż wciśnięty. Jeśli tak to nic nie robisz. Jeśli puszczony to możesz licznik świecenia LED ustawić na 10sek, wtedy LED gaśnie, albo samemu zgasić LED i licznik odpowiednio ustawić.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2013, o 13:37 
Offline
Moderator
Avatar użytkownika

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

rescue1 napisał(a):
Moja prośba jest taka, żeby ktoś mnie tylko nakierował (biorąc pod uwagę mój level: ultra początkujący) na to jak by sie za to pi razy drzwi wziąć. Czego użyć (programowo oczywiście). A może rzuciłem się na zbyt głęboka wodę póki co ?


Widzisz twój błąd że nie masz końcepcji polega na dwóch rzeczach ;) ... już tłumaczę

Po pierwsze primo ... nie przeczytałeś całej książki chociaż raz tak od deski do deski nawet na sucho - co zwykle polecam a po takich pytaniach i problemach wiem że raczej na 99% ktoś tego nie zrobił ... bo jakby zrobił czyli przeczytał - to nie zatrzymałby się na tak PODSTAWOWEJ obsłudze klawiszy - które są w pierwszych przykładach - gdyż nie są to dobre sposoby - tylko poglądowe i po to aby szybko cokolwiek zacząć - szybko zaskoczyć. Jak widać pierwszy cel książki osiągnięty - więc nie osiadamy na laurach tylko lecimy dalej - bo pod koniec masz dopiero funkcję SUPERDEBOUNCE - dzięki której (z uwagi na to że działa w sposób NIBLOKUJĄCY - nawet jeśli ci to na razie dużo nie mówi) ... można luzikiem rozwiązywać takie zadania o jakich piszesz i to JEDNYM PALCEM ;)

owszem na sam początek to może być też trudna funkcja ... ale ... ale

po drugie secundo .... ;) ... nie czytasz mojego bloga ... a tam proszę bardzo masz SUPER UPROSZCZONĄ wersję takiego superdebounce - jak w sam raz dla początkujących - można powiedzieć taki portal - pomiędzy początkującym a ciut bardziej zaawansowanym ;) .... więc nie kombinuj tylko czytaj blog bo znajdziesz tam sporo podpowiedzi i odpowiedzi na swoje pytania a szczególnie na ten problem w tym artykule :

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

wręcz gotowe rozwiązania na takie bolączki bo masz małe wręcz mikre procedurki ... a za to "bzykają" sobie w sposób nieblokujący więc hulaj dusza - DELAYÓW nie ma ;)

_________________
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: 8 paź 2013, o 13:44 
Offline
Nowy

Dołączył(a): 16 maja 2013
Posty: 7
Pomógł: 0

Sam jestem początkujący, ale ja bym to zrobił tak:
Pętla programu przy kazdym obiegu sprawdza stan przcisku i dodaje do jakiejś zmiennej 1. Gdy licznik obiegów pętli dojdzie do okreslonej wartosci (doberasz tyle by pętla sie powtarzała 10 sekund) to petla się zatrzymuje. Jeżeli przy dowolnym obiegu puściłeś przycisk, zmieniasz jakąś zmienną z 0 na 1. Gdy licznik zatrzyma pętlę, nastepna instrukcja (2led przez 5 sekund) odpali się tylko jak wcześniej puściłeś przycisk (czyli sprawdzasz czy zmienna ma wartosc 1 czy 0)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2013, o 15:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Do realizacji takiego zadania niezbędna jest znajomość automatu Moore'a, a więc moim zdaniem może to być bardziej skomplikowane dla początkującego. Pierwszy podany przez Ciebie warunek (wyrażenie w nawiasie) wydaje się być sprzeczny z drugim. Mogłem coś źle zrozumieć dlatego proszę o ewentualne poprawienie mnie.

Całe zagadnienie opiera się o przebiegi czasowe oraz graf stanów (pierwszą część pominę, gdyż przy tak prostym zadaniu, nie ma sensu tego rysować - przynajmniej dla mnie). Odnośnie grafu przedstawia się on następująco:

Obrazek

Kółka oznaczają numery stanów, wyrażania nad strzałkami warunki przejścia, a pod nimi wykonane operacje w przypadku przejścia. Dokładniej tego nie będę teraz omawiał, chyba że ktoś będzie zainteresowany, ale odsyłam do źródeł (pewnie najgorsze z możliwych, ale pierwsze w wynikach google ;) : http://pl.wikipedia.org/wiki/Automat_Moore'a).

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


Program pisany na szybko więc mogą być błędy. Osobiście na pewno użyłbym timer'ów, ale myślę że w ten sposób będzie łatwiej zrozumieć idee, osobie rozpoczynającej przygdę z uC. Jak coś niejasne to pytaj śmiało ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 paź 2013, o 11:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Uh, dzięki za odzew.

@mirekk36
Tak na sucho to ja nie potrafię przyswajać. Dlatego czytam ksiażkę z podłaczonym programatorem i na bieżąco testuje to co przeczytałem.
Twój blog też czytam. I nawet próbowałem zaadaptować eliminacje styków do swoich celów. Za każdym razem, jak część założeń działała to inna część nie. No nic, będę dalej kombinować.

@PJS & Nxtfun

Właśnie obecnie w tą stronę coś kombinuję.

@atmel
MOC. Biorę się za analizę Twojego programu i automatu Moore'a
Może niezbyt jasno tam to napisałem. Chodzi o to, że LED1 jest optycznym wskaźnikiem, ktory mi mówi czy jeśli puszcze przycisk to LED2 się zaświeci czy nie (z opóźnieniem 1,5 sek). Często zatykałem się w momencie gdy naciskałem przycisk, zapalała sie LED1. Przycisk trzymałem ponad 10 sekund (więc jego puszczenie nie powoduje nic), i jak po puszczeniu naciskałem go znów to juz LED1 się nie zapalała :D

Nic to. Dzięki Wam jak nie wiem co i przepraszam za taki niezbyt precyzyjny post. Następne pytania ( a pewnie zgodnie z moim avatarem będą się pojawiać ;) ) bede już zadawać porządnie z załączonym kodem i konkretnym problemem.



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

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