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



Teraz jest 4 gru 2024, o 06:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 17 sty 2015, o 20:39 
Offline
Nowy

Dołączył(a): 17 sty 2015
Posty: 1
Pomógł: 0

Witam, chciałem zrobić projekt na ArduinoUno, z prockiem ATmega328P, nie mogę zrobić tego w ArduinoIDE ponieważ dla prowadzącego jest to za proste :roll: . Napisałem program którym z powodzeniem mogę sterować położeniem serwa programowo. Dodałem obsługę potencjometru z ADC i przerwaniami, jeżeli w pętli wpisze:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To serwo reaguje, dla położeń potencjometru przed połową ustawia się w położeniu 0 stopni, jak przejdę połowę zasięgu potencjometru to leci do końca. Chciałem jednak aby ruch serwa był ściśle związany z pozycją potencjometru. To też wymyśliłem, że do wartości 0.8 dodam (1.4*(odczyt z ADC/255)). W takiej konfiguracji przez 80% zasięgu potencjometru nic się nie dzieje po czym serwo wykona ruch o mniej więcej 50 stopni. Nie wiem czy to wina mojego przeliczania, próbowałem już różnych konfiguracji bo myślałem, że procesor nie daje rady z dzieleniem tego na bieżąco. Oto cały kod:

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


Z góry dziękuje za odpowiedź i przepraszam jeżeli pytanie jest trywialne :?


Edit: Poradziłem sobie z tym problemem przemnażając wartość ADCH przez 100 i dzieląc przez 25500. Mam natomiast jeszcze jedno pytanie: czy jest jakieś optimum tego rozwiązania? Bo z tego co myśle to chodzi o to że procesor nie radzi sobie z bardzo małymi wartościami dla tego nie było żadnego odzewu od serwa przez większość zakresu ruchu potencjometru.
Mam jeszcze błąd w kodzie, oczywiście powinno być
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: 17 sty 2015, o 21:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Trochę tak bez schematu, więc trudno mi się odnieść, ale czy linia:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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


Nie znam kompilatora więc tak trochę strzelam.

------------------------ [ Dodano po: 10 minutach ]

cubus napisał(a):
Bo z tego co myśle to chodzi o to że procesor nie radzi sobie z bardzo małymi wartościami dla tego nie było żadnego odzewu od serwa przez większość zakresu ruchu potencjometru.


Mikrokontroler sobie radzi, jeśli stosuje się odpowiedni typ zmiennych. Jeśli masz int to raczej nie licz na to, że będziesz miał wyniki float (czyli z wartością po przecinku). Dlatego właśnie należy stosować w takich przypadkach mnożniki, które "przesuwają" przecinek. I tak np. dzieląc (dla wyniku int) 15/30 otrzymasz najprawdopodobniej 0, podobnie 12/30 da 0. Natomiast "przesuwając" przecinek pozbywasz się "problemu zaokrągleń dla typu" i mnożąc w tym przypadku tylko licznik przez dziesięć otrzymasz w wyniku 150/30=5 i 130/30=4, czyli odpowiednio przeskalowane wartości, które się od siebie różnią proporcjonalnie. To tak z grubsza i mam nadzieję, że niczego nie poknociłem.

_________________
40-32:2=4!



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO