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



Teraz jest 18 paź 2019, o 07:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 11 paź 2019, o 09:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 263
Pomógł: 0

Witam.

Walczę od dłuższego czasu z pewnym projektem analizy przebiegów i dzięki pomocy kolegów próbowałem różnych rozwiązań i nawet trochę się udało mi coś tam się nauczyć.
Wielokrotnie pisałem o problemie pomiaru zmieniających się impulsów , które to jednak okazały się trochę za krótkie aby przy pomocy Attmegi 32 i przerwania ICP odczytać.
Udał się experyment na nowych urządzeniach przy pomocy przerwania ICP:

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


Jak wspomniałem pomagali koledzy ale się coś udało z tego zrobić.
Ale jednak okazało się że niektóre impulsy okazały się zbyt krótkie aby dokładnie odczytać ramkę problem zaczynał się poniżej 5us bo nie zdążyło w/w przerwanie tego zaobrazować.

Ale po dokładym poznaniu problemu może nie ma potrzeby czytać tych krótkich impulsów pokaże jak pokazywał przebieg oscyloskop gdzie została wciśnięta (naruszona) jena tzw lini:

Obrazek

wykres niebieski pokazuje jak działa dokładnie urządzenie , narastanie stanu z niskiego na wysoki i jego czasowy moment decyduje o porównania i pomiaru.

I dochodzę wreszcie do mojego pytania jak stworzyć przy pomocy programu taki właśnie niebieski przebieg ja nazywam go CLK - ponieważ dokładnie moment jego narastania pokazuje jak odczytać.
Pragnę przypomnieć że przerwania INT 0 I INT 1 mam zajęte w/w przerwanie ICP jest potrzebne ponieważ muszę wiedzieć jaka jest ramka , ale można chyba go zmodyfikować bo nie muszę analizować wszystkich impulsów.
I teraz tak impuls CLK można by podłączyć do wejścia pinu mikrokontrolera i wdanym momencie porostu porównywać stan pinu czy jest 0 czy 1.

Tylko jak przy pomocy timerów mogę to spróbować zrobić ?

------------------------ [ Dodano po: 31 minutach ]

AKSELINEK napisał(a):
Witam.

Walczę od dłuższego czasu z pewnym projektem analizy przebiegów i dzięki pomocy kolegów próbowałem różnych rozwiązań i nawet trochę się udało mi coś tam się nauczyć.
Wielokrotnie pisałem o problemie pomiaru zmieniających się impulsów , które to jednak okazały się trochę za krótkie aby przy pomocy Attmegi 32 i przerwania ICP odczytać.
Udał się experyment na nowych urządzeniach przy pomocy przerwania ICP:

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


Jak wspomniałem pomagali koledzy ale się coś udało z tego zrobić.
Ale jednak okazało się że niektóre impulsy okazały się zbyt krótkie aby dokładnie odczytać ramkę problem zaczynał się poniżej 5us bo nie zdążyło w/w przerwanie tego zaobrazować.

Ale po dokładym poznaniu problemu może nie ma potrzeby czytać tych krótkich impulsów pokaże jak pokazywał przebieg oscyloskop gdzie została wciśnięta (naruszona) jena tzw lini:

Obrazek

wykres niebieski pokazuje jak działa dokładnie urządzenie , narastanie stanu z niskiego na wysoki i jego czasowy moment decyduje o porównania i pomiaru.

I dochodzę wreszcie do mojego pytania jak stworzyć przy pomocy programu taki właśnie niebieski przebieg ja nazywam go CLK - ponieważ dokładnie moment jego narastania pokazuje jak odczytać.
Pragnę przypomnieć że przerwania INT 0 I INT 1 mam zajęte w/w przerwanie ICP jest potrzebne ponieważ muszę wiedzieć jaka jest ramka , ale można chyba go zmodyfikować bo nie muszę analizować wszystkich impulsów.
I teraz tak impuls CLK można by podłączyć do wejścia pinu mikrokontrolera i wdanym momencie porostu porównywać stan pinu czy jest 0 czy 1.

Tylko jak przy pomocy timerów mogę to spróbować zrobić ten impuls nazwany CLK ?


------------------------ [ Dodano po: 36 minutach ]

.

------------------------ [ Dodano po: 37 minutach ]

sory nie wiem jak przypadkowy cytat usunąć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2019, o 10:15 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 157
Pomógł: 17

Pierwsza uwaga
W poprzednim wątku napisałem że masz do dyspozycji jeszcze INT2
Czemu z niego nie skorzystasz?

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2019, o 15:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 263
Pomógł: 0

Tak faktycznie masz rację na pewno z tego skzystam .Tylko mam pytanie czy w czasie przerwania ICP moge wyzwolic inne przerwanie np wspomniane INT2?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2019, o 17:15 
Offline
Nowy

Dołączył(a): 29 wrz 2019
Posty: 12
Pomógł: 0

Jak ICP i AVR jest za "cienkie" to ARM. Preferuję STM ale i inne np NXP też "biją na głowę" AVR, czy tego sie chce czy nie.
Jak koniecznie chcesz to zrobić na AVR to dodaj CPLD ale sens ekonomiczny żaden.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2019, o 13:10 
Offline
Nowy

Dołączył(a): 29 wrz 2019
Posty: 12
Pomógł: 0

W książce "Mikrokontrolery STM32 w praktyce" jest przykład pomiaru czasu trwania impulsu i okresu. Na F103 (72MHz) można mierzyć z rozdzielczością 27ns. Na F4 (100/168MHz) 10ns (GPIO max 100MHz), H7 (480MHz, timery 240MHz) ok 4,2ns (nie mam pewności co do GPIO).
Kod programu (na F1) jest banalny
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście możesz włączyć przerwania albo badać flagę aby stwierdzić zakończenie pomiaru. Mnie nie było to potrzebne.

Na CPLD też robiłem pomiary. EPM3064 wystarczy. 8,8ns osiągniesz (zegar 227MHz).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2019, o 14:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 846
Lokalizacja: Trójmiasto
Pomógł: 156

Czytając to co piszesz mam wrażenie, ze nie do końca wiesz jak taki uC działa. AVR to procki jednowątkowe więc w danym momencie mogą się zajmować jedną rzeczą. Oczywiście da się ich czas poszatkować tak by zajmowały się wieloma zadaniami "jednocześnie" ale coś kosztem czegoś. uC taktowany kwarcem 16MHz większość rozkazów wykonuje w ciągu 0,0625us, więc pomiar impulsu 5us nie powinien stanowić problemu, no jeszcze pytanie z jaką dokładnością potrzebny ten pomiar, ale zgrubnie te 5us procek zmierzy. Jest jednak ale, jeśli ty masz tam jeszcze poupychane inne przerwania to nie ma siły by ten pomiar się udał. Bo jeśli wystąpi impuls a w tym czasie jest wykonywane inne przerwanie no to sory, ale może być tak że zanim przerwanie od impulsu zostanie wywołane to sam impuls "przeminął już z wiatrem".
AKSELINEK napisał(a):
Tylko mam pytanie czy w czasie przerwania ICP moge wyzwolic inne przerwanie np wspomniane INT2?
Oczywiście jest to możliwe do zrealizowania ale jest to już "level very hard" i bez dokładnej znajomości tematu lepiej do niego wogule nie podchodzić. Wyobraź sobie że zezwalasz na wystąpienie przerwania w przerwaniu, i teraz w czasie trwania przerwania zostaje wywołane następne, i w czasie wykonywania tego następnego przychodzi wyzwolenie kolejnego itd. Zaczyna się kaskadowe wywoływanie przerwań - totalny armagedon.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2019, o 15:00 
Offline
Nowy

Dołączył(a): 29 wrz 2019
Posty: 12
Pomógł: 0

xentis napisał(a):
uC taktowany kwarcem 16MHz większość rozkazów wykonuje w ciągu 0,0625us, więc pomiar impulsu 5us nie powinien stanowić problemu

Problem jest i to duży. ICP pozwala mierzyć okres a nie czas impulsu, (to nie STM32). Aby zmierzyć impuls trzeba "tachlować" aktywnym zboczem dla ICP. Biotą pod uwagę inne czynności, które trzeba wykonać (zapis/odczyt stosu, odczytanie rejestrów) w praktyce nie udało mi się zmierzyć AVRkiem czasów poniżej ok 14us. Dojdzie jeszcze problem, co gdy te impulsy są zbyt krótkie? CPU praktycznie cały czas będzie w przerwaniu, dokładniej będzie wykonywał po jednym rozkazie. Trzeba dodać jakiś timeout zabezpieczający przed taką sytuacją.

xentis napisał(a):
Wyobraź sobie że zezwalasz na wystąpienie przerwania w przerwaniu, i teraz w czasie trwania przerwania zostaje wywołane następne, i w czasie wykonywania tego następnego przychodzi wyzwolenie kolejnego itd. Zaczyna się kaskadowe wywoływanie przerwań - totalny armagedon.

Przesada. Wielokrotnie realizowałem prawie wielopoziomowość na AVR i armagedonu nie miałem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2019, o 15:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 263
Pomógł: 0

Bardzo dziękuje za zainteresowanie tematem , ale ja na pewno wiem że nie zmierzę impulsu krótszego niż 5us, ale poznałem bardziej układ elektroniczny w/w urządzenia i nie mam potrzeby mierzyć wszystkich
impulsów w ramce a jedynie sprawdzać te stany w chwili gdy impuls niebieski CLK zmienia stan z niskiego na wysoki - no może jeszcze dokładniej to trochę póżniej .
Myślę czy jakbym wygenerował przy pomocy AVR na jakimś wyjściu ten impuls CLK a potem przy pomocy porównania pinów w tych odpowiednich czasach stwierdzał jaki jest stan .
Momentów narastania impulsów jest tylko 13 i każdy coś określa , jedynie problemem może być dokładne wygenerowanie takiego impulsu tzn.
Przychodzi pierwszy impuls ramki i mogę np. przy pomocy wolnego przerwania INT 2 uruchomić odpowiedni timer i jakoś tak go określić aby wyzwolił taki przebieg CLK.
Ale kolega pisał że nie można w jednym momencie mieć dwóch przerwań, więc czy możliwa jest taka sytuacja że najpierw przerwanie INT 2 uruchamia krótką procedurę przerwania i wyzwolenia
impulsu clk a potem już dla każdego impulsu ramki leciało by tylko przerwanie ICP I nieważne są te krótkie impulsy a jedynie te co decydują o naruszeniu lini jak na rysunku.
Problemem jest tylko to czy za pomocą jednego przerwania mogę wygenerować taki impuls CLK a równolegle wykonywać pomiary ICP w wspomniane .
Jedynie co 13 impulsów sprawdzał bym i porównywałbym na bardzo krótką chwile stan Pinów a czas ipulsu tego co powoduje zmianę jest dosyć długi.
Pragnę tylko jeszcze dodać że przerwanie ICP mogę jeszcze trochę zmodyfikować ponieważ może nie muszę mierzyć wszystkich impulsów w ramkach a jedynie te które określają nr. ramki.
Jak bym znał tylko numer ramki to całe przerwanie ICP jest mi zbędne.
Przepraszam za chaos w rozmyślaniach i wielokrotne powtarzanie się ale chciałem dokładniej wypowiedzieć się co chcę zrobić



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2019, o 17:00 
Offline
Nowy

Dołączył(a): 29 wrz 2019
Posty: 12
Pomógł: 0

Czy ICP czy INT czas obsługi przerwania jest podobny.

AKSELINEK napisał(a):
Przychodzi pierwszy impuls ramki i mogę np. przy pomocy wolnego przerwania INT 2 uruchomić odpowiedni timer i jakoś tak go określić aby wyzwolił taki przebieg CLK.

To da się zrobić może nawet w czasie poniżej 1us. Wskazana modyfikacja przerwania w ASM bo AVR-GCC zawsze, często niepotrzebnie, umieszcza na stosie R0, R1 i zeruje R1.

AKSELINEK napisał(a):
czy możliwa jest taka sytuacja że najpierw przerwanie INT 2 uruchamia krótką procedurę przerwania i wyzwolenia
impulsu clk a potem już dla każdego impulsu ramki leciało by tylko przerwanie ICP

Wystarczy w przerwaniu INT2 zablokować jego wywołanie.


Jak pamiętam z poprzedniego wątku, używasz Megi16 albo 32. Zamień ją na nowocześniejszą i tańszą mega164/324. Odpowiednik pin-pin a max zegar 20 a nie 16MHz. Zyskasz trochę czasu.
Na mega164/324 wejście ICP może także generować przerwanie. Wszystkie piny portów mają taką możliwość (PCINTxx). INT2 może wygenerować równocześnie PCINT10. ICP3, PCINT13 itd. Trzeba tylko pamiętać o priorytetach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 paź 2019, o 13:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 263
Pomógł: 0

Mylę że nie dużo mi brakuje do zakończenia tematu , ale muszę przy pomocy Timera wygenerować impuls CLK .
Początek generowania impulsu CLK stanowi pomiar:

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

Jest to początek każdej ramki i teraz muszę uruchomić impuls CLK dlatego prubuje uruchomić timer

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


Niestety na PA1 nic mi nie generuje :(
czy muszę jeszcze coś ustawić przed pętlą główną???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 paź 2019, o 19:57 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 157
Pomógł: 17

Czy nie powinieneś włączyć tryb CTC?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście masz włączoną globalną obsługę przerwań
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
?

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 paź 2019, o 20:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 263
Pomógł: 0

Ustawiłem jak radziłeś przed pętlą główną :

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


I dalej kicha :(

może coś z tym preskalerem jest nie tak:

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


oczywiście sei jest włączone.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 paź 2019, o 22:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 263
Pomógł: 0

Dobra coś ruszyło .



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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