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



Teraz jest 28 kwi 2024, o 09:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 6 wrz 2013, o 19:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Witam potrzebuje pomocy.. chyba juz bardziej podpadającej pod ten dział. Mianowicie potrzebuje zliczać impulsy (zmianę stanów z 0 na 1)
Dobre rozumiem ze mozna to realizowac poprzez sprzetowe T0 ? ja i przez przerwanie na INT ? nie rozumiem dokonca jak to działa w obu tych przypadkach i jak to ustawic w bitach.

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




niestety nie bardzo mi ten kod działa, choc powinien. Zapewne popełniam ciagle jakis błąd, neistety nie moge go zobaczyc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 20:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

W TCCR0 bity CSx służa do ustawienie peskalera, czli szybkości napędzania timera przez zegar proca.

Jaki to procesor ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 20:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Atmega16

ustawiłęm te bity bo według noty wtedy timer nakreca sie poprzez zewnetne T0 czyli tam gdzie podpiety mam fototranzystor.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 20:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Nigdy tak nie używałem Timer0, zliczanie impulsów chyba lepiej robić przez ICP na Timer1.



Ale do timer0 chyba trzeba jeszcze ustawić takie coś.
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: 6 wrz 2013, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

chodiz mi o to zeby wykozystac fototranzystor jako enkoder optyczny do zliczania impulsów



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 20:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Spróbuj ustawić bit TOV0 w rejestrze TIFR na wartość jeden.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 20:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

niestety nic to nie zmieniło...
jak ustawić te bity, moze to całkiem inaczej trzeba?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 20:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Bity ustawiasz dobrze.
Ale ja bym sprawdził, czy w ogóle procesor reaguje na to narastające zbocze. Np. dać klawisz, który będzie zwierał do VCC.
Tylko wtedy usuń to:
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: 6 wrz 2013, o 21:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

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


dobrze rozumiem ze taki kod powoduje na T0 zapalanie diody tylko na zboczu opadającym???

efekt jest taki ze czy podepne czy nie podepne klawisza dioda zapala sie z opóznieniem jakims 4 s i tyle, lecz gdy od samego właczenia zasilania trzymam wcisniety to dioda nie zapala sie wogole.. dopiero jak puszcze minie te 3-4 s to sie zapala i juz potem zero reakcji na klawisz... swieci cały czas



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 21:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Nie, nie, nie zupełnie.
Za zliczanie zbocz (narastających) odpowiada to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Możesz to traktować jako zewnętrzny zegar dla timera0.
Jeśli by miał reagować na zbocze opadające to bit CS00 musiałby być ostawiony na zero.

PB0 czyli T0, jest wejściem, panuje na nim stan.... jest nie podciągnięte, więc powinien być niski, ale tak sobie teraz myślę, że może tam być nie wiadomo co. Może dobrze by było dać rezystor 10 kohm, ale fizycznie do masy, żeby wymusić stan niski. Wtedy będzie pewność, że przycisk będzie generował zbocze narastajjące przy wciśnięciu.

Tylko pamiętaj, że przerwanie zostanie wywołane po 255 impulsach (zboczach). W praktyce każde naciśniecie i zwolnienie przycisku wygeneruje wiele takich zboczy. Więc pewnie 20 naciśniśnięć wystarczy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

gdy podiołem T0 do masy, tak z 50 wcisniec i sie zapala, bez rezystora zapala sie po 4 sekundach samo z siebie...

Wiec reaguje..
pozostaje pytanie jak podłaczyc fotorezystor by reagowało.. na niego

tylko mi tez choidzło o to by przerwanie wysteppowało co kazde zbocze narastaje a nie po 256



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 21:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Bez ściągnięcia rezystorem na T0 jest stan nieustalony i pojawiają przypadkowe zbocza, dlatego po 4 sek doliczyło samo do 255.

Atmegowiec napisał(a):
tylko mi tez choidzło o to by przerwanie wysteppowało co kazde zbocze narastaje a nie po 256

Obawiam się, że w ten sposób tego nie osiągniesz.
U Ciebie timer pracuje w trybie Normal, czyli liczy ZAWSZE do wartości TOP czyli 255. Zwykle napędza się go taktem zegara procesora (podzielonym przez preskaler) i wtedy przepełnienie występuje po określonym czasie. Dzięki temu mamy podstawę czasu dla przerwania OVF_vect.
U Ciebie jest tylko taka różnica, że napędzasz timer zewnętrznym sygnałem, z natury asynchronicznym, ale przerwanie w tym trybie zawsze będzie wygenerowane po przepełnieniu licznika czyli po przekroczeniu 255.

Żeby mieć za każdym impulsem wywołane przerwanie musisz albo zastosować wejście ICP i Timer1 (16 bitowy), albo możesz spróbować załadować licznik TCNT0 wartoscią 255, wtedy pojedynczy impuls go przepełni i wywoła przerwanie, w którym znowu go załadujesz wartością 255.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 23:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

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


miga dioda, ale na wyświetlaczu, nie ma co jeden, tylko przeskakuje o kilkanascie cyfr. Czemu jest tyle przerwań skoro ja raz zasłoniłem, i odsłoniłem ?? drgania styków?? jak? tu??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2013, o 23:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Atmegowiec napisał(a):
Czemu jest tyle przerwań skoro ja raz zasłoniłem, i odsłoniłem ?? drgania styków??


Rozumiem, że podpięty jest fotorezystor...
Jeśli tak, no to w czasie kiedy zmienia się jego oporność występują przeróżne stany pośrednie i procesor je traktuje jako zbocza do przerwań.
Trzeba by podłączyć go przez układ z czymś w rodzaju histerezy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2013, o 13:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

hej to jest fototranzystor

a poniżej schemat podłączenia

Obrazek

Dioda IR świeci światłem ciągłym

Zapomniałem narysować ale jest pull up na fototranzystorze do +

może to inaczej rozwiązać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2013, o 14:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

No myślę, że najlepiej to by było dać ten fototranzystor przez przerzutnik jakiś, wtedy będzie na pewno ostre zbocze w odpowiednim momencie.

http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/schmitt.html
O takie coś chodzi to jest przerzutnik Shmitta, posiada histerezę dla napięć. Można to zrobić na wzmacniaczu op. albo np na 2 bramkach NAND. Gdzieś to miałem ładnie rozrysowane, muszę poszukać. Ale wejścia łączyło się razem, bramki posobnie i rezystancję z wyjścia na wejście jako sprzężenie zwrotne. Ale nie pamiętam wartości.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2013, o 14:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

http://www.forbot.pl/forum/topics61/mie ... al_rotator

chodiz mi o takei cos.. patrze na schemat, kurcze no nic tam nei ma takiego..jest dodatkowy uklad scalony ale i jego nie musi byc

autor udostepnia kod ustawiłem bity teraz widze ze praktycznie tak samo.. i nie rozumiem czemu tak zlicza dziwnie zamiast, 0,1,2,3,... tylko 0,23,344,673 np.

nei chodzi mi o konwersje obrotów.. poki co tylko zliczanie impulsów..

moze ja coś zle rozumiem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2013, o 14:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

No tam jest opisane kiedy nie musi być tego układu. Ten układ to właśnie wzmacniacz operacyjny pracujący jako przerzutnik Shmitta.
A zlicza tak, bo procesor wykrywa wiele zboczy jak zasłaniasz/odsłaniasz fototranzystor. Dlatego potrzebna jest histereza którą daje przerzutnik.
Zobacz tutaj o co chodzi z tą histerezą:
http://www.youtube.com/watch?v=9kMKnfuTozo

Są dwa progi "uznanie" jedynki i "uznanie" zera. Wszystko co jest pomiedzy progami nie powoduje zmiany stanu na wyjściu przerzutnika, może się tam dowolnie zmieniać, przerzutnik przełączy dopiero wtedy gdy napięcie przekroczy próg.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2013, o 14:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

rozumiem czyli jednak potrzebuje ten wzmacniacz

mam LM386N-1 nada sie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2013, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Tak, to może być dowolny wzmacniacz op.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2013, o 21:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Witam ponownie,

Tym razem postanowiłem inaczej podejśc do problemu, podłączyłem fototranzystor do pinu PD2 czyli INT0.
Chciałbym aby zmiana stanu z wysokiego na niski wyzwalałać przerwanie. Program ma za zadanie zliczać przerwania do 9 a potem liczyć od nowa.
Napisałem taki kod jak ponizej:

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


niestety bez rzadnej reakcji, zastanawiam sie czy dobrze ustawiłem odpowiednie bity, mam Atmegę 16.


------------------

Znalazłem jeden błąd mianowicie zła nazwa w obsłudze przerwania, było:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ma być:

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


Lecz to nie ten błąd , dalej bez reakcji



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2013, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

zmieniłem linię:

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


na:

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


teraz ma regować na stan niski, owszem reaguje, ale zamiast spodziewanego liczenia, całkowicie rozwala wyswietacz 4x 7seng LED. Gdy zakrywam/odkrywam fototranzystor to przeskakują, "8", 0, wyłaczają sie wyświetlacze,ogolnie totalne popsucie...

Czyzby zewnetrzne przerwanie kłóciło sie z przerwaniem od multipleksowania LED? używam kodu wysw. LED z Mirkowej DVD



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 paź 2013, o 18:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Nowa wersja kodu:

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



brak "volatile" powodowało ze przerwanie nie działało, niestety dalej jest problem z wyswietlaczem



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: 23 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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