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



Teraz jest 3 lut 2025, o 16:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 21 wrz 2014, o 19:14 
Offline
Nowy

Dołączył(a): 08 mar 2014
Posty: 24
Pomógł: 0

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


Nie wiem co się dzieje bo zamiast liczyć średnią program zlicza do wartości z czujnika ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2014, o 20:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 lip 2014
Posty: 30
Pomógł: 2

Nie wiem jaką metodę stosujesz, ale na mój rozum:
"dt" ma stałą wartość więc "temp" również ("dt"+1=10+1=11). Przez to masz cały czas mnożoną zmienną "średnia" przez 10, dodawany nowy pomiar i dzielone przez 11. Początkowa wartość "srednia" to 0, czyli z początku masz 0* 10 =0. Następnie dodajesz wynik, załóżmy 110, wychodzi Ci 110. Dzielisz to na 11 ("temp") i dostajesz 11. Robiąc to dziesięć razy, otrzymamy 110 (podając cały czas 110 jako wynik). Podając 110 11 razy:

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


Reasumując: program wykonuje się bardzo dużo razy na sekundę. Wystarczy kilkaset lub więcej razy (co dla mikrokontrolera taktowanego np. 8 Mhz to nie problem) wykonać Twój sposób na średnią by zmienna "srednia" przyjęła wartość "pomiar(5)". Dodaj opóźnienie, to zaobserwujesz jak się zmienia wartość zmiennej "srednia" :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2014, o 21:26 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Niestety nie ma kolega racji. Po dziesięciu przebiegach średnia będzie wynosiła dopiero 64, a nie 110.
Gdyby tego było mało to średnia nigdy nie osiągnie wartości 110!!!. Zakładajac, że adc ma wartość 110 to średnia po 31 obiegach osiągnie wartość 100 i nigdy nie będzie więcej. To wynika z odrzucanych części po przecinku, gdyż stosujemy średnią typu uint32_t, czyli liczbę całkowitą. Żeby kod działal prawidłowo średnia powinna być typu float.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2014, o 23:01 
Offline
Moderator
Avatar użytkownika

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

zamiast tak:

karwacka9 napisał(a):
               
wynik = pomiar(5);
                srednia = srednia * dt;
                srednia = srednia + wynik;
                temp = dt + 1;
                srednia = srednia / temp;


napisz tak:

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


i zacznie wszystko działać

_________________
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: 21 wrz 2014, o 23:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 lip 2014
Posty: 30
Pomógł: 2

Faktycznie źle napisałem :D 110/11 to 10, a nie 11 XD I w tym tkwił mój błąd w obliczeniach, przepraszam. Faktycznie za 30 razem po ciągłym podawaniu 110, dojdzie do 100 i ani dalej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2014, o 08:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

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


Może jeszcze się dobrze nie obudziłem i coś mi się miesza, ale czy (swoją drogą) nie powinno być: 0b11111000 ?

Wysłane z mojego GT-S7710



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2014, o 08:12 
Offline
Moderator
Avatar użytkownika

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

HCOOH napisał(a):
ale czy (swoją drogą) nie powinno być: 0b11111000 ?


pewnie że powinno ;) tylko trzeba wypatrzeć takiego BUG'a ;)

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

Strefa czasowa: UTC + 1


Kto przegląda forum

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