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



Teraz jest 18 paź 2024, o 09:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 15 lut 2012, o 12:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 155
Lokalizacja: PL, DE, UK, IRL
Pomógł: 3

Siema, mam zagwozdkę, bardziej ideową niż programową (na razie ;-) )
Potrzebuję wykonać 3 kanałowy pomiar ADC. zależy mi na zachowaniu małej różnicy czasowej miedzy pomiarami, czy jeżeli w funkcji main, uruchomię kolejno:

pomiar(kanal1);
pomiar(kanal2);
pomiar(kanal3);

gdzie funkcję pomiar() odpowiadają za obsługę przetwornika ADC i zapisanie wyniku w pamięci RAM

to różnica w czasie między pomiar(kanal1), a pomiar(kanal2); wyniesie dla Atmega8A:
Normal conversions, single ended: 1.5 (Cycles from Start of Conversion) 13 (Conversion Time (Cycles)) //dane z datasheeta

[w sumie 14,5 cykli?]

przy kwarcu 11,0592 MHz
prescaler ustawiony na 64, to częstotliwość próbkowania = 172,8 kHz, wtedy
czas 14,5 cykli = 0,0839 e-3 = 83,9 us

i taka powinna być różnica między pomiarem 1 a 2?
czyli miedzy pomiarem 1 a 3 różnica wyniesie 2*83,9 us = 167,8 us?

ile cykli zajmuje zapisanie wyniku do pamięci mikroklocka?



Ustawienie prescalera na 2, spowodowałoby czas samplowania = 5,5255MHz, wtedy
czas 14,5 cykli = 2,62 e-6 = 2,62 us, tylko wtedy tracę 10 bitową rozdzielczość próbkowania, która powinna zawierać się (50-200 kHz)?

co istotnego pomijam w tych rozważaniach?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 15:13 
Offline
Moderator
Avatar użytkownika

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

Nic nie pomijasz w rozważaniach i dobrze myślisz poza jednym (tak mi się wydaje).

Programując w języku C nie licz na to, że doliczysz się czasów pomiędzy danymi liniami programu co do pojedynczych taktów zegara bo to bardzo wielki błąd. Do tego to jest asembler. I jak zależy ci na precyzyjnym dobraniu czasów nawet co do pojedynczego taktu zegara to w asemblerze będziesz to w stanie w pełni zrealizować.

Najbardziej dobitnie świadczy o tym twoje pytanie:

Cytuj:
ile cykli zajmuje zapisanie wyniku do pamięci mikroklocka?


Na które jak sądzę już nie mogłeś znaleźć odpowiedzi w PDF'ie tak jak ładnie to rozpisałeś wszystko dla czasów związanych z pomiarami ADC - i słusznie.... tzn że nie mogłeś tego znaleźć w PDF'ie

dlaczego? - bo to zależy wszystko do tego:

- jak będzie napisany program
- jaki będzie włączony stopień optymalizacji
- jakim rodzajem zmiennych będziesz się posługiwał np volatile czy nie?
- i od wielu jeszcze takich czynników

Dlatego tak jak pisałem na początku - język C nie jest stworzony do takich celów - tu już by ci się przydała wstawka asemblerowa a wtedy już znalazłbyś odpowiedź na swoje pytanie o czas zapisu do mikrokolocka w notach PDF. w których jest opisany każdy rozkaz asemblera i widać z niego w ilu cyklach zegarowych on się wykonuje. Zatem sam widzisz, że pisząc w czystym asemblerze - są takie możliwości - bo to ty piszesz rozkazy asm i możesz je dokładnie zliczyć i przemnożyć przez ilość cykli które zabierają.

A pisząc to samo w C spróbuj sobie podejrzeć plik *.lss czyli to co kompilator na końcu wygenerował w asemblerze. Okaże się , że często ten kod będzie taki sam przy jednym poziomie optymalizacji, ale wystarczy, że wpleciesz jedną linię nawet w nieco innej części programu a już może się wszystko zmienić.

_________________
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: 15 lut 2012, o 15:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 155
Lokalizacja: PL, DE, UK, IRL
Pomógł: 3

ok, coś tak czułem nosem właśnie, że to nie takie proste ;-)

assemblera sobie na razie daruje (w sensie pisanie wstawek assemblerowych) ;-)

miałem nadzieję, że można tylko z grubsza te czasy oszacować, typu że zapisanie uint16_t do pamięci to w najgorszym razie zajmie dajmy na to 10 cykli zegara.

dokładnych pomiarów co do us wykonywania programu nie potrzebuję.

dodatkową sprawą, która mnie teraz naszła jest ustawianie kanału dla ADC, wpisanie bitów MUX3:0 też zajmie ileś cykli zegara -czyli wprowadza opóźnienie miedzy moimi kanałami.?

Możesz jakoś przybliżyć sprawę związaną z utrzymaniem rozdzielczości 10bitowej?
czemu częstotliwość samplowania musi być aż tak duża (50-200kHz).
Sygnał który chcę przetwarzać ma max f=100Hz, czyli zgodnie z warunkiem Nysquita, wystarczyłaby mi 200Hz wartość próbkowania dla każdego kanału...

czy mieszam teraz jakieś pojęcia?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 15:40 
Offline
Moderator
Avatar użytkownika

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

Pewnie, że przełączanie kanału wprowadza dodatkowe cykle zegara - no ale już ustaliliśmy i ty powiedziałeś , że nie potrzebujesz aż takiej precyzyjnej rozdzielczości więc się tym nie przejmuj. Zresztą zwykle tak to bywa, że często zanim ktoś coś zrobi już tak praktycznie i fizycznie to rozważa, liczy te cykle zegara i rozbiera wszystko na drobne - a później okazuje się, że można było sobie to wszystko darować bo i tak program spokojnie się wyrabia - a nawet jeśli nie to dasz kwarc 20MHz zamiast 11MHz i już będzie lepiej ;)

Odnośnie częstotliwości samplowania to w nocie PDF mowa jest o jej możliwych maksymalnych wartościach a nie o ścisłym przedziale ograniczonym od dołu i góry. W dół poniżej 200kHz nic a nic cię nie ogranicza ;)

_________________
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: 15 lut 2012, o 17:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

A to nie ma tak, że taktowanie adc ma się zawierać w przedziale 50-200khz?(przy 10bitowym pomierze)

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 17:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 155
Lokalizacja: PL, DE, UK, IRL
Pomógł: 3

ok, dobrze wiedzieć, że w dół nic nie ogranicza... poza prescalerem ;-)

czy praca prescalera w trybie dzielenia na 2 albo dzielenia na 128 też się jakoś czasowo (cyklowo) różni?
w sensie szybciej dzieli przez 2 czy przez 128?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 17:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

marthinek napisał(a):
ok, dobrze wiedzieć, że w dół nic nie ogranicza... poza prescalerem ;-)

czy praca prescalera w trybie dzielenia na 2 albo dzielenia na 128 też się jakoś czasowo (cyklowo) różni?
w sensie szybciej dzieli przez 2 czy przez 128?


A wiesz na jakiej zasadzie działa prescaler? W przypadku dzielenia przez 128 na wyjściu będziesz dostawał impulsy 64 razy wolniej niż przy dzieleniu przez 2. Prescaler to coś w rodzaju licznika zbudowanego na przerzutnikach JK. Wiadomo, że pomiar będzie wykonywany wtedy wolniej.

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 18:07 
Offline
Moderator
Avatar użytkownika

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

marthinek napisał(a):
ok, dobrze wiedzieć, że w dół nic nie ogranicza... poza prescalerem ;-)

czy praca prescalera w trybie dzielenia na 2 albo dzielenia na 128 też się jakoś czasowo (cyklowo) różni?
w sensie szybciej dzieli przez 2 czy przez 128?


Tak jak powiedział kolega wyżej a ja dodam, że cyklami odpowiedzialnymi za działania preskalera nie masz co się martwić ;) bo to moduł sprzętowy a nie programowy. Ustawiasz preskaler i nic cię nie interesuje czy tam jakieś cykle są czy nie ma ;) .... to po prostu przerzutniki .

_________________
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: 17 lut 2012, o 11:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 155
Lokalizacja: PL, DE, UK, IRL
Pomógł: 3

Ok git, czyli idąc dalej, mogę zrzucić wartość kwarcu do:
1.8432 MHz, ustawić prescaler na 8, wtedy częstotliwość próbkowania wyniesie: 230,4 kHz

czas przetwarzania 14,5 cyki = 0,062 e-3 = 62 us.

Czyli mniej niż w przypadku taktowania z pierwszego podanego przykłądu w 1. poście, a do tego spada mi zużycie energii.

dla takiego kwarcu transmisja UART z ilością 115,2kbps jest wciąż obciażona błędem 0.0% (z tabelki datasheeta).

Hmm teoretycznie same korzyści? kosztem tylko pewnie jakiegoś wydłużenia czasu zapisywania przetworzonych przez ADC danych do pamięci RAM, i działaniem funkcji itoa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2012, o 13:31 
Offline
Moderator
Avatar użytkownika

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

czy to są korzyści czy wady to może określić tylko twórca projektu i pomysłu - bo kto mu zajrzy do głowy co on chce na końcu uzyskać.

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

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