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



Teraz jest 16 maja 2025, o 22:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 13 sie 2013, o 04:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2013
Posty: 67
Pomógł: 1

Witam mam pewien problem otóż podczas zwiększania wartości zmiennej odpowiedzialnej za wykonywanie kroków w prawo wyskakuję mi losowa cyfra w granicach 4300 co ładnie krzaczy pracę silnika (jak łatwo się domyśleć kręci się w najlepsze)

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


funkcje obsługujące ruchy silnika

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


Dorzucam filmik o co mi chodzi :


kroki do wykonania | docelowa pozycja
kroki wykonane | podstawa obliczenia pozycji


Dodam że dzieje się tylko tak podczas rośnięcia wartości.

_________________
Zdravim



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2013, o 14:02 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

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

Moim zdanie przypisujesz a nie porównujesz

------------------------ [ Dodano po: 4 minutach ]

Poza tym dajesz
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
oraz
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Czyli co to robi ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2013, o 15:58 
Offline
Użytkownik

Dołączył(a): 12 mar 2013
Posty: 34
Pomógł: 0

Z wikipedii:

Cytuj:
Porównanie

W języku C występują następujące operatory porównania:
równe ("=="),
różne ("!="),
mniejsze ("<"),
większe (">"),
mniejsze lub równe ("<=") i
większe lub równe (">=").
Wykonują one odpowiednie porównanie swoich argumentów i zwracają jedynkę jeżeli warunek jest spełniony lub zero jeżeli nie jest.



Nigdzie też nie widzę ile wynosi F_CPU.
Rozumiem, że te rzeczy i inne o których wspomniał przedmówca masz gdzieś indziej zadeklarowane?

Po co instrukcja switch(s) jeśli linijki wcześniej jeszcze raz sprawdzasz te warunki?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
tego nie trzeba bo przecież są to zmienne globalne

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to też mi nie pasuje po pętli for w f-cjach step...
Jeszcze w tych samych funkcjach krok masz w uint8_t a zmienne odpowiedzialne za kroki w int8_t

A poza tym nie lepiej użyć przerwań timera do sterowania silnikiem zamiast _delay_ms?

Zauważ, że w dokumentacji _delay_ms(x)
Cytuj:
The maximal possible delay is 262.14 ms / F_CPU in MHz.

i jeszcze jeden cytat :
Cytuj:
In order for these functions to work as intended, compiler optimizations must be enabled, and the delay time must be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable), and applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application.

_________________
/*Animus aeger semper errat*/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2013, o 17:35 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

No tak .
Porównanie mam zakodowane z innego języka programowania "różne" jako
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
.Sorka ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2013, o 08:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2013
Posty: 67
Pomógł: 1

Anty wiem o tym jednak jak wiesz jestem początkujący wiec jak ogarne timery wraz z przerwaniami do tego stopnia to wtedy bedzie to realizowane na nich.

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


Nie wpisze extern, to danych nie przekazuje do glownej funkcji.

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


Racja moj blad teraz funkcje to voidy.

Teraz tylko czekam na silnik krokowy bo ten co mam niestety nie dziala zbyt zachwycajaco ;( (24V)

_________________
Zdravim



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2013, o 09:49 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

Jeżeli dobrze rozumiem to funkcje obsługujące silnik (Stepp_r i Stepp_l) trzymasz sobie w pliku funkcje.c.
Tam definiujesz zmienne uint8_t ok; itp.
Dalej powinieneś mieć plik funkcje.h i tam zdeklarować zmienne jako extern.
Includujesz plik funkcje.h i zmienne powinny hulać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2013, o 10:46 
Offline
Użytkownik
Avatar użytkownika

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

Antystatyczny napisał(a):
przekazujemy wyłącznie stałe dosłowne, czyli np 100, 200 czy tam 500. Kompilator już na etapie kompilacji musi dokładnie wiedzieć jakie opóźnienie ma wygenerować.


W sumie to logiczne, ale...

void ping_pong(uint16_t czas){
uint8_t i;
for(i=0; i<7; ++i) {


PORTC |= (1<<i);
_delay_ms(czas);
PORTC &= ~(1<<i);
}
for(i=7; i>0; i--) {
PORTC |= (1<<i);
_delay_ms(czas);
PORTC &= ~(1<<i);}
}
Takie coś działa, a zmienna czas była zmieniana w pętli for.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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