ATNEL tech-forum
https://forum.atnel.pl/

Problem z logiką albo sprzętem
https://forum.atnel.pl/topic22597.html
Strona 1 z 1

Autor:  haterkmp [ 2 paź 2019, o 23:34 ]
Tytuł:  Problem z logiką albo sprzętem

Otóż tak do sedna
stan po włączeniu układu:
timer1 zgłasza co 1ms przepełnienie i inkrementuje zmienną A;
zmienna A liczy do zmiennej B (500), zeruje się i zmienia stan PA.7 zaświecając i gasząc leda
Pętla główna kręci się i sprawdza stan przycisków za pomocą debounce, sub.
tu jest wszystko ok.
i teraz
pierwszy stan niski (zwykły tact switch) na PD.3 ma wyzerować A, timer1 po przepełnieniu znowu zwiększa A co 1ms;
drugi stan niski ma zatrzymać inkrementację A, przepisać jej wartość do B, wyzerować A i wznowić inkrementację A.
i znów A liczy do zmiennej B (wartość pomiędzy pierwszym a drugim stanem niskim na PD.3) i zmienia stan PA.7.

I niestety nie działa w żadnej konfiguracji - albo bardzo skraca się czas pomiędzy zmianą stanu albo bardzo wydłuża. W przerwaniu od timer1 jest "granica" wyznaczona na 15s.

Innymi słowy: wciskam przycisk raz, mija jakiś czas, wciskam drugi raz - led ma zaświecać się i gasnąć w ten "jakiś czas".
Dla zainteresowanych - ma to spełniać rolę TapTempo w sterowniku midi do procesora efektów, czyli podczas pierwszego nadepnięcia na przycisk sterownik wysyła cc on do procesora a podczas drugiego wysyła cc off i dioda ładnie mryga na sterowniku i w procesorze.
Pomóżcie bo kombinuję drugi tydzień...

Autor:  mirekk36 [ 3 paź 2019, o 07:09 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Panie kolego to jest forum techniczne, programistyczne a nie literacko-poetyckie - więc jeśli oczekujesz szybkiej porządnej odpowiedzi czy podpowiedzi - to posługuj się kodem zródłowym a nie prozą czyli opisami z których nic nie wynika. Na takich forach to się pokazuje albo kody albo schematy.

Więc wstaw kawałek swojego kodu - najlepiej skrócony i okrojony tak aby tylko wyekstrahować sam problem i wtedy będzie wszystko czytelne ok?

Autor:  haterkmp [ 3 paź 2019, o 08:38 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Yhmy ok. Inkrementacji zmienej po przerwaniu od timer1 chyba nie muszę podawać jako kodu?
W pętli głównej program sprawdza stan przycisków:

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


I procedura obsługi tego konkretnego przycisku:

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


I teraz kwestia przełączania samego leda. Na początku programu, przy deklarowaniu zmiennych, do Licz2_timer wrzucam 500, żeby led przełączał się co 500ms. Z tego co wymyśliłem to żeby po późniejszym porównaniu (po akcji z przyciskami) trzeba zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i nie działa. Robię to porównanie w programie głównym, w przerwaniu od timer1, w subie od debounce w każdym case i nic. Albo bardzo się skraca albo wydłuża cykl liczenia.
Czy teraz jest lepiej?

Autor:  grzeniu 73 [ 3 paź 2019, o 15:53 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Nie ma całego programu to mi się nie chce tego wrzucać na swojego avrka. Podpowiem ci jak najłatwiej zlokalizować problem.
Podłącz sobie uart. Zwiększ czas nie na 1ms tylko jakiś większy może 100ms i będziesz wiedział co sie dzieje w programie i gdzie się robi błąd .
Przed pętla ustaw sobie Porta.7=1 albo =0 ,bo nie wiem czemu ale często tak mam ,ze samo toggle później w programie nie działa.Jak ustawisz raz na 1 lub 0 to juz normalnie działa. Druga sprawa masz timer na 1ms ,a samo debounce wprowadza chyba 20ms opóźnienia. Zrób ten przycisk tez na timerze.
Jeszcze jedno w podprogramie zrób ,tylko
Incr Licz_case
If Licz_case = 3 Then
Licz_case = 0
End If
Resztę w pętli

Autor:  haterkmp [ 3 paź 2019, o 16:48 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Stan portu A jest ustawiany na początku w kofiguracji. Ale dzięki za rady po pracy będę kombinował.

Autor:  malu [ 3 paź 2019, o 17:21 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Jak to możliwe to wrzuć cały kod, w tym co wstawiłeś wszystko wydaje się być ok.

Autor:  haterkmp [ 3 paź 2019, o 18:13 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Generalnie jakichś szczególnych rzeczy w programie nie ma - jeden timer obsługuje multipleks wyświetlaczy, kilka innych debounce w pętli głównej i wysyłanie po programowym uart kodu wciśniętego przycisku. Ale jak wróce z pracy to wrzucę lekko okrojony kod - chyba, że chcecie czytać flagi bitowe od kontrolek...
Zastanawiam się czy obsługi tego jednego przycisku nie zrobić na INT1 jako że ma wyższy priorytet niż przepełnienie.

Autor:  malu [ 3 paź 2019, o 18:34 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Cytuj:
Zastanawiam się czy obsługi tego jednego przycisku nie zrobić na INT1 jako że ma wyższy priorytet niż przepełnienie.

Ja z DEBOUNCE nie korzystam wcale, każde DEBOUNCE blokuje program na jak dobrze pamiętam 20ms,
20ms dla procka to szmat czasu, w bardziej rozbudowanych programach może to mieć znaczenie.
Skoro timer odmierza 1ms, od jego przerwania zrób timer programowy na powiedzmy 10ms i na podstawie tego
w pętli głównej zrób sprawdzanie przycisków.

Autor:  haterkmp [ 3 paź 2019, o 19:00 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Sprobuje pozmieniac czasy dla licznika zmiennej i odszumiania stykow.

Autor:  grzeniu 73 [ 3 paź 2019, o 20:38 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Jesli masz tam jeszcze multipleksowanie wyświetlaczy to musisz to naprawdę dobrze napisać na bazie timerow. Ogólnie program wydaje sie dosyć prosty i w sumie powinien działać

Autor:  haterkmp [ 3 paź 2019, o 21:52 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Dopóki nie przyciskam nieszczęsnego switcha wszystko jest ok - jeden timer sobie mieli wyświetlacze, drugi inkrementuje zmienną i doliczając do 500 (ustawiona wartość bazowa) zmienia stan leda, wysyła dobre dane przez midi podczas wciskania pozostałych przycisków. Wszystkie funkcje działają nawet jak się zwiesi timer1. Gdzieś jest jakaś pierdoła. Poniżej lekko okrojony kod. Obsługa pozostałych przycisków jest taka sama tylko wysyła inne wartości (określone na początku).
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  haterkmp [ 3 paź 2019, o 23:28 ]
Tytuł:  Re: Problem z logiką albo sprzętem

Mam! Podpiąłem LCD żeby widzieć wartości zmiennych licz1_timer i licz2_timer. I okazało się, że z każdym naciśnięciem owszem, zerowałem licznik 1 ale drugi miał wpisaną poprzednią wartość pierwszego i następowało zerowanie pierwszego przy równości z drugim. I teraz podczas pierwszego wsićnięcia zeruję licz1_timer i wpisuję górną granicę dla licz2_timer czyli jakieś 65535 więc nie nastąpi wyzerowanie licz1_timer. Teraz już kosmetyka. Dziękuję wszystkim, którzy mnie nakierowali, w szczególności grzeniu73. Czasami wystarczy tylko jedno słowo by rozwiązać problem.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/