Witam! Chciałbym sobie stworzyć taki programik w którym mógłbym ustawiać czas (skok co minutę) za pomocą przycisków jeden dodaję drugi odejmuję. Natomiast za pomocą trzeciego przycisku potwierdzałbym ustawienia i procesor wykonywałby inny podprogram do czasu aż minie określony czas. Wyświetlanie na LCD. Z góry dziękuję za odpowiedź!
|
|||
re: Timer + Bascom
robisz tak:
1 - konfigurujesz timer
2 - piszesz do jakiej etykiety odeśle Cię wywołane przerwanie
3 - wpisujesz wartość do timera która odpowiadać będzie co jaki czas wywolasz przerwanie
4 - uaktywniasz globalne przerwania i przerwania timera0
ja jeszcze daję komendę
chyba wszystko. ktoś ma coś do dodania?
do wyliczania timerów ja osobiście używam programiku o nazwie Pomocnik AVR by Artur Starz.
Moja strona w powijakach
Ja tylko dodam że istrukcje
Ja tylko dodam że istrukcje enable timerx i start/stop timerx mogą czasami pożądnie wku..ić bo nie zatrzymują timera czasami.
Może na sam początek troche "polubic notke i być z nią na ty"
Re: Timer + Bascom
mi się to nie zdarzyło jeszcze. może źle napisałeś soft? jeśli był konflikt timerów to mogłeś mieć taką sytuację i zwaliło Ci cały program.
Moja strona w powijakach
timer
Super ale dalej nie rozumie:( Pomocnik AVR by Artur Starz już mam ściągnięty i się z nim zakumplowałem :)
Zacznijmy krok po kroku :)
no ale skąd mam wiedzieć że to przerwanie ma być co sekundę?? Na co mam zwrócić uwagę??
O co chodzi z tą etykietą?? Czyli przejdzie do jakiegoś podprogramu??
W jaki sposób timer zmieni ustawiany czas o minutę?? Po naciśnięciu przycisku odwołuję sie timera gdy on się przepełni to wtedy się zmienia?? Czarna magia :(
Przepraszam za tak głupie pytania ale proszę o wyrozumiałość i cierpliwość:)
Re: Timer
To proste. napisałeś konfigurację do timera 0, jest on 8 bitowy i liczy wewnętrznie do 255, kolejny impuls zeruje timer i generuje przerwanie. Po wystapieniu przerwania wykona sie fragment kodu podpisany etykietą "etykieta" zadeklarowaną na początku poleceniem "on timer0 etykieta". poniżej w programie musisz mieć gdzieś wpisane:
Co ile będzie wykonywac sie ta etykieta? Kwarc 16MHz najpierw jest dzielony przez prescaler, czyli przez 64 w tym przypadku. Na timer trafia zatem częstotliwość 16000000/64=250000
Przerwanie zatem wywoła się po doliczeniu 256 impulsów zegara o czestotliwości 250kHz, czyli co 0,001024s. jest to trochę głupia wartość więc proponuję dać Prescale =256 a w pierwszej linijce obsługi timera zrobic tak:
teraz etykieta będzie wywoływana równo co 4ms bo prescaler dzieli 16MHz przez 256 a potem w każdym doliczeniu timera do końca wpisywana jest od razu wartość 6 co skraca cykl liczenia do 250 a nie do 256 jak jest normalnie. Robi sie tym samym podział przez 256 a potem równo przez 250 i przerwanie będzie wystepowało co 4ms.
Dalej robisz sobie zmienną np D as byte i w przerwaniu:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
timer czy licznik
mam jeszcze jedno małe pytanie:
Czy nie lepsze by było wykorzystanie do tego licznika zamiast timer'a??
Pozdrawiam!
Re: timer
Jakiego licznika zamiast timera?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
odp
Jeśli nie zależy Ci na dokładności odmierzanego czasu to użyj Wait'a...
timer
Wait odpada na pewno :)
Trochę pomieszałem timer może być także jako licznik. Trochę zacząłem kumać tego timera. Postaram się napisać jakiś program i zobaczymy czy dobrze to rozumie :)
Re: timer
timer to nie problem, weź odpal UART.
Moja strona w powijakach
timer
Dla mnie jak na razie jest problemem :P
Do matrixa: no włąsnie
Do matrixa:
no włąsnie mialem kiedys juz napisany troche powazniejszy program i wszystkie start stop musiałem napisac rejestrem tccr1 na poczatku myslalem ze to wina programu i napisale ktory co sekunde odpalal/wylaczal timer no i timer raz uruchomiony pykal do momentu odlaczenia zasilania,
Do chestera:
2 dni temu sie kupilem w 2 attiny 2313 oraz od kolegi dostalem 7 attiny26(oraz pare innych atmeg) który juz 3 lata temu przerwal zabawe z elekteronika i na 1 2313 i 1 26 przetestowałem progi ktore koledze nie działały i każdy działał 100% (poza 1, źle zadeklarowane porty) więc wydaje mi się że ta tina 2313 coś się popsuła.
P.s. Timer w trybie licznik ( a dokłądniej capture mode) służy do liczenia zewnetrznych impulsów, często wykorzystywany do odbierania danych kodowanych manchesterem
Obliczanie określonej częstotiwości
Witam - wiem stary temat mam pytanie jak obliczyć określoną częstotliwość dla wyjścia "Test_rigol" w tym programiku jaki powinien być prescaler i jaka liczba powinna znaleźć się w timer0 aby sygnał na wyjściu "test_rigol" miał częstotliwość 1600 Hz. częstotliwość kwarcu 16MHz - pozdrawiam Jacek.
część programu:
Re: timer
Dla kwarcu 16MHz nie uzyskasz 160Mhz a np 1602,5641025641 przy preskalarze 64 i gdy w timerze dasz timer0=100, dzielnk przez 10 trzeba wywalić
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Witam serdecznie mam pewien
Witam serdecznie
mam pewien dylemat, chciałbym napisać program którego działanie wyglądałoby tak:
po podaniu na licznik 2 impulsów na wejście int0 o zboczu narastającym zapala się dioda na wyjściu Portb.2
jeśli zaś zostanie podany kolejny sygnał to dioda gaśnie i licznik się zeruje i tak w kółko, wszystko miałoby działać na tiny13. Napisałem coś takiego, jednak są pewne problemy, jeśli nie uwzględnię aby zmienna się wyzerowała to dioda czasem zapali się poprawnie a czasem tylko szybko mignie i nic więcej się nie dzieje, natomiast jeśli uwzględnię to zupełnie nic się nie dzieje... Proszę o pomoc
Re: zmienna
Inaczej napisz przerwanie.
Moja strona w powijakach
Niestety po modyfikacji
Niestety po modyfikacji zachowanie wygląda tak, iż po podaniu pierwszego stanu wysokiego dioda się zapala, po 2 sygnale dioda gaśnie a po 3 tylko mignie, i tak w kółko. Słyszałem, że bascom z tiny13 się gryzie, może to z tego powodu ? jak zrealizować opcję przycisku szyfrowego, który zawiera jeden przycisk ? rozumiem, że potrzebne będzie użycie timera0 ? tak aby dioda się zapaliła po podaniu 2 sygnałów w ciągu ~2sek oraz jednego w ciągu kolejnych ~2sek, jeśli warunek nie zostanie spełniony to dioda się nie zapali, bardzo proszę o pomoc i jednocześnie bardzo dziękuję Ci Matrix za odpowiedź. Posiadam książkę Marcina Wiązani, jednak bez waszej pomocy chyba się nie obejdzie. Pozdrawiam !
Re: zmienna
Nie mówię że oszukujesz, ale to co piszezz jest mało prawdopodobne. Może masz kłopot gdzieś indziej?
Prześledźmy moim tokiem rozumowanie to przerwanie.
Więc nie ma opcji by dioda mignęła jeśli wszystko gdzie indziej masz dobrze.
Moja strona w powijakach
sprawdzę na attiny2313 i dam
sprawdzę na attiny2313 i dam odpowiedź
Edit:
Witam ponownie, po dłuższych próbach na innym attiny13 oraz 2313 działo się to samo... po prostu inteligentny ja fizycznie nie zabezpieczyłem sygnały przed "drganiami", wstawiłem mały kondensator elektrolityczny i problem jak ręką odjął, dlatego w tym miejscy chciałem bardzo przeprosić matrixa i jednocześnie podziękować za trop :). Jeśli to nie problem, to czy ktoś może mi wytłumaczyć w jaki sposób zabrać się za timer0 aby utworzyć niejaki "klucz szyfrowy" ?
Wyjaśnij
Wyjaśnij dokładniej założenia, jakiś link, więcj info co chcesz uzyskać.
Moja strona w powijakach
chciałbym stworzyć programową
chciałbym stworzyć programową filtracje, mianowicie klikam przycisk 2 razy w ciągu jednej sekundy i raz w ciągu kolejnej sekundy, jeśli program wykryje więcej lub mniej wciśnięć niż 2 w ciągu pierwszej sekundy to wszystko się kasuje i zaczyna zliczać od nowa, tak samo jak i w kolejnej sekundzie. Myślę o tym, że w momencie gdy program dostaje pierwszy sygnał zaczyna liczyć, jeśli warunek zostanie spełniony liczy wciśnięcia w kolejnej sekundzie i jeśli po odliczeniu drugiej sekundy zmienna będzie miała 1 to wtedy zapala się dioda, zaś gdy dioda jest zapalona, to ta sama sekwencja gasiłaby ją. Mam nadzieje, że nie zagmatwałem za bardzo założenia. w przyszłości sekwencja miałaby być trudniejsza jednak to tylko na początek aby pojąć timer0 bo wydaje mi się iż jest on niezbędny do tego typu działania. Dziękuję za zaangażowanie, jestem bardzo wdzięczny.
Re: klucz szyfrowy
Wykorzystaj watchdog'a.
Ustaw go na 1 sek. I zeruj go jeśli zmienna osiągnie wartość pożądanych naciśnięć przycisku.
Moja strona w powijakach
Czy możesz podać przykład
Czy możesz podać przykład zerowania watchdog'a ? przyznam, że nigdy dotąd tego nie uzywałem
Re: przykład zerowania watchdog'a
Ustawiasz sobie rządany czas i dalej piszesz sobie warunki. Taki przykład:
To jest tylko zarys, trzeba przemyśleć wychodzenie z pętli i ogólną obsługę. Nie chce mi się pisać bo było by to napisaanie programu za Ciebie.
Musisz się zabezpieczyć przed zbyt dużą ilością naciśnięć, przed trzymaniem cały czas przycisku.
To nie takie proste jakby się mogło na pierwszy rzut oka wydawać.
Moja strona w powijakach
Próbuję pojąć działanie i mam
Próbuję pojąć działanie i mam z tym problem, otóż połowicznie działa tak jak było to w założeniu, czyli po podaniu 2 sygnałów w ciągu pierwszej sekundy, oraz po podaniu 1 sygnału podczas drugiej sekundy dioda się zapala, lecz problemem jest to, iż po każdym kolejnym sygnale dioda gaśnie i się zapala. Chciałbym też zrozumieć dlaczego podczas podania 3 szybkich sygnałów dioda również się zapala i kolejno tak jak wcześniej, po każdym sygnale zgaśnie oraz zaświeci(dioda tak jak w założeniu po wolnym wciśnięciu 3 razy przycisku w ogóle się nie zapala). ta sama sekwencja ma uruchamiać oraz gasić diodę, dlatego użyłem toggle.
oto program:
Dziękuję za pomoc
Re: Próbuję pojąć działanie...
Przecież pisałem że to nie będzie takie proste, że musisz się zabezpieczyć przed zbyt dużą ilością naciśnięć, przed trzymaniem cały czas przycisku.
To trzeba przemyśleć i testować.
Moja strona w powijakach
możesz podpowiedzieć w jaki
możesz podpowiedzieć w jaki sposób napisać program używając do tego odmierzania czasu poprzez timer ? albo będzie to zdecydowanie trudniejsze ?
Re: Próbuję pojąć działanie...
Najpierw napisz sobie założenia i konspekt blokowy, dawniej nosiło to nazwę algorytmu.
Ja napisałbym to pi razy oko w ten sposób:
możesz zaprząc timer1.
- pierwsze wciśnięcie przycisku uruchamia timer odliczający dwie sekundy
- w pętli zwiększasz wartość zmiennej właściwej za każdym naciśnięciem przycisku
- po skoku do przerwania sprawdzasz czy naciśnięto odpowiednią ilość razy przycisk i odpowiednio działasz
Coś tam na szybko powstało, ale nie chce mi się myśleć bo to napisanie programu za Ciebie. pokombinuj, może wpadniesz na lepszy pomysł niż ja. Opatrzyłem ten program masą komentów żebyś wiedział co gdzie i jak.
Moja strona w powijakach