Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 00:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 37 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 2 kwi 2013, o 23:20 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Witam

Otóż swego czasu bawiłem się czujniczkami HC-SR04. Wszystko pięknie działa, ale zostawiłem sobie niedopowiedziany pewien problem (a jak wiadomo, zasiane wątpliwości lubią kiełkować :)), mianowicie, jak działa wejście Input Capture w AVR-ach (nie chodzi mi o samo ustawienie i zainicjalizowane bo to jest oczywiste)?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A więc, wg. mnie powinno działać tak, że zmienna ICR1 przyjmuje wartość, zależną od tego jak długo jest stan wysoki na pinie, i to by było jasne i logiczne. No ale jak widać działa to (chyba!) tak, że:

- Dostajemy stan wysoki na pin
- ICR1 zaczyna liczyć
- Jeśli nastąpi zbocze opadające, to długość impulsu jest równa zmiennej ICR1 minus poprzedni wynik (???)
- Przypisujemy wartość ICR1 do zmiennej LastCapture
- Zmiana zbocza wyzwalającego
- Wychodzimy z przerwania
- Następnie ta sama procedura tylko że ze zboczem opadającym.

Panowie...o co tu chodzi? :D

To działa, ale wg. mnie totalnie nie logicznie. Wartość ICR1 powinna wynosić tyle (oczywiście w zależności od wybranego preskalera w inicjalizacji) ile wynosi czas trwania wysokiego impulsu, koniec. Po co twórcy AVR tak skomplikowali ten moduł?

To raz, a dwa to z mojej dedukcji, to zawsze otrzymamy pomiar nie najnowszy tylko zawsze o jeden późniejszy (przez: PulseWidth = ICR1 - LastCapture).

W rozdziale o RC5 nie jest to do końca wyjaśnione dlatego pytam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 07:35 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

W momencie przerwania możesz uzyskać długość czasu trwania poprzedniego impulsu, to oczywiste i gdzie tu jakaś komplikacja producenta, niepotrzebnie się dopatrujesz komplikacji ze strony producenta podczas gdy jak słusznie zauważyłeś jeszcze nie rozumiesz jak to działa. A zatem...

przychodzi pierwsze przerwanie, zbocze opadające - i co chciałbyś wiedzieć na tej podstawie ? ile wynosi długość bieżącego impulsu? jak ? skąd ? - po prostu zapamiętujesz PulseWidth - które jest w tym przypadku nie istotne (w przypadku pierwszego przerwania po resecie), ale jednocześnie zapamiętujesz LastCapture - czyli bieżącą wartość rejestru ICR1 - niech będzie że wyniesie ona np 27300 (ot taki randomowy przykład). I teraz czekasz na kolejne przerwanie prawda? a timer tyka ;)

gdy nadleci kolejne przerwanie - to co ? To teraz PulseWidth = IRC1 - LastCapture. Załóżmy że teraz już wartość ICR1 = 28400, a zatem po odjęciu 28400-27300 otrzymasz DOKŁADNIE czas jaki upłynął od poprzedniego przerwania do bieżącego przerwania i wynosi 1100 tyknięć timera ZGADZA SIĘ ? Cóż w tym dziwnego czy pokręconego ? Toż Timer1 wciąż biega sobie od 0 do 65535 i się przekręca i znowu od zera do 65535 a każde przerwanie przerzuca tylko jego obecną wartość do ICR1 i to tą przechwyconą wartością się posługujemy ....

wiem wiem - bo wiele razy mam o to pytanie na maila - i np wielu ludzi sobie np wyobraża, że Timer1 zlicza w tajemniczy np sposób i dolicza do 65535 i się np zatrzymuje - tzn tak im się np wydawało, i że trzeba samemu wyzerować albo inne jeszcze pomysły ... i stąd brak zrozumienia tego co wyżej napisałem ....

ale mam nadzieję, że przykład z liczbami wyżej trafi teraz do ciebie i ew innych którzy to czytają - w sumie to dobrze że zadałeś to konkretne pytanie na forum, bo teraz będę mógł tu kierować zapytania z maili ...

ale jeśli coś jeszcze jest niejasne to pytaj śmiało dalej - wyjaśnijmy to do samego koniuszka ok ? ;) bo warto to zrozumieć - to fajny i prosty mechanizm i zresztą bardzo i często przydatny.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 09:56 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Fajnie się stało, że pojawiło się takie pytanie bo i mi się coś wyjaśniło, ale mam jeszcze pytanie co się dzieje w momencie kiedy drugie zbocze nadejdzie po przekręceniu Timera (65535 + 1) w momencie kiedy np. zliczy sobie 100 impulsów od zera? Czy fakt "przekręcenia" jest odnotowywany w tym trybie pracy licznika?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 10:29 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

No nie do końca jestem o tym przekonany, bo np. pierwsze zbocze występuje w chwili gdy licznik naliczył 1000 impulsów, a drugie zbocze gdy licznik się przekręcił i licząc od nowa naliczył 1200 impulsów. Czyli 1200 - 1000 = 200 impulsów, ale + 65535 czyli chyba jednak muszę badać flagę (skoro jest) i ją kasować. Dobrze myślę?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 10:38 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Tom277 napisał(a):
Fajnie się stało, że pojawiło się takie pytanie bo i mi się coś wyjaśniło, ale mam jeszcze pytanie co się dzieje w momencie kiedy drugie zbocze nadejdzie po przekręceniu Timera (65535 + 1) w momencie kiedy np. zliczy sobie 100 impulsów od zera? Czy fakt "przekręcenia" jest odnotowywany w tym trybie pracy licznika?


Kolejne bardzo dobre pytanie w tym wątku ;) ... cieszę się , że padło bo idziemy w kierunku - "ICP -Ostatnie starcie - ostatnia krew" ;)

no to teraz tak - po pierwsze to zawsze troszeczkę się dziwię dlaczego gdy ktoś ma takie pytanie to nie zrobi tego co ja zwykle robię ? .... no ale nie zawsze przecież każdy musi akurat wpaść na taki sam pomysł, ja pewnie nie wpadam na wiele innych, na które wy wpadniecie .... więc podpowiadam co ja bym zrobił stawiając sobie takie zadanie:

1. załóżmy że wartość timera1 = 65400

czyli po operacji:

Kod:
PulseWidth = ICR1 - LastCapture;
LastCapture = ICR1;


wiemy że LastCapture = 65400;

prawda ? ;) no to teraz załóżmy że mija kolejne 800us (bo mówimy załóżmy o RC5) więc podczas kolejnego przerwania dochodzi do takiej oto sytuacji:

Kod:
PulseWidth = 665 - 65400;
LastCapture = 665;


ile wynosi teraz PulseWidth ??? - no z piersi wyrywa się okrzyk - ZDRADA przecież PulseWith będzie teraz równe -64735 !!!

a tu ZONK ! - nieprawda ! ;) .... hmmm zatem ile ?

Ja nie powiem ale poproszę Cię zrob sobie taki prosty kod jak niżej i wyświetlił sobie to na wyświetlaczu jako i ja to robię teraz ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i powiedz mi jaką liczbę ujrzysz po tej operacji na LCD i sam spróbuj wyjaśnić dlaczego taką a nie inną teraz ok? to pewnie jeszcze jedna rzecz Ci się rozjaśni ale pewnie także wielu innym zaglądającym do tego "Ostatniego starcia" ;) .... ja powiem że sam tak kiedyś to sprawdziłem - to najlepsza metoda - jak czegoś nie jesteś pewien to od razu sam bierz kompilator w łapki, procka w łapki do tego jakiś LCD lub terminal i ciach! ;)

------------------------ [ Dodano po: 1 minucie ]

Tom277 napisał(a):
.... czyli chyba jednak muszę badać flagę (skoro jest) i ją kasować. Dobrze myślę?


Nie musisz badać żadnej flagi - zrób ten prosty test wyżej - i od razu znajdziesz odpowiedź - jest dokładnie tak jak wyżej kolega SmN napisał wprost.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 10:47 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

No to jak tylko wrócę do domku to ciachnę ;) . Niestety to chwile potrwa bo jestem daleko, ale za to mam chwilę żeby poczytać wątki na forum ;) .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 10:54 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Tom277 napisał(a):
No to jak tylko wrócę do domku to ciachnę


I o to chodzi panie kochany ;) jak najwięcej "ciachania" i operacji na żywca a nie vitrualnych. Będzie lepiej.

------------------------ [ Dodano po: 1 minucie ]

Zresztą spójrz na fajny cytat w podpisie naszego kolegi Krauser na forum, brzmi on:

Cytuj:
Konfucjusz napisał "Co usłyszę, zapomnę. Co zobaczę, zapamiętam. Co sam zrobię, zrozumiem."


i to najprawdziwsza prawda ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 11:24 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Dokładnie święte słowa kolegi SmN ;) bo też któregoś razu jeden czytelnik próbował właśnie udoskonalić sobie tę opisaną przeze mnie procedurę - jakimiś dziwnymi obliczeniami przepełnień w kolejnym przerwani OVF timera1 ... ale jak sam zauważył - było tylko gorzej.

Jednak myślę, że te kłopoty wynikają - że właśnie wielu początkujących nie wie o tym (a też jakoś ich nie ciągnie żeby ot po prostu sprawdzić to na procku i LCD chociażby), że jeśli mamy liczby np uint8_t i zrobimy działanie

10-250

to w wyniku otrzymamy 16 a nie -240 bo skąd miałaby być liczba ujemna gdy typ zmiennej jest bez znaku ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 16:38 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

O to to, (prawie) wszystko jasne ;)

Myślałem, że ICR1 liczy się tylko i wyłącznie pomiędzy dwoma przerwaniami (czyli w trakcie trwania mierzonego impulsu). Dzięki za wytłumaczenie.

Mam jeszcze dwa pytania:

1. Czyli rozumiem że to wejście nie zadziała poprawnie gdy impuls będzie trwał dłużej niż 2 "przekręcenia" licznika?

2. Mam jeszcze pytanie odnośnie kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co realizuje linijka?:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 16:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

ad.1) ....dobrze myślisz - dlatego trzeba sobie odpowiednio dobierać preskaler do potrzeb, albo jeśli mają być mierzone BAAARDZO długie czasy to ew wtedy można kombinować jeszcze z dodaniem przerwania OVF i zliczać przekręty że tak powiem ;)

ad.2) hej hej - panie kolego .... a odpowiem pytaniem - zajrzyj najpierw do noty PDF i spróbuj tu napisać mi co oznacza bit tzn do czego jest bit ICES1 w rejestrze TCCR1B ok ? ;) i napisz wtedy jak ty rozumiesz ten IF() - a ja doprecyzuję jeśli nie dojdziesz - dobra ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 22:45 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ICES1 - wybór zbocza które wyzwoli przerwanie (1- zbocze narastające, 0-zbocze opadające)

Jeśli zmienimy zbocze wyzwalające przerwanie, to wykonuj komendę.

Tak? :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 22:50 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

No widzisz - bardzo dobrze rozszyfrowałeś ICES1 ;)

ale if to nie tak jak piszesz, że "jeśli zmienimy" - warunek działa prosto

if( zbocze ustawione na XXX ) to zrób to i siamto

a widać wykrzyknik czyli sprawdzamy czy ICES1=0 czyli czy zbocze ustawione na opadające to zrób siamto-owamto ;)


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 12:00 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Sprytnie pomyślane. Wszystko jasne :) Dzięki!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 10:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

Witam Wszystkich,
Dobrze, że odnalazłem ten temat, głowiłem się nad zasada działania TIMERA1 i rejestru ICR1. Byłem pewien, że rejestr się automatycznie zeruje wraz z wyłapaniem zbocza - rozpisywałem sobie na kartce przebieg całego kodu 11_RC5 i ciągle wracałem do Frame_Restart, a tutaj kilka dodatkowych zdań i wszystko jasne :)
Szczerze mówiąc, jeśli można w jakiś sposób zmienić temat postu i dodać np. w nawiasach 11_RC5_decode to ułatwiłoby to znalezienie tego tematu dla osób śledzących kody z Niebieskiej Biblii :)

Zgodnie z zaleceniami przetestowałem na LCD kilka opcji CR1 i Last_capture np. 665 - 65400 ( - 64735)
a na LCD wyświetla nam 801 - co świetnie działa dla naszego decodera RC5.

Zrobiłem to samo dla mniejszych liczb dla uint8, na karteczce rozpisałem na liczby binarne i ciągle wychodzi mi ten nieszczęsny niedomiar. Wiem, że jest tu jakieś łatwe rozwiązanie, bądź zasada, ale nie udało mi się tego rozgryźć do tej pory. Może jakaś podpowiedź :) ?

------------------------ [ Dodano po: 17 minutach ]

Ok, przerobiłem kolejny przykład i teraz widzę zależność.
Dla przykładu 10-250 mamy -240
Następnie dla 8 bitowej liczby maks 256 - 240 = 16
Ta sama zasada z większą liczbą 16 bitową.

Zastanawia mnie jednak kolejna sprawa. Jeśli użyję LCD do sprawdzenia wyniku np. 50-75 i nasz wynik w jest uint16 to na ekranie LCD otrzymuje ujemny wynik -25.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W jaki sposób dla uint16, który odnosi się do 16-bitowa liczby całkowitej bez znaku otrzymałem znak na LCD 8-)
Wiem, że to braki wiedzy z poprzednich rozdziałów :oops: , lecz umknęło to mojej uwadze. Dzieki za pomoc !



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 11:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

barszczz napisał(a):
W jaki sposób dla uint16, który odnosi się do 16-bitowa liczby całkowitej bez znaku otrzymałem znak na LCD
Wiem, że to braki wiedzy z poprzednich rozdziałów , lecz umknęło to mojej uwadze. Dzieki za pomoc


czegoś nie rozumiem - gdyby ci się na pewno liczba w zmiennej uint16_t zmieniała TYLKO w zakresie 0 - 75 to NIGDY nie otrzymasz na LCD z tej biblioteki z Bluebooka liczby ujemnej (czyli ze znakiem -)

ale .... ale jeśli przekroczy ona wartość dodatnią dla typu int ........ (sam pomyśl albo zajrzyj do bluebooka jakie są granice typu int) to się nie dziw że zobaczysz liczbę ujemną

tu kłania się dość popularny kolejny temat z ćwiczenia o LCD - gdzie zastosowałem (co zresztą widać w nazwie funkcji LCD_int() ) ... wyświetlanie WŁAŚNIE liczb typu int )

a jeśli ktoś chce wyświetlać większe liczby całkowite bez znaku to MUSI sobie albo przerobić tą funkcję albo napisać nową np: LCD_long() ... posługując się wewnątrz niej nie itoa() a np ltoa() ... no i zmienić typ argumentu przekazywanego do funkcji

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 12:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

To już ostatnie pytanie odnośnie ćwiczenia 11_RC_5_decode i rejestru ICR1.

Poprzez funkcji w makro "ir_micro_s(num)" przeliczamy ilość tyknięć Timera1 dla zadanej długości czasu. Chciałem zobaczyć w Eclipse jaką wartość dostanę dla MAX BIT i o dziwo moje ustawienie F_CPU to 20 MHz, lecz w opcji properties jak i we fuse bitach ustawiłem wszystko wg. wartości rezonatora. Wszystko przedstawia obrazek poniżej:
Obrazek

Oczywiście program działa sprawnie i przy nakierowaniu świetlówki czy lampy wolframowej kody są nadal sczytywane. Zastanawia mnie jednak fakt czemu program wpisuje mi 20 MHz. Projekt wyczyściłem, przebudowałem i wgrałem na uC i nadal to samo. Wiem, że to czepianie się do niczego, ale to taka maleńka rzecz, która nie daje mi spokoju :roll:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 13:51 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

może masz coś nie tak z workspace - zawsze w takiej sytuacji prosta sprawa aby się przekonać:

1. zakładasz nowe czyste workspace
2. odpalasz eclipsa w tym nowym
3. robisz IMPORT projektu ze skopiowaniem go do nowego workspace
4. wszystko powinno śmigać dobrze ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 16:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

Dziękuję za nakierowanie co do problemu z wyświetlaczem i tej liczby ze znakiem, nie mam wprawy w te klocki no i nie myślę w kategoriach int, long itd. to pewnie trzeba wypić z mlekiem matki bądź wpoić sobie poprzez praktykę i systematyczność której mi brak :oops:

Co do podglądu wartości wpisanych w marko. Tak jak zasugerowałeś wszystko zrobiłem krok po kroku, oczywiście przez pomyłkę nie przełączyłem na perspektywę Eclipsa do AVR, lecz teraz wszystko gra i pokazuje mi dokładnie ustawioną wartość w preferences i poprzez fuse bity !
No to teraz czas na zabawę z pilotem ;)

Tak jeszcze z czystej ciekawości, rozumiem, że w przypadku użycia ICR1, tak jak w przykładzie 11_RC5, jedynym sposobem uruchomienia timera1 jest puszczenie na nóżkę PD6 jakiegoś impulsu (np. jeden impuls 1ms). Czyli tak jak to rozumiem jest to taki sygnał "Trigger" do wyzwolenia tego Timer1. W kilku innych postach rozmawialiście o podłączaniu TSOP i rezystora pull up itd. Nie miałem z tym do tej pory styczności i za bardzo nie rozumiem powodu stosowania tego rozwiązania.

W swoim projekcie chciałem użyć Atmega32 do generacji sygnału Trigger do wyzwolenia aparatu fotograficznego, gdzie w instrukcji napisane jest, że powinienem użyć sygnał " TTL/high impedance ". Z tego co rozumiem to nie mogę podłączyć bezpośrednio pinu z Atmega do portu w aparacie ? Powinienem użyć rezystor i do tego jakiś kondensator w celu przefiltrowania sygnału ? Wiem, że to pytanie jest oddalone od tematu ICR1, więc jeśli trzeba to oczywiście mogę założyć kolejny temat z tym zganieniem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 16:16 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

barszczz napisał(a):
bądź wpoić sobie poprzez praktykę i systematyczność


Uwierz wystarczy tylko to - bo niestety ja np nie czułem tego w mleku matki ;)

barszczz napisał(a):
W kilku innych postach rozmawialiście o podłączaniu TSOP i rezystora pull up itd. Nie miałem z tym do tej pory styczności i za bardzo nie rozumiem powodu stosowania tego rozwiązania.


No ale czego nie rozumiesz ? ;) przecież TSOP to prosty odbiornik podczerwieni scalony zresztą. Ma tylko trzy nogi. VCC, GND i WYJŚCIE właśnie ... no i chyba to nie dziwne że to WYJŚCIE na którym pojawiają się te całe ramki/przebiegi z pilota podłączamy na WEjście przerwania ICP1 ??? czy dla ciebie to dziwne ? bo może czegoś nie rozumiem w twoim pytaniu. A to że trzeba/warto zrobić dodatkowe podciąganie to już inna kwestia chodzi o lepsze zbocza tych sygnałów i mniej błędów

barszczz napisał(a):
W swoim projekcie chciałem użyć Atmega32 do generacji sygnału Trigger do wyzwolenia aparatu fotograficznego, gdzie w instrukcji napisane jest, że powinienem użyć sygnał " TTL/high impedance ". Z tego co rozumiem to nie mogę podłączyć bezpośrednio pinu z Atmega do portu w aparacie ? Powinienem użyć rezystor i do tego jakiś kondensator w celu przefiltrowania sygnału ? Wiem, że to pytanie jest oddalone od tematu ICR1, więc jeśli trzeba to oczywiście mogę założyć kolejny temat z tym zganieniem.


Pewnie że można tylko czy coś ci się nie "pokapturkowało" ? :( ... wyzwalanie aparatu chcesz zrobić za pomocą WEjścia ICP1 ? no toż to przecież panie kochany WEjście i na nim badamy stany jakie się podaje z zewnątrz - jak w klawiszu ;)

co to ma wspólnego z WYSTEROWANIEM migawki aparatu. W tym celu chyba musisz użyć panie kochanieńki WYJŚCIA z procka prawda ? ;) i może to być dowolny pin który ustawisz jako wyjście i podasz a niego krótki impuls i to nawet bez użycia żadnego timera bo po co ? ;)

a to że ma być High Impedance - to racja i użyj panie do takiego celu Optoizolatora - nawet CNY17 - ja tylko tak robię gdy podłączam procka do aparatów czy kamer ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 16:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

mirekk36 napisał(a):
a to że ma być High Impedance - to racja i użyj panie do takiego celu Optoizolatora - nawet CNY17 - ja tylko tak robię gdy podłączam procka do aparatów czy kamer ;)


Oj nakiełbasiłem :) z góry przepraszam za wprowadzenie w błąd.
Moje pytanie co do tych rezystorów pull up nie miało żadnego powiązania z ICR1, to samo z wyzwalaniem kamery - nawet nie przyszło mi na myśl wyzwalać aparatu w ten sposób ;)

Chodziło mi, że ten sygnał na ICR1 wyzwalający działanie timera1 wygląda dla mnie jak zwykły sygnał trigger jak np. w projekcie do wyzwalania aparatu.
Dodatkowo przypomniałem sobie rozmowę o TSOP i rezystorze pull up. W instrukcji mam napisane TTL i wysoka impedancja, więc coś mi zaświtało i zaciekawiło, czy do takiego prostego przykładu jak klawiszowe (np pilota RC5, bo już dziś przemaglowałem ten temat ;) ) wyzwalanie, muszę użyć jakiekolwiek dodatkowe elementy, czy też mogę bezpośrednio podłączyć wyjście Atmegi do kamery. A najbardziej zastanawia mnie powód, dla którego musimy stosować te rezystory pull up np. w połączeniu TSOP-a skoro ma on własną rezystancje. Jedyne co przychodzi mi na myśl to używając rezystor pull-up zmniejszamy prądy sygnałów, więc oszczędzamy na baterii, lecz czy to nie wymyślona teoria ? :twisted:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 16:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

barszczz napisał(a):
czy też mogę bezpośrednio podłączyć wyjście Atmegi do kamery


No wiesz jak masz jakiś aparat/kamerę za 20zł i gdyby coś się zrąbało - to nie żal - to podłączaj od razu do wyjścia ATmegi ;) czemu nie. Ale jeśli masz jakiś aparat/kamerę za dużo dużo większą sumę i jednak czujesz ryzyko że jak to sfajczysz - to będzie bolało, to jednak nie żałuj kaski na transoptor.... Bo to parę groszy a masz pewność raz na zawsze.

Jeśli chodzi o dodatkowy pullup dla TSOP'a ;) no toż przecież pisałem. A ty zajrzałeś do noty i sprawdziłeś jaki on ma ten wewn. pullup ? tzn jaka rezystancja ??? Ja wolę dać jeszcze równolegle 10K co razem da jakieś powiedzmy ok np ok 5k i jeszcze raz ci powtarzam - jakbyś sobie podglądał przebiegi na oscylu to będą bardziej strome zbocza. A to przełoży się na mniej błędów - a chyba o to ci chodzi gdy chcesz sterować procka z pilota - zgadza się ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 16:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

o właśnie, o to mi chodziło :) teraz już pojąłem skutki i przyczyny...
Zaraz rzucę okiem na transoptory i w notach popatrzę jak to podłączyć, bo jeszcze nigdy nie stosowałem tego elementu. Znając życie będę miał kilka pytań i z tym tematem, ale jeśli to już w innym temacie, żeby tutaj nie odbiegać od zagadnienia.

Ten pilocik RC5 pod jednym pinem i wspomniany kod 11_RC5 to świetna sprawa, już nie zliczę ile ciekawych zabaw i małych projekcików sobie zaplanowałem do przetestowania :lol:

Pewnie jutro postaram się przejrzeć dział odnośnie IR z zielonej książki, bo z tego co widzę jest tam dość spory dział poświęcony temu zagadnieniu...jeszcze raz dzięki za dobre rady ;) !



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:01 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

barszczz napisał(a):
Pewnie jutro postaram się przejrzeć dział odnośnie IR z zielonej książki,


To się postaraj - bo tam jest takie fajne "cacuszko" przy obsłudze pilotów jak "key_time" - zmienna zliczająca ilość odebranych ramek co daje GIGANTYCZNIE fajne możliwości jeśli chodzi o obsługę w programie. Nie wspomnę już że działa to na zdarzeniach i świetnym callbacku .... w efekcie końcowym stosowanie już tego we własnym dowolnym programie to MIODZIO ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Tak się wczepię lekko w temat, bo widzę moją działkę :) Wyzwalanie aparatu można też spokojnie i bezpiecznie zrobić na tranzystorze, np. BC547 z rezystorem na bazie około 4,7k w układzie z otwartym kolektorem jako wyjście. To wielokrotnie sprawdzony na najróżniejszych aparatach, pewny w załączeniu i bezpieczny sposób. Nie ma tam mowy o przedostaniu się niepowołanych sygnałów. W sumie korzysta się z niego jak z transoptora. Poniżej fragment schematu:

Obrazek

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:06 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

oczywiście że można i tak - tylko że kolega nie do końca może czuje co daje transoptor albo o jakie przypadki chodzi. Wszystko zależy jak budujemy zasilanie tego co steruje tym aparatem ...

i w takim przypadku z tranzystorem jak pokazałeś trzeba się już czasem zastanowić ...

tymczasem podkreślam - transoptor i to SMD wcale nie jest ani droższym, ani większym gabarytowo rozwiązaniem a można bez obaw stosować go w każdym wypadku.

------------------------ [ Dodano po: 1 minucie ]

A jeśli chodzi o to zdanie:
SylwekK napisał(a):
Nie ma tam mowy o przedostaniu się niepowołanych sygnałów

To "nie ma mowy" dokąd się RAZ nie przedostanie i coś sfajczy ;) .... Jeszcze raz mówię - warto sobie zdać sprawę z kosztów aparatu bo są takie za 100zł, są też za 1000zł ale są także za 10.000 zł i dużo więcej .... Dlatego warto czasem się zabezpieczyć.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

Dzięki Panowie, nie spodziewałem się tak szybkiego i licznego odzewu :)
Akurat mam tranzystorek NPN BC547, więc jutro przetestuję podłączenie do aparatu w ten sposób.
Dodatkowo, zakupię też optoizolator, ot tak, żeby pobawić się i użyć go do podobnego celu w praktyce.

------------------------ [ Dodano po: 1 minucie ]

mirekk36 napisał(a):
To "nie ma mowy" dokąd się RAZ nie przedostanie i coś sfajczy


no to teraz mam znowu wątpliwości przed użyciem BCxxx :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:17 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

barszczz napisał(a):
no to teraz mam znowu wątpliwości przed użyciem BCxxx :/


powiedz za ile masz aparat - rząd wielkości ;) i powiedz mi jak będziesz dokładnie zasilał urządzenie które będzie wyzwalać ten aparat - to ci podpowiem

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 106
Pomógł: 0

Aparat, dość drogi, bo to przemysłowa kamerka z laboratorium, którą chcę sterować.
Zasilana z dodatkowego zew. zasilacza 13V 1.2A
Z tego co rozumiem, optoizolator jest jest jedynym słusznym rozwiązaniem, bo procek i kamerkę zasilam z innych źródeł więc w razie przedostania się niechcianego sygnału, ich różnica może być smażąca :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:26 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3187
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 89

Cytuj:
no to teraz mam znowu wątpliwości przed użyciem BCxxx :/


No i bardzo dobrze. Weź sobie zobacz notę dowolnego transoptora i zobaczysz że w obudowie masz diodę LED i tranzystor wysterowywany światłem z tej diody.

LED podłączasz do ATmegi, tranzystor to sterowanego obiektu.

Wtedy masz izolację galwaniczną i pewność że nic się nie stanie.

W przypadku tranzystora przy przebiciu napięcie z bazy może popłynąć wprost do aparatu.

Oczywiście moze sie tak nigdy nie stać, a nawet jeśli to MOŻE nic się nie uszkodzić.

Ale podkreślam, MOŻE. A po co ryzykować?

Zgodnie z (wrednym) prawem Murphy'ego - jeśli coś może się uszkodzić to uszkodzi się na pewno. :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 17:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Dokładnie jak pisze Jagi, a ja dodam ...

że myślałem że masz jakiś aparacik/kamerkę zasilaną jeszcze bateryjnie ... a tu proszę dwa różne źródła zasilania będą ;) ... bo to jak lubisz "z tzw dreszczykiem" to dawaj przez tranzystor :lol: a jak na spokojnie to transoptor.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 37 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO