Skocz do zawartości

Problem z czujnikiem optycznym DiY


Phil

Pomocna odpowiedź

No więc tak: Zwykle mając problem nie pytam się na forum, próbuję go rozwiązać sam-szukam rozwiązania w internecie, eksperymentuję z programem... ale tym razem się bez pytania nie obędzie.

Ale do rzeczy - postanowiłem sobie przetestować ten czujnik, z tą różnicą, że zamiast SFH5110 zastosowałem TSOP1740, co jest najprawdopodobniej przyczyną problemu, samym problemem jest to, że czujnik nie działa, albo działa, ale nie tak jak powinien 😉. Dioda działa - świeci się (sprawdzałem kamerką) myślę, że przyczyną problemu może być blokowanie się TSOP'a. Sprawdziłbym to, ale nie bardzo wiem, jak się generuje częstotliwość 40kHz. Chodzi o to, aby diodka mrugała przez jakiś czas, potem przestała i żeby znowu zaczęła mrugać.

Czytałem wprawdzie ten artykuł, ale z kodu czujnika z tego artykułu prawie nic nie zrozumiałem 🙁.

Ewentualnie mógłbym zamienić tego TSOP'a na SFH5110, ale skoro już go mam to chciałbym chociaż coś zrobić żeby to działało.

Czekam na wasze sugestie w tej sprawie.

Edit: I jeszcze jedno - używam procka Attiny2313

Link do komentarza
Share on other sites

Przeczytałem Twój post i prócz błędów ortograficznych nie znalazłem niczego ciekawego. Nie podałeś schematu i swojego kodu, a co ważniejsze - nie zadałeś żadnego pytania...

Link do komentarza
Share on other sites

Schemat:

Przepraszam za błędy, zaraz poprawię. Zwykle nie popełniam, ale czasem mi się zdarzy. Co do programu, to jest to program wzorowany na programie z artykułu KD93 podlinkowanym w pierwszym poście.

$regfile = "attiny2313.dat"                                 'procesor Attiny2313

$crystal = 1200000


Config Portb.7 = Output                                     'output czujnika

Config Portb.2 = Output                                     'częstotliwość dla diody

Config Pinb.3 = Input                                       'czujnik podczerwieni

Portd.7 = 0

Ocr0b = 15                                                  'obliczyć z działania:
                                                           'taktowanie / (częstotliwość * 2)
                                                           'np. 1200000 / (36000 * 2)

Ocr0a = 15                                                  'j.w.

Tccr0a = 1                                                  'rejestry timera, przepisać

Tccr0b = &B00010010                                         'j.w.


Set Portb.3                                                 'rezystor podciągający
                                                           'wejście czujnika


Do                                                          'pętla


If Pinb.3 = 1 Then Portb.7 = 1                              'warunki na widzenie czujnika
If Pinb.3 = 0 Then Portb.7 = 0

Delay                                                       'opóźnienie zmniejszające
                                                           'zakłócenia


Loop                                                        'koniec pętli

End                                                         'koniec programu

A pytanie brzmi: Jak napisać kod w bascomie tak aby dioda mrugała z tą częstotliwością, na kilka milisekund się wyłączała i potem jeszcze raz mrugała. Nie oczekuję gotowców, chodzi mi raczej o polecenia/zarys programu.

Link do komentarza
Share on other sites

Witam,
pierwsze co, to warto byłoby poprawić schemat. Może i ten co masz zadziała, ale dobrą praktyką jest budowanie schematów według zalecanych wytycznych noty katalogowej (chyba, że znasz się na tyle, by zmodyfikować układ specjalnie do własnych celów). Więc zanim programowanie to:

Application Circuit (strona 2.)TSOP1740

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Właśnie zauważyłem, że w schemacie mam jeden błąd - C2 jest przed rezystorem R1 i ma wartość 10uF. Ale na płytce stykowej mam podłączone tak jak być powinno.

Link do komentarza
Share on other sites

Z tym włączaniem wyłączaniem diody najlepiej gdybyś podpią ją pod tranzystor , 40 khz generował ciągle, a tranzystorem sterował diodą.

[ Dodano: 05-05-2012, 15:28 ]

Poza tym ten czujnik był na tiny13 a nie na 2313 one nie mają chyba tych samych rejestrów timera.

Zobacz mojego workloga tam KD93 wszystko piękine wyjaśnił.

Link do komentarza
Share on other sites

Dobra pokombinuję jeszcze trochę. Jak coś się zmieni to dam znać.

Edit:

A jakby generować te 40kHz "ręcznie" - bez timera, po prostu zmieniać stan wyprowadzenia co 15us?

Link do komentarza
Share on other sites

A pytanie brzmi: Jak napisać kod w bascomie tak aby dioda mrugała z tą częstotliwością, na kilka milisekund się wyłączała i potem jeszcze raz mrugała. Nie oczekuję gotowców, chodzi mi raczej o polecenia/zarys programu.

A. - zrozumieć zasadę pracy takiego radaru.

B. - zrozumieć schemat radaru i zrobić go jak należy.

C. - Zrozumieć zasadę działania Timerów w AVRach, Tu konkretnie tryb CTC.

D. - przeanalizować sobie różnice miedzy ATTiny13, a ATTiny2313.

E. - dopiero teraz zabierać się za program.

Link do komentarza
Share on other sites

$crystal = 1200000 

i

Ocr0b = 15                                                  'obliczyć z działania:
                                                           'taktowanie / (częstotliwość * 2)
                                                           'np. 1200000 / (36000 * 2) 

Podałeś jako częstotliwość 1,2MHz i dla takiej robiłeś obliczenia dla częstotliwości, a podejrzewam, że miało być 12MHz zamiast 1,2MHz.

Link do komentarza
Share on other sites

Grabki, robiłem to wg tego artykułu. Jest tam taktowanie 1,2 MHz. Co do samego czujnika: tak jak napisał BlackJack będę musiał trochę poczytać na temat trybu CTC, a także przeanalizować różnice między ATTiny13, a ATTiny2313.

Link do komentarza
Share on other sites

Phil, a podpiąłeś do swojego Tinnego 1,2Mhz? Wątpię 🙂

Musisz to przeliczyć dla odpowiedniego taktowania.

Link do komentarza
Share on other sites

No właśnie, jakie masz taktowanie procesora? Bo attiny13 ma fabrycznie ustawiane fusebity na częstotliwość 9,6MHz z podziałem przez 8 a więc wychodzi te 1,2MHz. Myślę, że pamiętasz(a najlepiej że przeczytałeś w ds), że attiny2313 nie ma wewnętrznego taktowania 1,2MHz tylko inne??

Link do komentarza
Share on other sites

Oj, Philu, szkoda że pominąłeś to co napisałem taką duża czerwoną czcionką w artykule. Zasada jest prosta: jeśli nie wiesz jak ten czujnik działa, nie rozumiesz programu, nie wiesz na czym to polega, to kupujesz wszystkie części takie jak w projekcie, łączysz identycznie, wgrywasz ten sam program i będzie działać. Jeśli wiesz jak to działa, to możesz wprowadzić pewne zmiany, dostosować ten projekt według potrzeb.

Ty natomiast chcesz zrobić na innych elementach, ale skopiowałeś cały program i dziwisz się czemu nie działa. Póki nie zmienisz programu, to nigdy nie zadziała na twoim procku, bo jest po prostu inny, sam widzisz że nawet taktowania nie zmieniłeś. Nawet nie wiem czy rejestry są takie same.

Tak jak klonyyy napisał, zerknij do jego workloga, tam trochę walczyliśmy z tym czujnikiem, może to ci coś rozjaśni.

Link do komentarza
Share on other sites

Ok. Rozumiem już swoje wieeelkie błędy. Tak to chyba jest, jak się zaczyna. Nie musicie już mi tłumaczyć o co chodzi. Jutro kupię ATTiny13 i zacznę od nowa. Próbowałem robić na ATTiny2313, bo akurat miałem go pod ręką.

PS. Wiecie może gdzie dorwać SFH5110?, bo nie ma go nawet w TME.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.