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

[atmega16][bascom]ultradźwięki i komparator

bolas33 16 Lut 2011 05:01 1936 3
  • #1 9158292
    bolas33
    Poziom 2  
    Witam serdecznie.

    Konstruuje coś co może kiedyś będzie centralką alarmu i mam problem z obsłużeniem czujników ultradźwiękowych. Zakupiłem jedne z najtanśzych para odbrionik nadajnik. Wszystko podłączone wg. schematu.
    [atmega16][bascom]ultradźwięki i komparator

    Ponizej kod programu:
    
    $regfile = "m16def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 8
    $framesize = 8
    
    Enable Interrupts
    
    Config Lcd = 16 * 2
    Display On
    Cursor Off Noblink
    Cls
    
    Baud = 19200
    Const Sizebuff = 20
    Config Serialin = Buffered , Size = 20
    
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
    
    
    Dim Echos As Integer
    
    Pwm1a = 100
    
    Do
    Echos = 0
    
    Cls
    
    Lcd "START"
    
    Start Timer1
    Wait 1
    Stop Timer1
    
    Waitus 8
    
    Config Portb.2 = Output
    Portb.2 = 0
    
    Waitus 8
    
    Config Pinb.2 = Input
    
    For Echos = 0 To 2000
       If Acsr.aco = 1 Then Exit For
    
    Next Echos
    
    Wait 1
    Lowerline
    Lcd Echos
    
    Wait 1
    
    
    Loop
    

    Jest w nim też troche rzeczy nie związanych z samym sterowaniem/odczytem czujników.

    Poprzez timer wysterowuje potrzebne 40kHz do nadajnika. Do odbiornika musiałem zastosować wzmacniacz bo napięcia był rzędy mV, po wzomcnieniu są wielkości ok. 1V.
    Generalnie czujniki mają działać w ten sposób że wykrywa przeszkodze, gdy przeszkoda zniknie to włącza alarm. Sam proces odbioru informacji zaczerpnąłem z projektu sonaru/pomierzowalnika odległośći który ktoś zamieścił na forum diody.
    Koncept jest dość prosty, sterujemy nadajnik żeby wysłał sygnał, "rozładowujemy pojemność przetwornika wejściowego, poprzez zwarcie do masy", po czym ustawiamy go jako wejście i wchodzimy w pętle która ma zliczać ilość przejść aż do chwili kiedy przyjdzie sygnał powrotny do odbiornika- czyli nasz komparator.
    Problem polega na tym, że praktycznie zawsze zliczonych pętli mam 0, nawet w chwili kiedy czujniki fizycznie nie mają możłiwości przekazać sobie informacji, czasami pojawia się 1 lub 2 nie wiedzieć dlaczego.

    Całość umieszona jest na płytce zl8avr - kit dla początkujących, razem z procesorem w odpowiedniej obudowie pasującym do płytki.

    Bardzo proszę o pomoc i swieże zerknięćie okiem na to, siedze nad tym już którąś noc z rzędu, przeglądnąłem z milion tematów, ale albo już mam zakłócenia w odbiorze rzeczywistośći, albo co bardziej prawdopodobne jakieś luki w wiedzy w tym temacie. Będe wdzięczny za wszystkie sugestie.

    Fusebity ustawione 8MHz wew kwarc, nie wiem jakie informacje jeszcze podać, czekam na ewentualne pytania.
    (dodam tylko że choć może to nie ma sensu zamieniałem już AIN0 z AIN1 po prostu próbuje już wszystkiego)
    Jezcze jedno jak usunę wejśćie "transmisyjne" z komparatora do pętla zlicza zgodnie z założeniami czyli do końca.


    Dziękuje i pozdrawiam.
  • Pomocny post
    #2 9158574
    rrytel
    Poziom 14  
    Ain0 w procku jest podłączone do masy? bo jak tak to raczej nigdy nie znieni się stan na wyjściu wewnętrznego komparatora, minimalne napięcie na wyjściu wzmacniacza operacyjnego (LM358N) wynosi około 0,7V. znam na to dwie rady:
    1; na wejście Ain0 daj napięcie z dzielnika rezystancyjnego (może być potencjometr)
    2; zwiększ wzmocnienie na wzmacniaczu i wtedy bedziesz mógł podłączyć do każdego innego pinu (np. INT0) Link
    o ile dobrze pamiętam to procesor poprawnie wykrywa stan wysoki od 70% napięcia zasilania (dla 5V bedzie to 3,5V)
  • #3 9160630
    pancio
    Poziom 16  
    Mogę się mylić, ale czytałem w którymś wątku, że te czujniki muszą być zasilane znacznie większą amplitudą niż 5V...
  • #4 9161707
    bolas33
    Poziom 2  
    Może i muszą mieć, ale sprawdzałem pomierzownikiem oraz oscyloskopem i działają, dla przyszłych pokoleń, które będą budować podobne układy na nadajniku też musi być układ wzmacniający bo inaczej sygnał jest strasznie słaby i wykrywa do 10cm w moim układzie, ale to w zupełności wystarcza i spełnia swoje zadanie.
    Co do samego problemu to kolega rrytel bardzo dobrze podpowiedział, w zasadzie genialne rozwiązanie, dzielnik napięcia spełnia doskonale swoją rolę. Widocznie na wejściu pojawiały się jakieś drobne zakłucenia i czasami napięcie musiało drobnie podskakiwać, ustawiłem dzielnik na wejście ujemne na 0,5v i działa program doskonale, wprawdzie nie da się z tego zrobić sondy, ale wykrywa że jest przeszkoda, gdy przeszkoda zniknie, pętla biegnie do końca co jest równoznaczne z niepowróceniem sygnału.

    Pozdrawiam, podziękowania dla rrytel

    ps: tematu nie zamykam, mam jeszcze kpl czujników do podczerwieni, jeśli się uda złożyć dopisze schemat i kod działania, jeśli nie to napisze jaki mam problem :)
REKLAMA