Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

bolas33 16 Feb 2011 05:01 1831 3
Optex
  • #1
    bolas33
    Level 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:
    Code:

    $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.
  • Optex
  • Helpful post
    #2
    rrytel
    Level 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)
  • Optex
  • #3
    pancio
    Level 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
    bolas33
    Level 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 :)