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



Teraz jest 21 sty 2025, o 15:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 55 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 9 kwi 2016, o 23:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

Daro69 napisał(a):
tak sobie myślę czemu nie tak?
bez przerabiania bibliotek.

Od tego powinno się zacząć a nie od próby wymuszania zera przez uint16_t. Przecież przy zmniejszaniu - gdy dojdzie do zera pojawi się wtedy 65535 nawet jeśli zmieni się w bibliotece i wcale nie będzie to ładnie

Więc takim warunkiem - ogranicznikiem jak najbardziej warto pomajstrować.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2016, o 19:55 
Offline
Użytkownik

Dołączył(a): 25 mar 2014
Posty: 84
Pomógł: 0

Właśnie moje próby z ograniczeniem zliczania tylko do 0 zacząłem w bibliotece enkodera w funkcji encoder_proc
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


ale nie wiedzieć czemu to nie działa.

Do funkcji Lcd_int() też zaglądałem ale nie wpadłem by zaglądnąć do BB a tam na tłusto jak byk na str. 232 wszystko jest, tak więc będę próbował zrobić sobie Lcd_long z wykorzystaniem ltoa().
Tak na marginesie: tyle razy oglądałem poradniki na których tyle razy było powtarzane o wykonaniu sobie odpowiednich funkcji dotyczących konwersji i byłem pewien, że takiego prymitywnego błędu nie zrobię, a jednak.



Ostatnio edytowano 10 kwi 2016, o 20:49 przez acid255, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2016, o 20:34 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3209
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Źle wstawiony kod.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2016, o 22:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

acid255 napisał(a):
ale nie wiedzieć czemu to nie działa.

A tyle razy też powtarzam - nie kombinuj w ciele bibliotek jeśli nie rozumiesz jak one dokładnie działają, po co ? po co ?

Przecież masz wołanego callbacka, twoją własną funkcję w której odczytujesz wartość enkodera i to w sposób atomowy - TAM ograniczaj czyli już u siebie w swoim kodzie - a nie w bibliotece

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2016, o 06:34 
Offline
Użytkownik

Dołączył(a): 25 mar 2014
Posty: 84
Pomógł: 0

czyli w mojej funkcji musi być taki ogranicznik wraz z nową zmienną dla zliczania impulsów:

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: 11 kwi 2016, o 06:48 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

Dokładniuśko tak ;) ... no ale chyba sam widzisz, że tobie teraz to działa - tak ? czy nie ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2016, o 07:00 
Offline
Użytkownik

Dołączył(a): 25 mar 2014
Posty: 84
Pomógł: 0

No właśnie jeszcze nie, bo akurat jestem w pracy - dziś to przetestuję.
Dziękuję za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2016, o 08:08 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

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

Dziwi mnie, że kompilacja tego kodu nie generuje żadnych ostrzeżeń. Przecież ten warunek:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nigdy nie będzie spełniony. Mało tego, dla ujemnych wartości zwracanych przez get_encoder(); rezultaty działania będą odmienne od oczekiwanych.

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

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


PS. Nie należy mieszać nazw polskich z anglojęzycznymi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2016, o 09:05 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

Sparrow-hawk napisał(a):
Dziwi mnie, że kompilacja tego kodu nie generuje żadnych ostrzeżeń. Przecież ten warunek:

Kolega wyżej napisał, że dopiero to przetestuje - i może warto było dać mu szansę to przetestować we własnym zakresie? ;) - dlatego ja nie pisałem o tych szczegółach. Bo często NIC tak nie nauczy kogoś jak doświadczenie na własnej skórze o co chodzi z typami .... Tymczasem to jest właśnie śliczny przykład - na którym nagle by wyszło o co chodzi ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2016, o 16:35 
Offline
Użytkownik

Dołączył(a): 25 mar 2014
Posty: 84
Pomógł: 0

Niestety ani moje wypociny, ani kod kolegi Sparrow-hawk nie ograniczają wyświetlania do liczb dodatnich.

Cytuj:
nie kombinuj w ciele bibliotek jeśli nie rozumiesz jak one dokładnie działają, po co ? po co ?


Dopiero ingerencja w Lcd_int ze zmianą atoa() na ltoa() wyświetla tylko liczby dodatnie ( oczywiście ograniczam wyświetlenie 65535 przy kręceniu w lewo ).

Dzięki wszystkim za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2016, o 16:48 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

no bo przekombinowałeś ;) po pierwsze to najpierw ustal o jaki zakres tobie chodzi ? od zera do ilu ? do 65535 ? czy mniej czy więcej ?

Bo jeśli od 0 do 65535 to przede wszystkim musisz sobie zmienić typ zmiennej, która przechowuje licznik enkodera na int32_t ! Wtedy będziesz mógł go zerować we własnej funkcji tak jak chciałeś wyżej gdzie pisałem, że idziesz dobrą drogą ;)

I nie będziesz potrzebował, tak jak mówiłem, robić zmian w bibliotece do enkodera, bo o te mi chodziło - a oczywiście jeśli chodzi o wyświetlanie na LCD liczb dodatnich większych niż 32768 to chyba normalne że musisz sobie dodać w bibliotece LCD nową funkcję ;) (ale to jest niejako zadanie do książki dla każdego czytelnika)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lis 2016, o 17:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Witam
Mam komentarz do cz. 5 poradnika o enkoderach. https://youtu.be/YnYDnZWSnl8?t=4m3s

Chciałbym zauważyć, że gdy w enkoderze określanym tu jako pełnokrokowy o przebiegu:

00
10
11
01
00 TRYK

zamienimy miejscami pin wspólny (GND) z pinem A lub pinem B to powinniśmy otrzymać przebieg:

00
10
11
00
00 TRYK

Taki oto właśnie dziwny przebieg ma jeden z pokazywanych enkoderów. Coś mi się wydaje że ten rzekomo dziwny enkoder, ma po prostu inaczej rozmieszczone wyprowadzenia (wspólny pin nie znajduje się na środku). I po zamianie miejscami odpowiednich wyprowadzeń, enkoder stanie się normalny ;) . To są tylko moje przypuszczenia. Pewnie Pan, Panie Mirku podczas testów wykluczył taką przyczynę dziwności tego enkodera? Ale może umknęło to uwadze.

Dodam jeszcze raz że, gdyby ktoś zamienił wyprowadzenia to uzyska taki sam efekt.

PS
Nie mam wiele praktycznego doświadczenia z enkoderami, więc jeżeli się mylę to proszę mnie poprawić. A o tych nietypowych kodowaniach słyszę pierwszy raz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lis 2016, o 17:49 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

ja z chęcią to sprawdzę ale na razie jestem daleko od tematu enkoderów - nie mnie jednak - NA PEWNO niedługo powrócę bo będzie mi potrzebna obsługa enkodera do jednego z kolejnych poradników ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2016, o 17:36 
Offline
Nowy

Dołączył(a): 27 lis 2016
Posty: 4
Pomógł: 0

Witam

Mam pytanie dotyczące funkcji void enkoder_proc () , a mianowicie nie rozumie w jaki sposób do zmiennej enc_stat kopiowane są wartosci z tablicy enc_tab. Chodzi mi głównie o pierwszy nawias kwadratowy enc_stat=( pgm_read_byte&[enc_stat & 0x0f][ABstate]). Jak to się dzieje że w zmiennej enc_stat może pojawić się np. 1 , 2 , 3 itd ?? Nie widzę w tej funkcji np. enc_stat++ żeby ją zwiększyć zmienna chociaż o jeden żeby mięć dostęp do następnego wiersza w tablicy enc_tab.

Proszę o pomoc w tym zakresie pozdrawiam

Chciałem jeszcze dodać że jestem nowym użytkownikiem tego forum i jest to mój pierwszy post.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2016, o 20:11 
Offline
Użytkownik

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

A co to jest ABstate w drugim indeksie?
Natomiast pierwszy indeks to 4 młodsze bity zmiennej enc_stat które się przecież zmienia bo po każdym "tyknięciu" przypisujesz mu właśnie nową wartość w zależności od starej wartości i ABstate

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2016, o 22:49 
Offline
Nowy

Dołączył(a): 27 lis 2016
Posty: 4
Pomógł: 0

I własnie już do tego doszedłem. Rozpisałem enc_tab na kartce i przeanalizowałem na spokojnie jak te indeksy się zmieniają w zaleznosci od ABstat i jest tak jak mówisz.

Enkoder już liczy :)

Dzięki za zainteresowanie w sumie błahym problemem.

Pozdrawiam i Wesołych Swiąt :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2016, o 08:07 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

damian29 napisał(a):
Rozpisałem enc_tab na kartce i przeanalizowałem na spokojnie

Zawsze to polecam ;) w wielu poradnikach ... to musi pomóc ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2017, o 23:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Cześć

Staram się właśnie od kilku godzin ogarnąć bibliotekę Mirka do enkoderów.
Mam całą przepisaną. Co więcej nawet dokonałem jej analizy :)
Tzn chodzi mi o mechanizm tablicowania (callbacki chyba się po warsztatach dobrze wryły).
No i mam zagwozdkę.
Testuję dwa enkodery, na zestawie ATB:
Na razie na INT0 i INT1
pełnokorokowy:
11 - tryk
01
00
10
11 - tryk

i chyba półkrokowy:
11 - tryk
01
00 - tryk
10
11 - tryk

Bibliotekę przepisałem dokładnie, zresztą analizując ją, nie widzę błędów, wszystko wydaje się być spójne.
ale jest problem:

Otóż na półkrokowym zdarzenie ENCODER_EVENT, przy pierwszym pokręceniu (po resecie) wykonuje się jeden raz następnie przestaje reagować.
Przerwania działają.
Funkcja encoder_proc nie chce już poraz kolejny ustawić flagi enco_flag.
Analizuję jakie wartości są pobierane z tablicy enc_tab przy kolejnych stanach ABstate (pinów encodera) i wydaje się, że powinno być ok.
Wszystko się kompiluje bez błędu.

Pełnokrokowy nie reaguje w ogóle (oczywiście przestawiam definicję w pliku .h).

Na razie nie wstawiam kodu, może ktoś miał podobnie, to musi być jakiś głupi błąd....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2017, o 07:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2014
Posty: 745
Lokalizacja: Warszawa
Pomógł: 32

To ja mogę tylko napisać, że także jestem po przepisaniu biblioteki z poradników i działa po prostu miodnie :-)
Ja mam encoder pełnokrokowy.

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2017, o 09:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

W celach diagnostyki wyświetlam na lcd wartości, które pobierane są z tablicy enc_tab. Czyli wartość zmiennej enc_stat (z funkcji encoder_proc)
Nie wiem czemu ale nie otrzymuję wartości typu 0x13, 0x20, 0x23, generalnie tych wartości które "sięgają" do starszej połówki bajtu i po operacji:
ABstate = (enc_stat & 0x30);
dają wartości niezerowe (np. 0x10).

oto moje tablice:
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.


i funkcja obsługująca tablicowane przeliczanie kroków:
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: 6 mar 2017, o 18:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 447
Lokalizacja: DKL
Pomógł: 53

@sq8dsr, przyjrzałem się wstawce którą zamiesiłeś i porównałem ze swoim kodem.
Ja mam tylko enkoder pełnokrokowy i z nim biblioteka napisana z poradników Mirka działa wyśmienicie.

Znalazłem dwie rozbieżności, które mogą mieć wpływ na twoje problemy.
Tablica dla połkrokowego wygląda ok, natomiast dla pełnokrokowego jest mała różnica w stosunku do mnie, jedna wartość u Ciebie jest 0x05, a ja mam 0x00, mój kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Druga sprawa, to sprawdź tą linijkę w encoder_proc(), bo jakby brakuje ci nawiasów i wg. mnie to może być kluczowe:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2017, o 18:53 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

matw napisał(a):
bo jakby brakuje ci nawiasów i wg. mnie to może być kluczowe:

i to jest kluczowe bo bez nawiasów to leci sieczkarnia jeśli chodzi o wyrażeni warunkowe ?: .... jedno łączy się z drugim w nieodpowiednim miejscu

ale wartości w tablicach to też klucz

No! panie matw ! .... otrzymujesz tytuł SOKOLE OKO :D

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2017, o 08:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

matw napisał(a):
Druga sprawa, to sprawdź tą linijkę w encoder_proc(), bo jakby brakuje ci nawiasów i wg. mnie to może być kluczowe:

hahaha, no i nie ma to jak świerze oko, głupi błąd. Dzięki kolego, wielkie.
Oczywiście to była kluczowa sprawa. Widać zbyt długo gapiłem się w ten kod i się już znieczuliłem na błędy :D
Oczywiście teraz działa wszystko bardzo dobrze. Zarówno na enkoderze pełno jak i półkrokowym.
Teraz muszę rozbudować bibliotekę, żeby można była zdefiniować i obsłużyć jednocześnie dwa enkodery.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 11:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

A jak muszę wspomnieć o dodatkowym efekcie który objawił się jako "skutek uboczny" biblioteki :)
Mianowicie przekonałem się w końcu do stosowania warunków preprocesora i kompilacji warunkowej.
Przerabiam obecnie bibliotekę do możliwość obsługi dwóch enkoderów ;)
Założenie jest takie, że ma obsługiwać dwa enkodery, ale nawet żeby to mogły być enkodery różne np. half i full.

Przepisywanie z poradnika ma jednak spore zalety hehehe :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 11:43 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27347
Lokalizacja: Szczecin
Pomógł: 1041

sq8dsr napisał(a):
A jak muszę wspomnieć o dodatkowym efekcie który objawił się jako "skutek uboczny" biblioteki

No proszę ;) .... warto bo to też ważna technika programowania jak widać

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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: 55 ]  Przejdź na stronę Poprzednia strona  1, 2

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