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



Teraz jest 22 mar 2026, o 18:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 12 mar 2017, o 14:02 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 19
Lokalizacja: Usa
Zbananowany użytkownik

Pomógł: 0

Witam serdecznie, chciałem stworzyć sobie prostą funkcję która zliczała by impulsy do czujnika halla (max 30 impulsów na sekundę). Nie potrafię ocenić czy MUSZĘ koniecznie wykorzystać do tego, któreś z przerwań INT. Chciałem by zostało to zrealizowane programowo.
Program niby działa lecz nie tak jak powinien, wyświetlane są cyfry nie wiadomo skąd wzięte.
Proszę o pomoc i wytłumaczenie - mając na względzie, że jestem bardzo początkującym ( próbuje raczkować).

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






PS. Gdyby ktoś chciałby być tak miły i miał ochotę wytłumaczyć mi jeszcze raz działanie wskaźników, struktur byłbym bardzo wdzięczny. (Dodam, że czytałem BB już z 2 razy, nie wspominając stron z wskaźnikami i strukturami).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2017, o 14:17 
Offline
Nowy

Dołączył(a): 12 mar 2017
Posty: 2
Pomógł: 0

funkcję hall() wywołujesz dopiero gdy spełniony zostaje warunek sekundy%3 a powinieneś zliczać je ciągle, wyrzuć hall() z tego if'a i wrzuć go do pętli while abyś mógł sprawdzać pin od halla praktycznie cały czas, a co sekundę (timerem) wyświetlaj i przeliczaj RPM na LCD. jeszcze optymalniej gdybyś impulsy zliczał w przerwaniu INT0, nie musisz, ale jest to łatwiejsze do wykonania i czytelniejsze po roku jak spojrzysz w kod ponownie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2017, o 14:37 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 19
Lokalizacja: Usa
Zbananowany użytkownik

Pomógł: 0

Faktycznie za chwilę spróbuję zrobić to wszystko w oparciu o INT0. Wyciągnąłem funkcję hall() na wierzch do głównej funkcji while(1). Dodałem jeszcze jedno sprawdzenie warunku "if" w funkcji hall() z opóźnieniem 10ms (zamiast czujnika chwilowo stosuje przycisk) i mimo wszystko wyświetlane są dziwne wartości na LCD po różnej liczbie szybkich wciśnięć np. 4, 238, 60, 83. Wg mnie powinny to być wielokrotności 60 gdzie jest problem? Dodam, że warunek wylicza obroty po 4 sekundach bym zdążył wcisnąć klawisz x razy, docelowo będzie 1s.



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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Xmen napisał(a):
Wyciągnąłem funkcję hall() na wierzch do głównej funkcji while(1). Dodałem jeszcze...

Pokaż to następne wcielenie programu.
Xmen napisał(a):
zamiast czujnika chwilowo stosuje przycisk...

...to może paluszek drży? :)
Xmen napisał(a):
Gdyby ktoś chciałby być tak miły i miał ochotę wytłumaczyć mi jeszcze raz działanie wskaźników, struktur byłbym bardzo wdzięczny. (Dodam, że czytałem BB już z 2 razy...

Wiesz to z czasem samo przyjdzie, my też możemy tylko pisać ...ale co, to samo co w BB?
Przedstaw jakiś problem to wtedy.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2017, o 19:25 
Offline
Użytkownik

Dołączył(a): 22 sie 2013
Posty: 73
Pomógł: 7

Kolego piszesz że zastępujesz czujnik Hall'a przyciskiem a nie widzę tam żadnej eliminacji drgań styków, no to nie dziwne że jakieś losowe liczby ci tam wyświetla.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2017, o 18:09 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 19
Lokalizacja: Usa
Zbananowany użytkownik

Pomógł: 0

Cytuj:
Kolego piszesz że zastępujesz czujnik Hall'a przyciskiem a nie widzę tam żadnej eliminacji drgań styków, no to nie dziwne że jakieś losowe liczby ci tam wyświetla.

Poniżej w kodzie dalej nie wprowadziłem żadnej eliminacji drgania styków, a mimo to działa tak jak powinno. Kiedyś na pewno się dowiem czemu tak się działo. Obecny kod funkcji zamieszczam poniżej i wywołuję ją w pętli głównej - rpm(0,0);
Wszystko na tą chwilę działa tak jak bym tego oczekiwał, nie wiem natomiast jak będzie się to zachowywało z czujnikiem halla i wskazywaniem prędkości (dokładność pomiaru większa niż w tej chwili nie jest wymagana).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam takie pytanie, chciałbym stworzyć sobie funkcję testującą, która miała by za zadanie sprawdzić poprawność działania jakiegoś układu (w tym momencie nie ważne). Warunkiem uruchomienia funkcji chciałbym by była zmienna pochodząca z funkcji rpm(); - obroty. W jaki sposób mogę przekazać jej wartość do nowej funkcji test_start_up(); wskaźnik ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2017, o 20:36 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 19
Lokalizacja: Usa
Zbananowany użytkownik

Pomógł: 0

Xmen napisał(a):
Cytuj:
Kolego piszesz że zastępujesz czujnik Hall'a przyciskiem a nie widzę tam żadnej eliminacji drgań styków, no to nie dziwne że jakieś losowe liczby ci tam wyświetla.

Poniżej w kodzie dalej nie wprowadziłem żadnej eliminacji drgania styków, a mimo to działa tak jak powinno. Kiedyś na pewno się dowiem czemu tak się działo. Obecny kod funkcji zamieszczam poniżej i wywołuję ją w pętli głównej - rpm(0,0);
Wszystko na tą chwilę działa tak jak bym tego oczekiwał, nie wiem natomiast jak będzie się to zachowywało z czujnikiem halla i wskazywaniem prędkości (dokładność pomiaru większa niż w tej chwili nie jest wymagana).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam takie pytanie, chciałbym stworzyć sobie funkcję testującą, która miała by za zadanie sprawdzić poprawność działania jakiegoś układu (w tym momencie nie ważne). Warunkiem uruchomienia funkcji chciałbym by była zmienna pochodząca z funkcji rpm(); - obroty. W jaki sposób mogę przekazać jej wartość do nowej funkcji test_start_up(); wskaźnik ?


Odpowiedziałem sobie po części sam funkcją testową
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i jej wywołanie w głownej funkci while(1)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mam pytanie jeśli zmienną obroty mam zdefiniowaną jako globalną to wszystko jest OK, natomiast jeśli chciałbym by znajdowała się wewnątrz funkcji rpm() to w jaki sposób mogę przekazać jej wartość ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2017, o 10:31 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 19
Lokalizacja: Usa
Zbananowany użytkownik

Pomógł: 0

Dzięki za podpowiedź, myślałem właśnie nad tym by zwrócić wartość funkcji rpm() i przekazać ją za pomocą wskaźnika jako argument innej funkcji ,- czy tak wogole można ?



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

Dołączył(a): 21 sie 2014
Posty: 90
Pomógł: 0

Xmen napisał(a):
PS. Gdyby ktoś chciałby być tak miły i miał ochotę wytłumaczyć mi jeszcze raz działanie wskaźników, struktur byłbym bardzo wdzięczny. (Dodam, że czytałem BB już z 2 razy, nie wspominając stron z wskaźnikami i strukturami).

Rozumiem Cię doskonale. Czasem trzeba jeszcze "impulsu" żeby zaskoczyć i potem już wszystko działa :)

topic17967.html - Z jednej strony wiedziałęm jak to działa ale brakowało mi pewności co do poprawności rozumowania.
Czego nie rozumiesz? Napisz, to razem postaramy się przebrnąć.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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