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



Teraz jest 24 kwi 2024, o 13:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
Autor Wiadomość
 Tytuł: Regulacja czasu
PostNapisane: 21 lis 2014, o 20:19 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Witam wszystkich, mam taką prośbę jestem początkujący i mam jeszcze pewne braki wiedzy ale chciałbym napisać funkcję dzięki której będę mógł np. ustawić, że port PB0 ma być w stanie wysokim np. na 15 min a wcześniej chciałbym mieć możliwość dokonania wyboru na jak długo chce stan wysoki np z zakresu 0-30 minut. Bardzo proszę o jakieś naprowadzenie jak to można zrobić.
Ps. szukałem na forum ale jakoś nie mogłem znaleźć nic podobnego. ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 20:58 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1080
Pomógł: 73

to ma być napisane w języku C czy może być bascom?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:05 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Język C bo po względnym przerobieniu BB staram się stworzyć własny program użyteczny i zarazem uczę się przy tym ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

varaderas napisał(a):
(...)
Przydałoby się, gdybyś napisał z jakiego mikrokontrolera korzystasz, bo w BB Pan Mirek opisuje to na Atmega32, gdzie wszystko ładnie i pięknie wychodzi, ale gdybyś próbował wykonać niektóre sprawy na Atmega8 to się nie uda, choćby z uwagi na różnice w timer'ach.

W BB to jest, np. str.324, 325 - wyd. II (BB HD). ;)

Pozdrawiam! j23 Jarek

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:12 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Możesz to zrobić np. tak:
ustawiasz timer na tyknięcia co 10ms
W przerwaniu zliczasz tyknięcia i gdy doliczysz do 100 ustawiasz flagę sekunda

W pętli głównej sprawdzasz czy flaga jest ustawiona
jeśli tak to:
zmniejszasz ilość sekund jaka pozostała do wyłączenia linii // jedna minuta to 60 sek. ;-)
sprawdzasz czy ilość sekund osiągnęła wartość 0
Jeżeli tak to wyłączasz linię
zerujesz flagę sekund

Ot i cały program ;-)
Oczywiście ilość minut przeliczanych na sekundy ustawiasz albo w czasie kompilacji // bleeee
Albo... tu już co Ci podpowie wyobraźnia: np. przez pilota IR, przyciskami, przez RS232... itd, itp.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:13 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

korzystam z Atmegi 8 a regulacja przyciskami, coś widzę, że to chyba może być całkiem trudne zadanie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:16 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1080
Pomógł: 73

w C to masz coś takiego na przykład:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Pisane z głowy. tam gdzie jest 900 w pętli for wklejasz dowolną wartość. 900 jest dla 15 min. ale to jest że tak powiem "jednorazowe wysterowanie" bo nie jest to w petli głównej while. Tylko żebyś sobie zobaczył jak ma mniej więcej wyglądac kod

------------------------ [ Dodano po: 3 minutach ]

A jak przyciskami chcesz to regulować to trzeba rozbudować kod ale może to co napisałem choć trochę Cię naprowadzi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:20 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Dziękuję bardzo i widzę, że da się to zrobić bez przerwań bo niestety narazie tego staram się unikać bo nie do końca to rozumiem..
A żeby dodać regulację zmiennej i w postaci minut to ogólnie trudno jest to napisać? Jutro od rana będę z tym walczył :)
Dodam dodatkowo, że modernizuję sobie program wytrawiarki kolegi z naszego forum i chcę abym mógł ustawić czas działania napowietrzacza ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:25 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1080
Pomógł: 73

Nie jest trudno i na pewno sobie poradzisz ale pobaw się z tym kodem co Ci wysłałem spróbuj go trochę zmienić, wrzucić do pętli głównej while. Zresztą w BB na początku są tego typu proste przykłady i opisane jak obsługiwać przyciski. Dla chcącego nic trudnego ;) w pętli for wykonuje się 900 razy opóżnienie około 1s. minuta ma 60s. 900/60=15 minut



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:27 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

brakuje jeszcze jednego includa
no i żebyś się nie zdziwił, że ten kod wykona się tylko raz i na tym koniec ;-)

Przerwania to nic strasznego. Na prawdę.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:30 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1080
Pomógł: 73

Kolega MirkoT słusznie zauważył że brakuje #include <avr/io.h>



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:31 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Rozumiem zasadę działania tego programu tylko w nim są te _delaye_ i to może mi skrzaczyć działanie reszty programu i tego się obawiam.
Niestety dopiero od niedawna bawię się z AVRAMI i wiem, że kiedyś będę się śmiał z tych przerwań ale one niestety bardzo trapią początkujących, kolega też jakiś czas temu zaczął i mówi, że odpuszcza bo nie daje rady z tymi przerwaniami.
Ja własnie nie wiem jak ustawić ten timer by tykał co 10 ms bo w bb czytałem pare razy o tych przerwaniach i 3 razy film p. Mirka oglądalem i nie wiem jak to ustawić..

------------------------ [ Dodano po: 1 minucie ]

Jeszcze kolejnej rzeczy której nie ogarniam a której Pan Mirek nie tłumaczy ( jeszcze nie oglądałem filmów o strukturach) to są te flagi. Byłby ktoś w jakiś prosty sposób napisać mi co to jest i może poprzeć jakimś przykładowym kodem gdzieś z zacisza domowego workspace'a ;D

------------------------ [ Dodano po: 3 minutach ]

Pan Mirek nie tłumaczy to może zbyt wielkie słowo za co przepraszam ale uważam, ze na prawdę mało o tym jest a to często się powtarza i nie wiem w jakim celu ustawia się ta flagę, po co zeruje itd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:38 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

W takim razie bardzo polecam ten poradnik.

http://mirekk36.blogspot.com/2013/12/przerwania-okiem-poczatkujacego.html
Nie ma co odpuszczać ;-)
Rozumiem, że wszystko jest trudne nim stanie się proste. (a w każdym razie łatwiejsze :lol: )
Jest dokładnie tak jak mówisz. Te delaye Ci zatrzymają cały program na czas ustawienia portu
Dlatego bez przerwań się tego zrobić nie da :-(
O konfiguracji poczytaj w rozdziale o multipleksowaniu.
Natomiast wyliczenie wartości zrobi Ci MKAVRkalkulator - wspaniałe narzędzie :!:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:42 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Ten poradnik oglądałem 3 razy :D i co najgorsze w sumie większość rozumiem a i tak lipka ale widocznie muszę obejrzeć raz jeszcze. A jak w mkAVR kalkulator wyliczyć te wartości ( co ile ma tykać timerek) ? Jest jakiś film do tego? Przyznaje bez bicia ze w bb nie czytałem w ogóle o tym programie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 paź 2014
Posty: 42
Pomógł: 5

Kolego, jak Ci delaye nie pasują to musisz zrozumieć timery, bo się opcje kończą. Wpisz w google "atmega8 timer0" i zobacz najprostsze tutoriale obrazujące jak wyliczyć sekundę, po tym jak zrozumiesz to sobie i te 15 minut policzysz, innego wyjścia nie ma.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:50 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

tak jak kolego @gardziej mówisz i niestety albo stety jutro od rana dalej walka z przerwaniami, a wyjaśniłby mi ktoś jakoś w skrócie o co chodzi z tymi flagami ?
Tak ale jak dołożę, zewnętrzny kwarc to wydaję mi się, że może mi program głupieć bo on jest ustawiony dla 8MHz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:56 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

więc mogę to zrobić by zliczał mi co minutę ( może co sekundę i zrobię sobię jakąś operację typu: minuta=60*c) bez zewnętrznego kwarcu tak?

------------------------ [ Dodano po: 1 minucie ]

Panowie a podpowiecie coś odnośnie tych flag? Kiedy je używamy jak i po co, może jakiś prosty kod bym zobaczył na przykładzie fizycznym.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 21:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 paź 2014
Posty: 42
Pomógł: 5

Wewnętrzny jest mniej dokładny, ale do celów nauki nie ma tutaj większej różnicy i nie baw się póki co w zewnętrzne kwarce, póki nie robisz np. zegarka.
Flaga to po prostu ustawienie jakiegoś bita na 0 lub 1. Mikrokontroler sprawdza flagę, flaga wywieszona (=1) to coś robię, niewywieszona nie robię.

------------------------ [ Dodano po: 2 minutach ]

Lub w drugą stronę, występuje np. przerwanie, mikrokontroler ustawia flagę konkretną, czyli ustawia 1 w jakimś bicie i Ty wiesz, że właśnie takie przerwanie miało miejsce.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 22:06 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

varaderas napisał(a):
Panowie a podpowiecie coś odnośnie tych flag? Kiedy je używamy jak i po co, może jakiś prosty kod bym zobaczył na przykładzie fizycznym.

Taki fajny kod już jest :!:
Weź w łapki swojego BB i poczytaj rozdział o 1Wire. Mam książkę w twardej oprawie i specjalnie dla Ciebie
znalazłem to na stronie 324 ;)
Trzeba czytać, czytać, czytać... ;)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 22:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 paź 2014
Posty: 42
Pomógł: 5

Panie Antystatyczny, kolega varaderas przeczytał BB, oglądnął poradniki i nie może załapać podstawowych rzeczy więc próbuje mu pokazać najprostszą drogę do nauki zrozumienia tego, jak w ogóle działa timer.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 22:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 paź 2014
Posty: 42
Pomógł: 5

Ależ wcale mi o to nie chodziło :), chciałem jedynie zasugerować, żeby póki co kolega nie dostawiał nowych elementów na płytce stykowej, póki nie opanuje tego co się w samym kontrolerze dzieje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2014, o 23:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

varaderas napisał(a):
tak jak kolego @gardziej mówisz i niestety albo stety jutro od rana dalej walka z przerwaniami, a wyjaśniłby mi ktoś jakoś w skrócie o co chodzi z tymi flagami ?(...)

Flagi traktuj jak zwykłe zmienne, bo to są zwykłe zmienne, tylko że nazwa "flaga" wzięła się od celu stosowania tej zmiennej (jej funkcjonalności). Mianowicie taka zmienia powiadamia część sterującą programem/algorytmem (moduł konfiguracyjno-sterujący, nie wiem jak to nazwać) jaki jest dany stan programu i w oparciu o wartość tej zmiennej jakaś instrukcja sterowania programem jest wykonywana, lub nie (w Twoim przypadku, albo wykonywane jest przerwanie, albo nie - w oparciu czy nastąpiła odpowiednia ilość "tyknięć" zmiennej). Flagę możesz porównać do takiego semafora kolejowego, który przyjmuje dwie wartości i w zależności od tego czy jest światło czerwone czy zielone steruje ruchem kolejowym (żeby nie nastąpiła kolizja dwóch pociągów). Sorry, za takie łopatologiczne tłumaczenie.

Pozdrawiam! j23 Jarek


Autor postu otrzymał pochwałę

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2014, o 00:57 
Offline
Użytkownik
Avatar użytkownika

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

Przeanalizuj sobie poniższe proste programiki.
Użyłem w nich przerwania od Timera2 i flag do migania dwoma diodami

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


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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2014, o 09:35 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Dziękuję wam Panowie z całego serca ! Zaraz biorę się dalej za BB i poraz kolejny oglądanie poradnika i analizę powyższych kodów.
Przykład z pociągiem jest świetny, już teraz wiem co to jest ta flaga i inaczej na to mogę patrzeć analizując np. czyjeś kody.
Czas do nauki, jak coś będę pisał, pozdrawiam wszystkich ! ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2014, o 20:58 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 599
Lokalizacja: Lubin
Zbananowany użytkownik

Pomógł: 35

Można też dołożyć układ czasu rzeczywistego RTC np. PCF8583 i sprawdzać czas na nim.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2014, o 00:52 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Panowie podpowiecie jak zrobić by ustawić ta diodę z powyższego programu od kolegi jacekk232 by świeciła np. przez 2 minuty a potem się wyłączyła na stałe?
Męczę się z tym cały dzień i normalnie oczy już wypływają i nie mogę tego zrobić za cholewkę..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2014, o 01:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 paź 2014
Posty: 42
Pomógł: 5

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


Z przykładu, za każdym razem gdy jest przerwanie, czyli mija 10ms, ustawiamy flaga1 = 1, w pętli głównej gdy flaga1 = 1 zwiększamy licznik1, gdy licznik1 ma wartość 100 to mija jedna sekunda i wtedy zwiększamy zmienną sekundy, gdy sekundy = 120 wyłączamy diodę (minęły dwie minuty). Mam nadzieję, że pomogłem, jak coś to pytaj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2014, o 01:40 
Offline
Użytkownik

Dołączył(a): 24 paź 2014
Posty: 67
Pomógł: 0

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Bo początkowo widziałem to tak aby w kodzie w fragmencie :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
potraktować tą 100 jako jakąś zmienną np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a wartość tej pomocniczej zadwać za pomocą przycisku i wyświetlać na lcd da się tak to zrobić? Już kolego gardziej patrze i analizuję Twój kod :)

------------------------ [ Dodano po: 21 minutach ]

Albo na podobnej zasadzie jak zrobić żeby te sekundy móc zadawać za pomoca switch i wyswietlac na lcd
jak robię że liczbę sekund zastępuję np. zmienną "a" i:

if (KEY_DOWN)
{
a=a+10 ;
}
to na wyświetlaczu te sekundy inkrementują mi się w pętli co 10



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2014, o 12:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 paź 2014
Posty: 42
Pomógł: 5

Możesz potraktować to tak, tylko że pamiętaj, że mamy licznik1 uint8_t, czyli może przyjmować zakres od 0 do 255, więc jeśli będziesz chciał na tej podstawie wyłapać dłuższy czas niż 255*10ms, to licznik1 będzie za mały. Dlatego też wprowadziłem sekundę.

Możesz też wyświetlać dowolną zmienną na LCD, zobacz w BB rozdział o wyświetlaczu LCD, biblioteka Pana Mirka jest dosyć prosta w użytkowaniu, musisz ją zainkludować i w prosty sposób za pomocą funkcji "lcd_int" możesz umieszczać je na wyświetlaczu. Pamiętaj przy KEY_DOWN, żeby obsłużyć jeszcze drgania styków klawiszy.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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