Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[attiny2313][bascom]Czujnik zbliżeniowy i dioda sygnalizująca jego stan

22 Wrz 2011 19:42 5117 17
  • Poziom 2  
    Witam!
    Staram się zaprojektować zbliżeniowy czujnik optyczny w oparciu o odbiornik TSOP1736, diody IR oraz mikrokontrolera attiny2313, który będzie (między innymi) generował przebieg prostokątny 36kHz dla diody IR. Obecność przeszkody ma być sygnalizowana zapaleniem się zwykłej diody. Po lekturze kilku tematów na forum oraz książki "Programowanie mikrokontrolerów w języku BASCOM" stworzyłem taki oto kod:

    Code:
    $regfile = "attiny2313.dat"
    
    $crystal = 4000000

    Config Pind.5 = Output
    Ocr0b = &H37
    Ocr0a = &H37
    Tccr0a = &B00010010
    Tccr0b = 1

    Config Pinb.0 = Input
    Config Pind.0 = Output

    Czujnik Alias Pinb.0
    Dioda Alias Pind.0

    Do
       If Czujnik = 1 Then
          Dioda = 1
       End If
    Loop
    End


    Obawiam się, że mogłem popełnić jakiś błąd w kodzie, lub samej budowie układu (przedstawiony na poniższym rysunku).

    [attiny2313][bascom]Czujnik zbliżeniowy i dioda sygnalizująca jego stan

    Mam pewne wątpliwości:
    0) czy taki układ ma szansę zadziałać prawidłowo?
    1) czy dioda IR SFH400 będzie odpowiednia?
    2) jak dobrać wartość opornika szeregowo połączonego z diodą?
    3) czy zasilacz komputerowy zapewni odpowiednio stabilne 5V?

    Pozdrawiam i z góry dziękuję za wszelkie porady.
  • Poziom 12  
    Czy
    dwarrior napisał:
    $crystal = 4000000

    nie oznacza, że trzeba by było dać jeszcze kwarc?
  • Specjalista - Mikrokontrolery
    1. Brak kondensatorów blokujących na zasilaniu.

    2. Błędne zasilania TSOP - sprawdź w dokumntacji, jak to się robi.

    3. żeby TSOP działał poprawnie, sygnał nadawany w podczerwieni musi mieć przerwy, np. 10 impulsów, przerwa o długości 10 impulsów (10 to minimum).

    4. Każda dioda IR 950 nm będzie odpowiednia. Wartość rezystora zależy od odległości. Jeśli 1..2 m, to można sobie darować tranzystor i sterować diodę z uC przez rezystor rzędu 120..200 R.

    5. Stan aktywny wyjścia czujnika - to stan niski. Ponieważ nadajnik musi nadawać z przerwami, przerwanie bariery powinno być wykrywane jako brak sygnału z czujnika przez czas dłuższy niż np. 15 impulsów nadajnika.
  • Poziom 12  
    A co do kwarca pewnie też się nie myliłem? Przy odległości 5-6m 1k i ten tranzystor będzie OK?
  • Specjalista - Mikrokontrolery
    Oscylator wewnętrzny wystarczy, tylko trzeba przeliczyć parametry dla timera.
    Ja bym zaczął od wersji bez tranzystora. Rezystor szeregowy diody policz z maksymalnego prądu diody - Ifmax (na początek ciągłego, chociaż wypadałoby przeliczyć dla impulsowego).
  • Moderator Mikrokontrolery Projektowanie
    BlueDraco napisał w pkt. 2 bardzo istotną sprawę, dla poprawności działania tych czujników: http://mkpochtoi.narod.ru/TSOP4836_ds.pdf
    Zawsze zaglądaj do datasheet danego elementu, który stosujesz - to podstawa.

    Popraw schemat zgodnie z tym co pisał BlueDraco i pokaż go ponownie.
    Z tym, że zdecyduj się jak rysujesz schemat, bo wyszedł Ci koszmarek sklejony w Paint'cie :-)
    Polecam taki sposób: http://mikrokontrolery.blogspot.com/2011/04/jak-projektowac-czytelne-schematy.html
  • Poziom 12  
    No tylko, że to nie ja go rysowałem. Potrzebny mi podobny układ a lepiej uczyć się na cudzych błędach :)
  • Moderator Mikrokontrolery Projektowanie
    No to czas zacząć rysować własne :)
    Przy tak prostym schemacie dasz radę bez problemu.
  • Poziom 10  
    Witam. Apropo
    BlueDraco napisał:
    3. żeby TSOP działał poprawnie, sygnał nadawany w podczerwieni musi mieć przerwy, np. 10 impulsów, przerwa o długości 10 impulsów (10 to minimum).
    jak to zrobić programowo? po przez timer ctc sie nie da przerwan zrobic. Tylko w czsie przerwy nie moze sie zaswieca dioda
  • Specjalista - Mikrokontrolery
    To się b. łatwo robi. Możesz użyć timera w trybie PWM, odlczać przerwania i w odpowiednich momentach włączać/wyłączać sterowanie diodą z wyjścia PWM timera. Można też użyć timera w trybie TOGGLE, dalej tak samo jak wyżej.
  • Poziom 10  
    Dla niektorych łatwo dla innych nie. Dopiero zaczynam zabawe z programowaniem. To mój drugi projekt z tym ze pierwszy był z gotowca. Wiem że rzucam sie na głeboką wode ale potrzebny mi jest taki czujnik a wszystkie projekty w necie są złe. Są projekty na NE555 ale nadaje na ciagłej czestotliwosci a tak jak pisałes tsop potrzebuje przerw. Nigdzie nie moge znaleść takiego działającego układu. Napisal bym program jezeli te djidy mialy by migac co sekunde ale z 36kHz jest juz problem.
  • Specjalista - Mikrokontrolery
    No to po kolei: Zaprogramuj timer w tryb PWM, okres równy odwrotności 38 kHz, wypełnienie coś pomiędzy 1/4 i 1/2. Sprawdć na oscyloskopie, że działa. Jeśli nie masz oscyloskopu - spróbuj najpierw zrobić to samo ale dla jak najmniejszej częstotliwości (nie więcej niż 200..300 Hz) i zamiast diody IR podłącz jakąś widzialną - sprawdź na własne oczy, że miga, np. ruszając głową lub diodą. Następnie napisz procedurę przerwania timera, która będzie zliczała np. do tysiąca, a po zliczeniu - ustawiała PWM na 0 (żeby zgasić diodę) lub wyłączała sterowanie diodą z PWM (czyli tiimer chodzi, generuje przerwania na końcu okresu, ale nie zapala diody). Jak już przećwiczysz to na małej częstotliwości, zwiększ częstotliwość do 38 kHz i skróć odliczanie z 1000 do np. 10 - masz gotowy nadajnik.

    A teraz do roboty, maluj schemat, pisz kod i chwal się, co wyszło, a co nie.
  • Poziom 10  
    Możesz mi powiedziec jakim poleceniem wyłaczyc sterowanie diodą tak by nie wyłaczyć PWM? Bo nie mogę tego dojść. Najlepiej poleceniem toggle jak sie da
  • Specjalista - Mikrokontrolery
    Nie "jakim poleceniem", a "które bity sterują", to po pierwsze

    Przeczytaj w datasheet, który bit w którym rejestrze timera włącza wyjście PWM. Np. w ATmega8 są to bity COM2x w rejestrze TCCR2.

    Jeśli nie zaczniesz czytać dokumentacji, daleko nie zajdziesz. W końcu chcesz coś zrobić, czy chcesz, żeby ktś zrobił to za Ciebie?
  • Poziom 10  
    Tylko gdy wyłącze PWM nie bede mógł zliczyć 10 przepełnień na przerwe miedzy sygnałem
  • Specjalista - Mikrokontrolery
    To oczywiście nieprawda, ale również dowód na to, że nie zajrzałeś do dokumentacji i nie przeczytałeś NIC o tych bitach, leniuszku.
  • Poziom 10  
    Tak mi to wyszło to mój pierwszy program (nie licząc włącz-wyłącz diode) wiec proszę o wyrozumiałość. Częstotliwości jeszcze nie obliczyłem bo mam z tym trudności. Nie wiem tylko czy dobrze zrozumiałem ze timer1 w trybie Pwm jako jedno przerwanie zlicza jeden cykl
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    obliczanie częstotliwości pwm według wzoru
    FPWM = Fcpu / preskaler / częstotliwość sygnału PWM
    8000000/1/510=15686Hz=15,686kHz
    i to jest (według mnie chyba że się mylę) maksymalny wynik jaki można otrzymać przy tej częstotliwości oscylatora.
  • Specjalista - Mikrokontrolery
    Użyj trybu Fast PWM - masz wtedy możliwość regulacji okresu. Obawiam się jednak, że w Bascomie tak się tego nie da zrobić, z powodu fatalnej jakości generowanego kodu - raczej nie wyrobisz się z obsługą przerwań tak często zgłaszanych.