Witam,
Usiłuję z płytki arduino pro mini z mikroprocesorem atmega328p zrobić uniwersalny sterownik silników krokowych z regulowaną częstotliwością przełączania za pomocą potencjometru od 0 do 1000 Hz.
Potrafię tak zaprogramować na konkretną częstotliwość lub żeby sie zmieniała w ograniczonym zakresie (wykorzystując przerwania) i wtedy działa. Albo z ograniczoną rozdzielczością przełączania (początkowe wartości fajnie się dzielą przez 2 później już gorzej) jednak mnie interesuje pełna rozdzielczość (1,2,3,456,789,998,999 itp.).
Po nieudanych eksperymentach z próbą regulacji w przerwaniu (przerwanie działało, regulacja już nie) spróbowałem zrobić licznik do liczby 8000000 przy założeniu że częstotliwość taktowania procesora wynosi 8000000Hz. Wtedy czas przełączania wynosiłby idealnie 1 sekundę o ile sie nie myle xd a 8000000 fajnie by sie dzieliło przez 2 żeby potem elegancko uzyskać kolejne częstotliwości przełączania w kierunku 1000Hz. Niestety, albo diody śmigają za szybko albo za wolno.
Zacząłem podejżewać iż procesor atmega328p nie przechowuje tak dużych liczb i dlatego poprawne jej porównanie w liczniku nie jest możliwe więc próbowałem rodzdzielić ten licznik na dwie części tj. licznik w liczniku ale to też niewiele dało... diody świecą się cały czas.
Program piszę w eclipsie a wgrywam mkAVRcalculatorem (częstotliwość taktowania 8kHz zaznaczona w fusebitach) korzystając z USBasp.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Cytuj:
#define F_CPU 8000000UL <--- tego NIGDY nie pisze się w kodzie
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zdjęcie:
![Obrazek](https://obrazkiforum.atnel.pl/thumb/15096/b372e0e7ac439de72f757577b7a24c67.jpg)
No i to w sumie tyle. Bardzo proszę kogokolwiek o konstruktywną krytykę i pomoc w rozwiązaniu problemu (bądź też podanie innego działającego sposobu).