Skocz do zawartości

Problem z czujnikiem optycznym DiY


Pomocna odpowiedź

Napisano

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

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...

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.

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

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.

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ł.

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?

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.

$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.

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.

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

Musisz to przeliczyć dla odpowiedniego taktowania.

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??

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.

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.

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...