logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega32 - [C++][Eclipse] Mierzenie długości impulsów przy pomocy Capture Mode

Doktor_No 31 Sie 2013 21:22 1593 2
  • #1 12689506
    Doktor_No
    Poziom 12  
    Witam.

    Napisałem programik na procesor z tytułu, który mierzy długości impulsów na pinie, i wysyła wynik pomiaru na UART. Postanowiłem wykorzystać to do przechwycenia sygnału z pilota do tunera TV SAT (TechniSat, bo taki miałem pod ręką :) ), taktowanie: kwarc 4MHz, odbiornik typu TSOP, sygnał zanegowany przez 74LS00 i dostarczony na PD6, schemat pominę, bo tu nie ma żadnych problemów. Program był inspirowany następującymi projektami:

    http://www.embedds.com/programming-16-bit-timer-on-atmega328/
    https://www.elektroda.pl/rtvforum/topic856661.html
    http://mikrokontrolery.blogspot.com/2011/04/obrotomierz-diy.html

    Idea polega na tym, że mamy trzy stany pomiaru: start przy wzrastającej krawędzi, opadającej, i końcu niskiego stanu (po którym następuje ponowny wzrost, lub time out) i na koniec odejmujemy wartość przechwyconej wartości od wartości z poprzedniego stanu:

    
       A     B        
       |     |        
       +-----+        
       |     |     C  
       |     |     |  
    ---+     +-----+--
    


    Kod (pominąłem komentarze i inicjalizacje UART i strumienia dla printf):

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ten układ zasadniczo działa, ale co pewien czas wśród odczytów pojawiają się takie które mają przypadkowe wartości, ocierające się nawet o maksymalną wartość zmiennej 32 bitowej int bez znaku... Nie potrafię tej anomalii wyjaśnić, i bardzo utrudnia to odczytanie kodu pilota. Poniżej to co odczytałem RealTermem (wszystkie wartości w mikrosekundach):

    ---------------------------                                                     
    HI: 928                                                                         
    LOW:848                                                                         
    HI: 4294930672                                                                  
    LOW:832                                                                         
    HI: 1824                                                                        
    LOW:1728                                                                        
    HI: 1792                                                                        
    LOW:880                                                                         
    HI: 944                                                                         
    LOW:1728                                                                        
    HI: 1808                                                                        
    LOW:864                                                                         
    HI: 928                                                                         
    LOW:848                                                                         
    HI: 1792                                                                        
    LOW:1776                                                                        
    HI: 1792                                                                        
    LOW:880                                                                         
    HI: 928                                                                         
    LOW:1744                                                                        
    HI: 1792                                                                        
    LOW:880                                                                         
    HI: 4293920544                                                                  
    LOW:848                                                                         
    HI: 912                                                                         
    LOW:1760                                                                        
    HI: 1792                                                                        
    LOW:880                                                                         
    HI: 1792                                                                        
    LOW:880                                                                         
    HI: 928                                                                         
    LOW:848                                                                         
    ---------------------------                                                     
    


    Dla porównania: sygnał z generatora prostokąta z miernika:

    ---------------------------                                                     
    HI: 10272                                                                       
    LOW:9792                                                                        
    HI: 4294931520                                                                  
    LOW:9808                                                                        
    HI: 10192                                                                       
    LOW:9824                                                                        
    HI: 10208                                                                       
    LOW:9824                                                                        
    HI: 10224                                                                       
    LOW:9808                                                                        
    HI: 10320                                                                       
    LOW:9680                                                                        
    HI: 10256                                                                       
    LOW:9776                                                                        
    HI: 10368                                                                       
    LOW:9760                                                                        
    HI: 10352                                                                       
    LOW:9664                                                                        
    HI: 10352                                                                       
    LOW:9584                                                                        
    HI: 10320                                                                       
    LOW:9648                                                                        
    HI: 10320                                                                       
    LOW:9232                                                                        
    HI: 10192                                                                       
    LOW:9776                                                                        
    HI: 10672                                                                       
    LOW:8848                                                                        
    HI: 9904                                                                        
    LOW:9808                                                                        
    HI: 10304                                                                       
    LOW:9744                                                                        
    ---------------------------                                                     
    


    I sygnał z drugiego AVRa, zaprogramowanego aby najpierw wysłać impuls 2560us, a potem serie sześciu po 1800us (każdy oddzielony 660us stanu niskiego):

    ---------------------------                                                     
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 4294962336                                                                  
    LOW:688                                                                         
    HI: 2640                                                                        
    LOW:672                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 2624                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:672                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1856                                                                        
    LOW:688                                                                         
    HI: 1840                                                                        
    LOW:688                                                                         
    ---------------------------                                                     
    


    Z góry dziękuje za pomoc. :)
  • #2 12689585
    BlueDraco
    Specjalista - Mikrokontrolery
    Wyjaśnij jeszcze co to jest stan C, do czego służy i jak go definiujesz/rozpoznajesz, bo nijak tego nie idzie zrozumieć, to po pierwsze.

    Po drugie, możesz spokojnie przyjąć rozdzielczość pomiaru na poziomie 10 us. 1 us nic nie da, bo pojedynczy impuls nadajnika trwa min. 25 uS.

    Po trzecie, ponieważ użyteczne długości impulsów na wyjści TSOP nie przekraczają kilku ms, możesz wszystko liczyć na 16 bitach i traktować odstępy czasowe powyżej 32000 jako nieskończoność.

    Po czwarte, problem, który obserwujesz wynika najprawdopodobniej z tego, że następuje "ściganie się" dwóch zdarzeń - przepełnienia timera i złapania zbocza w okolicach tego przepełnienia.

    Na Twoim miejscu zastanowiłbym się nad zerowaniem timera po wykryciu zbocza.
  • #3 12689693
    Doktor_No
    Poziom 12  
    BlueDraco napisał:
    Wyjaśnij jeszcze co to jest stan C, do czego służy i jak go definiujesz/rozpoznajesz, bo nijak tego nie idzie zrozumieć, to po pierwsze.


    Różnica pomiędzy C a B to ma być długość stanu niskiego pomiędzy jednym stanem wysokim a drugim.

    Dodano po 29 [minuty]:

    Dodanie zerowania licznika nic nie pomaga, jest nawet gorzej:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wynik:

    ---------------------------                                                     
    HI: 928                                                                         
    LOW:4294875584                                                                  
    HI: 716080                                                                      
    LOW:4294251200                                                                  
    HI: 1792                                                                        
    LOW:4294965568                                                                  
    HI: 1824                                                                        
    LOW:4294962832                                                                  
    HI: 928                                                                         
    LOW:4294966400                                                                  
    HI: 1792                                                                        
    LOW:4294964672                                                                  
    HI: 896                                                                         
    LOW:4294875648                                                                  
    HI: 1808                                                                        
    LOW:4294965504                                                                  
    HI: 1792                                                                        
    LOW:4294962896                                                                  
    HI: 944                                                                         
    LOW:4294966384                                                                  
    HI: 1824                                                                        
    LOW:4294964608                                                                  
    HI: 928                                                                         
    LOW:4294875584                                                                  
    HI: 1808                                                                        
    LOW:4294965504                                                                  
    HI: 1824                                                                        
    LOW:4294962832                                                                  
    HI: 928                                                                         
    LOW:4294966416                                                                  
    HI: 1792                                                                        
    LOW:4294964672                                                                  
    ---------------------------                                                    
    
REKLAMA