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



Teraz jest 14 sty 2025, o 23:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 7 lip 2016, o 23:15 
Offline
Użytkownik

Dołączył(a): 19 sty 2014
Posty: 83
Pomógł: 2

Witam
Wróciłem do projektu stacji meteo i obecnie pracuje nad dokończeniem kodu do AS3935 .
Przerobiłem kod z C++ i wykorzystałem przerwanie INT2 i delay do mierzenia częstotliwości.
Wynik powinien być w okolicy 3125 +/- 109 (impulsów w ciągu 100ms).
Jak widać otrzymuje większe wartości i się zastanawiam czy może wynika to z niedoskonałości kodu.
Czy można to lepiej zrobić?

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


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 21:07 
Offline
Użytkownik

Dołączył(a): 19 sty 2014
Posty: 83
Pomógł: 2

taki monolog.
Próba z timerem dała lepsze wyniki.
Nie podoba mi się tylko inicjowanie timera przy każdym przejściu pętli ale nie wiem jak zatrzymać/zrestartować timer.
Clock 18432000Hz
Atmega644P

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


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 21:51 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego odpaliłeś timera a nadal używasz delaya:) Jeśli dobrze pamiętam sei() włączenie globalnego zezwolenia na wszystkie przerwania więc jak wyłaczasz to wylączasz wszystkie . Timer możesz wyłączyć poprzez wyłączenie "zezwolenia na przerwania od porównania" czyli TIMSK1 &=~(1<<OCIE1A);

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 22:04 
Offline
Użytkownik

Dołączył(a): 19 sty 2014
Posty: 83
Pomógł: 2

Tam jest wygodniej , przynajmniej dla mnie.

Dzięki za :
TIMSK1 &=~(1<<OCIE1A);

Ale czy licznik się wyzreuje? Czy też powinienem wpisać OCR1A = 1799 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 22:04 
Offline
Użytkownik

Dołączył(a): 19 sty 2014
Posty: 83
Pomógł: 2

Tam jest wygodniej , przynajmniej dla mnie.

Dzięki za :
TIMSK1 &=~(1<<OCIE1A);

Ale czy licznik się wyzreuje? Czy też powinienem wpisać OCR1A = 1799 ?
Edit:

I jeszcze jedno spostrzeżenie, kiedy zamiast w każdym przejściu pętli for zwiększać currentune i wpisywać go do rejestru w celu znalezienia najlepszej konfiguracji ustawię go na sztywno - 0
z poniższym kodem mam tak że w pierwszym przebiegu mam mniej przerwań . Kolejne są stabilne.
Podobnie jest dla innych wartości .
Skąd ta różnica ??
I dlaczego delay ma wpływ na pomiar ?


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

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lip 2016, o 09:21 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego delaye mają wpływ bo wstrzymują cały program. Trochę ten kod jakiś zagmatwany bo jeśli chcesz obliczyć czestotliwosc sygnału. To musisz zliczyć ilość impulsów następnie otrzymujesz częstotliwość f=1s/ilość impulsów. Czyli program powinien wyglądać tak Włączasz zliczanie impulsów włączasz timera odliczania czasu 1s i po odliczeniu czasu odczytujesz wartość zliczonych impulsów. Nie wiem dla czego wykorzystujesz tu pętle for a następnie w niej wykonujesz while ( czekasz na flagę)

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2016, o 21:02 
Offline
Użytkownik

Dołączył(a): 19 sty 2014
Posty: 83
Pomógł: 2

Zadanie jest takie znaleźć wartość rejestru przy którym częstotliwość generowana na nóżce jest najbliżej 31250Hz.
Pętla for służy do zmiany wartości wpisywanej do rejestru a w niej sprawdzamy częstotliwość.
Na chwilę obecną zrobiłem to przy pomocy dodatkowej funkcji na wzór z Arduino millis(). Nie za bardzo mi się podoba to rozwiązanie.
Kod wygląda następująco:
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  
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 0 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