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



Teraz jest 18 paź 2019, o 08:01


Strefa czasowa: UTC + 1





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

Dołączył(a): 14 sty 2018
Posty: 117
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: 289
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: 117
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: 1653
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: 117
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: 1653
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: 117
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: 1653
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: 117
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: 117
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: 1653
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: 117
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: 1653
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: 117
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: 1653
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: 117
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: 1653
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 

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