Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek 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

dwarrior 22 Wrz 2011 19:42 4853 17
  • #1 22 Wrz 2011 19:42
    dwarrior
    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.

    0 17
  • #2 24 Sty 2013 12:09
    SoMeBoDy777
    Poziom 12  

    Czy

    dwarrior napisał:
    $crystal = 4000000

    nie oznacza, że trzeba by było dać jeszcze kwarc?

    0
  • #3 24 Sty 2013 12:26
    BlueDraco
    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.

    0
  • #4 24 Sty 2013 12:31
    SoMeBoDy777
    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?

    0
  • #5 24 Sty 2013 12:54
    BlueDraco
    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).

    0
  • #6 24 Sty 2013 13:11
    dondu
    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

    0
  • #7 24 Sty 2013 13:38
    SoMeBoDy777
    Poziom 12  

    No tylko, że to nie ja go rysowałem. Potrzebny mi podobny układ a lepiej uczyć się na cudzych błędach :)

    0
  • #9 26 Sty 2013 03:25
    cezary20
    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

    0
  • #10 26 Sty 2013 07:18
    BlueDraco
    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.

    0
  • #11 26 Sty 2013 14:10
    cezary20
    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.

    0
  • #12 26 Sty 2013 15:16
    BlueDraco
    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.

    0
  • #13 26 Sty 2013 21:44
    cezary20
    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

    0
  • #14 26 Sty 2013 21:50
    BlueDraco
    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?

    0
  • #15 26 Sty 2013 21:55
    cezary20
    Poziom 10  

    Tylko gdy wyłącze PWM nie bede mógł zliczyć 10 przepełnień na przerwe miedzy sygnałem

    0
  • #16 26 Sty 2013 22:27
    BlueDraco
    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.

    0
  • #17 26 Sty 2013 23:12
    cezary20
    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.

    0
  • #18 27 Sty 2013 12:42
    BlueDraco
    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.

    0