Dokonuje pomiaru dzielnika napięcia z częstotliwością 100Hz i ładnie działa
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Częstotliwość 1000Hz jest to już za dużo, 200Hz także. Czy ktoś może mi powiedzieć jak mogę policzyć z jaką częstotliwością mogę dokonywać pomiarów?
Na mój program składa się:
- odczyt ADC
- wysłanie go po RS232 - ustawiłem go na 1Mbps i ładnie przesyła mi znaczki.
Jak mi się wydaje, że mogę policzyć jaką częstotliwość mogę uzyskać:
Częstotliwość kwarcu / Preskaler ADC
16000000 / 128 = 125000
Na pomiar adc składa się 14,5 taktów zegara, więc pewnie trzeba podzielić dalej
125000/14,5 = 8620
A więc mając 1000Hz uzyskuje tylko kilka wolnych taktów zegara
8620/1000 = 8,62
Nawet przy 200Hz procesor się nie wyrabia
8,62*5 = 43,1
Po pomiarze muszę wysłać wynik przez RS232
Mam 5 znaków
Każdy znak to 2 bity
Wychodzi wysłanie 10 bitów
Funkcja wysyłająca znaki
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Z jaką częstotliwością można wysyłać znaki przez tą funkcję?
Wydaje mi się, że pomiar adc trwa tylko 14,5 taktów, a wysłanie znaków trwa dużo dłużej i to ta funkcja jest tutaj wąskim gardłem.
Czy uda mi się zyskać na wydajności, w funkcji pomiaru ADC
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
pozbędę się while i w programie po wysłaniu znaków będę sprawdzał, czy pomiar się skończył?
<pomiary trwają już jakiś czas>
- <zaczynam pomiar ADC>
- <przeskakuje do wysyłania poprzedniego pomiaru przez RS232>
- <po wysłaniu paczki danych odczytuje ADC>
I tak w kółko te trzy punkty.
Czy coś takiego ma sens?
Gdyby udało mi się uzyskać 200Hz byłbym zadowolony.
Nie jestem pewien jaką część czasu zegara zabiera pomiar ADC bo działa on ze swoim preskalerem i jak to się odnosi do wolnego czasu, który ma reszta mikroprocesora (nie ma ona preskalera).