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



Teraz jest 8 gru 2019, o 00:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 28 ] 
Autor Wiadomość
PostNapisane: 25 lip 2019, o 21:57 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Cześć!
Potrzebuję dodać kod do programu który jest czymś w rodzaju metronomu. Czyli nabijanie pożądanego tempa poprzez dwukrotne wciśnięcie przycisku oraz led, który zapala się zgodnie z tym tempem.
Udało mi się 'przerobić' kod z bascoma (tfu) i jako tako działa - powtarzanie działa po BAAARDZO szybkim, dwukrotnym wciśnięciu (kwestia ustawienia timera zapewne) no i po dojechaniu licznika do 65535 program się zatrzymuje. Siedzę już nad tym ze dwa tygodnie, ale nie mogę sobie z tym poradzić. Kod wygląda tak:

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


Założenia do potrzebnej pracy:
- odmierzenie czasu pomiędzy pierwszym i drugim wciśnięciem przycisku i powtarzanie go w nieskończoność (do momentu nabicia innego tempa)
- w przypadku wciśnięcia przycisku trzeci raz (itd), powtarzany czas to ten między drugim a trzecim wciśnięciem
- maksymalny czas pomiędzy dwoma naciśnięciami to 1800ms, jeśli drugie naciśnięcie przycisku będzie poza tym czasem to traktowane jest jako pierwsze naciśnięcie

Może ktoś już ma taki program, albo widział w sieci - ja niestety nic działającego nie znalazłem. Wskazówki, porady, pomoc, kod - mile widziane ;)

Timer programowy mam ustawiony na przerwanie co 10ms - 11.5920/1024/107, ale w razie potrzeby mogę ustawić inaczej



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lip 2019, o 22:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 293
Pomógł: 13

SylwekK robił kiedyś coś takiego, identyczna idea chyba. Dioda plus TAP. Może zdradzi szczegóły?
Jak poszukasz, to pewnie gdzieś na forum znajdziesz.
Świetnie to zrobił, jak to Sylwek, bardzo mi się to urządzenie spodobało ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2019, o 10:58 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Widziałem, ale nie do końca o to mi chodzi. Zresztą znalazłem tylko hex'a, bez kodu.

Pytanie dodatkowe. Byłbym w stanie uzyskać przerwanie 1ms na kwarcu 11.5902MHz? Kalkulator podaje mi wartość 1080Hz na preskalerze 1024. Czyli musiałbym się "pozbyć" tych 80Hz w jakiś sposób ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2019, o 13:36 
Offline
Użytkownik
Avatar użytkownika

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

Czuję się wywołany do tablicy :)
Idea działania jest bardzo prosta. W podstawowej wersji ma być dwa tryby: 1-record, 2-play. W twojej wersji dojdzie jeszcze 3-play, ale 2 zamieni się na play&record, oczywiście uwarunkowany czasem, po którym będzie już tylko sam play.
Zapomnij o bezpośrednim wykorzystaniu timera jako licznika... można, ale wg mnie to komplikuje sprawę. Ustaw przerwania na jakiś interwał i załatw odmierzanie czasu timerami programowymi. Tu jest bardzo elastycznie i właściwe dowolną potrzebną wartość uzyskasz.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2019, o 15:15 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Tylko twój działa nieco inaczej bo po naciśnięciu przycisku pierwszy raz program się zatrzymuje i czeka na drugie wciśnięcie.

EDIT:
Przed chwilą upchnąłem multipleksowanie i timery programowe w jedną obsługę przerwania więc mam dwa timery wolne (16 i 8 bitowy) - wszystko robię na Atmega328. To licznik do tapa powinien być w jakim trybie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2019, o 15:49 
Offline
Użytkownik
Avatar użytkownika

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

Nie musi się zatrzymywać. Co za problem zrobić aby w momencie wciśnięcia zrzucił stan licznika (bez zatrzymywania) do jakiejś zmiennej przechodniej i dalej z niej korzystał do odliczania interwału ? :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2019, o 19:11 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

No tak, a mas zjakiś kod w C do tego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2019, o 20:34 
Offline
Użytkownik
Avatar użytkownika

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

No do tego konkretnie o co Ci chodzi to nie mam. Jak będę przy kompie (piszę teraz z telefonu) to poszukam czegoś co Ci się przyda tylko może być małe opóźnienie, bo mam remont w domu i czas wolny odliczany w mikrosekundach :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2019, o 20:36 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Siedzę nad całym projektem od 7 lat więc już chwila mi różnicy nie robi :lol:
Dzięki!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2019, o 17:33 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Mam małe pytanie. Jeśli timer programowy mam skonfigurowany w taki sposób, że kwarc 11.0592MHz, preskaler 1024, podział przez 53 - podaje mi, że w ten sposób uzyskuję 5ms. Czyli jeśli wpiszę gdzieś w programie Timer=5 to ustalę czas na 25ms?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2019, o 17:42 
Offline
Użytkownik
Avatar użytkownika

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

Tak. O ile będziesz ta zmienną zmniejszał o jeden w przerwaniu (do zera)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 paź 2019, o 21:46 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Próbuję sam napisać ten program bo w internetach nie ma nic przejrzystego co działałoby na tej samej zasadzie.

Ogarnąłem szybki błysk leda po naciśnięciu przycisku:

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


Próbowałem napisać krotką funkcję która błyskałaby tym ledem co np 0,5s. Ale w żaden sposób mi to nie chce zadziałać. Led reaguje tylko na wciśnięcie. Mógłby mi ktoś pokazać fragment kodu który by w taki sposób działał? Wtedy sam bym spróbował przerobić go na reagowanie na wciśnięcia/czas



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2019, o 09:02 
Offline
Użytkownik
Avatar użytkownika

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

Dam Ci wskazówkę na kolanie przed chwilą napisaną. Jest to podstawowy TAP-owy baaardzo uproszczony metronom. Brak w nim kontroli drgań styków i limitów. W przerwaniach należy zrobić do tego dwa timery odliczające do zera (zwykłe programowe): timer_interwal, tiemer_blysk. Pierwszy liczy odstęp między przyciskami, drugi to czas świecenia diody po jej aktywacji. Podaję w tak uproszczonej formie aby wszystko było jasne i czytelne - zdecydowanie taka forma jest łatwiejsza do analizy.

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


Myślę, że z rozbudową problemu już nie będziesz miał :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2019, o 16:46 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Chyba nie do końca o to mi chodziło, ale i tak dzięki! Będę kombinował :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2019, o 16:59 
Offline
Użytkownik
Avatar użytkownika

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

Rozbudowa tego programu do tego o co pytasz w pierwszym poście to właściwie formalność. Musisz wykorzystać jeszcze jeden timer który odlicza zezwolenie na zmianę tempa i dodatkową zmienną do liczenia i zapamiętania nowej wartości interwału.
Albo już nie wiem o co Ci chodzi...

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2019, o 22:07 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Trochę będę musiał nad tym posiedzieć :) Led zapala się odwrotnie niż ustalam czas, tzn jeśli wcisnę dwa razy szybko to miga z większym odstępem czasu, a jak dwa razy powoli to miga bardzo szybko :D No i ten sam problem co w przypadku kodu z Bascoma - przy trzecim wciśnięciu zatrzymuje się zamiast powtarzać poprzednią sekwencję bo czeka na drugie kliknięcie. Ale posiedzę nad tym trochę, może uda mi się ogarnąć ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2019, o 22:37 
Offline
Użytkownik
Avatar użytkownika

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

Pierwszą część zadania masz w moim programie, resztę napisałem post wcześniej. Pokombinuj na tym kodzie.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2019, o 20:29 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

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


Według mnie powinno to działać zgodnie z założeniem, a led miga tylko w momencie wciśnięcia przycisku i w ramach powtórzenia led zapala się na stałe. Jeśli wpiszę wartość "mem_tempo" na sztywno w ifach to błyska zgodnie z wpisanym czasem. Cały czas w programowaniu jestem zielony, ale zastanawiam się czy nie ma to związku z częstotliwością pracy układu. Czy licznik tempo1 i tempo2 nie zlicza z większą częstotliwością niż pracuje timer programowy do migania i powtarzania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2019, o 13:17 
Offline
Użytkownik
Avatar użytkownika

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

Ale to już ma być program z tą dodatkową zmianą czasu migania po drugim kliku w odpowiednich ramach czasowych? Czyli ten docelowy, o który Ci chodziło?

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2019, o 18:08 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Tak.
Myślę, że problem leży w tym, że jeśli ustali się np tap=2, to ustawia zliczoną od pierwszego wciśnięcia wartość tempo1, następnie ją zeruje i znów wraca do przypisania tej wartości czyli już nei tempa tylko 0 do mem_tempo. Próbuję rozwiązać to kolejną zmienną, ale teraz reaguje tylko na wciśnięcie przycisku (nie do końca wiem czemu)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2019, o 21:14 
Offline
Użytkownik
Avatar użytkownika

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

No dobra, widzę, że coś próbujesz. Poniżej moja działająca propozycja na attiny13 - tap z możliwością korekty czasu (oczywiście tylko w dół bo to wynika z logiki pracy takiego układu).
Dodałem sporo komentarzy, ale jak czegoś nie będziesz rozumiał to pytaj. Zachęcam do szczegółowej analizy tego programiku. Można go napisać na kilka sposobów, np. z wykorzystaniem maszyny stanów jednak obrałem drogę jaką zasugerowałem już wcześniej.

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


To co jest w przerwaniach (dzielnik) nie jest wymagane, ale z racji, że to Attiny13 tak mi było wygodniej czas dobrać, a może i takie rozwiązanie Tobie się kiedyś przyda ;)
Polecam początkującym wykonać układ i przetestować z różnymi parametrami.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2019, o 17:16 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Dzięki, może coś uda mi się z tego kodu wydobyć. Chociaż i tak chciałbym wiedzieć czemu moja wersja nie działa. Zastanawia mnie cały czas praca zegara i podejrzewam, że to z tym może być też problem.
Co masz na myśli z "korektą czasu tylko w dół"?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2019, o 17:21 
Offline
Użytkownik
Avatar użytkownika

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

Cytuj:
Co masz na myśli z "korektą czasu tylko w dół"?

Wypróbuj program :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2019, o 21:48 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Jeśli korekta polega na tym, że każde ponowne wciśnięcie może być jedynie wprowadzić krótszy czas od poprzedniego to jest to totalnie bez sensu. Każdy możliwy tap w urządzeniach audio/ light działa dokładnie tak jak to opisałem w pierwszym poście :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2019, o 22:46 
Offline
Użytkownik
Avatar użytkownika

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

Nie sprawdziłeś mojego programu, a oceniasz. Gdybyś go wypróbował wiedział byś, że mam rację i o co mi chodzi.
Masz ograniczy czas na korektę, gdy on minie to ponowny klik znów rozpoczyna liczenie. Można oczywiście zmodyfikować program i wydlużać imtetwał trzecim klikiem, ale wydaje mi się to trochę bez sensu - nie wiem jakie będzie zastosowanie tego urządzenia.
Jeszcze raz apeluję abyś przetestował mój program inaczej uznam, że po prostu straciłem czas próbując Ci pomoc, a jedyną pociechą będzie, że ktoś inny może wykorzysta ten algorytm do jakiejś wycieraczki samochodowej, itp...
Program zawsze możesz zmodyfikować jak już będziesz wiedział jak się zachowuje :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2019, o 23:21 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

W końcu udało mi się uruchomić tapa! Dzięki za kody, sporo mi pomogły ;) Jedna rzecz mnie tylko denerwuje, jest banalnie prosta, a nie wiem jak się jej pozbyć.

Pytanie OT: warto zmieniać rezonatory z 11.0592 na 22.1184 w celu "szybszej" pracy układu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2019, o 07:21 
Offline
Użytkownik
Avatar użytkownika

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

No to pochwal się efektem końcowym :)
No i cóż to za rzecz jedna banalna Cię denerwuje? Może wspólnymi siłami ją ogarniemy :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2019, o 21:52 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 145
Pomógł: 0

Na razie zająłem się kolejną częścią projektu, skoro ta w miarę funkcjonuję. Jeśli dalej będzie przeszkadzać to później nad nią posiedzę ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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