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



Teraz jest 24 lut 2025, o 15:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 7 cze 2015, o 09:13 
Offline
Nowy

Dołączył(a): 04 cze 2015
Posty: 3
Pomógł: 0

Witam, program realizuje pomiar długości impulsu. Po wystąpieniu zbocza opadającego w procedurze przerwania zapamiętana jest wartość ICR1 w zmiennej LastCapture, w kolejnym przerwaniu po wystąpieniu zbocza narastającego odejmując wartości ICR1 - LastCapture otrzymamy długość impulsu. Program działa poprawnie za wyjątkiem pierwszego uruchomienia (po resecie). Sprawdziłem, że wtedy nie jest do zmiennej LastCapture przypisywana wartość ICR1, stąd błędna wartość długości impulsu. Proszę o podpowiedz, gdzie tkwi błąd.

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: 7 cze 2015, o 09:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 mar 2014
Posty: 356
Lokalizacja: Pruszków
Pomógł: 15

Witaj
Jeszcze nie jestem tak mocno oblatany w C ale
Mirek zawsze wspominał aby dać mały delay po załączeniu podciągania wewnętrznego aby się ustabilizowało napięcie na pinie procka.
Nawet pokazywał złe działanie programu w poradniku o mikroswitchach i ledach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 12:52 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Też nie jestem jeszcze aż tak do końca w temacie .... i poszerzył bym trochę teorię kolegi P3ndz3lka ....
Mikrokontroler posiada w sobie całą masę bloków które po resecie muszą się "obudzić" a nie wszystkie budzą się jednocześnie tylko w określonej kolejności ... Większość z nich potrzebuje do pracy prawidłowego taktowania więc najpierw musi się odpalić cała maszyneria zegara i taktowania a potem dopiero budzą się do roboty poszczególne bloki ...
Z tego co kojarzę istnieją specjalne bity konfiguracyjne których ustawieniem można regulować sprawy związane z opóźnieniami przy restarcie mikrokontrolera ...
Jak nie chcesz się za bardzo wczytywać i dochodzić szczegółowo co jest grane przed pierwszym pomiarem wstaw jakiś mały delay i pewnie wtedy pierwszy pomiar już będzie prawidłowy .. to potwierdzi naszą teorię.
Metody pomiarów parametrów impulsów to temat rzeka: spotykałem się z takimi algorytmami że pomiar był wykonywany wiele razy a wynik uśredniany za pomocą przybliżenia ....


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 16:35 
Offline
Nowy

Dołączył(a): 04 cze 2015
Posty: 3
Pomógł: 0

Układy są ustabilizowane, niezależnie czy pierwszy impuls pojawi się po kilku czy kilkunastu sekundach, efekt jest taki sam, tzn. zmienna LastCapture ma wartość zero. Kolejne pomiary są już prawidłowe.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 19:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 mar 2014
Posty: 356
Lokalizacja: Pruszków
Pomógł: 15

Nie chodziło nam o to kiedy pojawia się pierwszy impuls
lecz o to, że w momencie kiedy załączasz podciąganie a program leci dalej
i zanim narośnie napięcie na pinie wejściowym może zadziałać przerwanie od zbocza opadającego na które oczekujesz.
Zrób sobie debuger jedno-diodowy jaki pokazuje Mirek w poradniku

http://mirekk36.blogspot.com/2014/04/puapki-programowe-debuger-na-jednej.html

i sprawdź czy przypadkiem po resecie od razu nie
wykonywane jest przerwanie.

A tak w ogóle to na jakim procku pracujesz, jakie ma taktowanie i jakie impulsy mierzysz (jak długie czasowo)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 cze 2015, o 10:01 
Offline
Nowy

Dołączył(a): 04 cze 2015
Posty: 3
Pomógł: 0

Faktycznie przerwanie było wykonywane po restarcie, opóźnienia nic nie zmieniły. Uzupełniłem warunek wykonywany w przerwaniu do postaci: if ((edge_flag == 0) && (ICR1 != 0)) - w takiej formie działa poprawnie.
ATmega 162, 8 MHz, impulsy od 50 do 100 us.
Dziękuję za pomoc.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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