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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 cze 2025, o 04:16


    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 2 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