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



Teraz jest 1 gru 2024, o 05:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 24 paź 2014, o 22:11 
Offline
Nowy

Dołączył(a): 24 paź 2014
Posty: 21
Pomógł: 0

Witam. Tak jak w temacie. Mam banalny problem, ale nie wiem jak go rozwiązać. Mianowicie, załóżmy że na PC0, PC1 i PC2 mam diody a na PC5 mam switch. Skoro domyślnie wszystkie porty ustawione są na wejścia to wystarczy PC 1-3 ustawić na wyjścia. Później wystarczy ustawić warunek dla przycisku if(!(PINC & (1<<PC5))) no i powinno działać. Ale coś nie bardzo, kombinuje z tym i kombinuje. Pokaże ktoś przykładowy kod ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2014, o 22:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

To niech pokaże kolega jak kombinuje, znajdziemy błąd w kodzie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2014, o 22:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Bez kodu ciężko pomóc, ale trzeba pamiętać, aby nie modyfikować 6-tego bitu (licząc od 1) rejestru PORTC, który jest odpowiedzialny za ewentualny pull-up przycisku. Może się zdarzyć w kodzie np. "PORTC ^= 0xFF", który ma migać diodami, ale również "mruga" pull-up'em...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 08:01 
Offline
Nowy

Dołączył(a): 24 paź 2014
Posty: 21
Pomógł: 0

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: 25 paź 2014, o 09:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Pierwsze pytanie jak masz podłączone diody do portu ? Anodą do atmegi i katodą do masy ?

Druga rzeczy to poczytaj o drganiach styków. Bo ten warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wykona się bardzo szybko.
A w chwili kiedy ty naciskasz przycisk tam przez dłuższą chwilę (dłuższą w porównaniu do czasu wykonania powyższego sprawdzenia) mogą pojawiać się naprzemiennie stany 0 i 1 dlatego odczytaj sobie wciśnięcie przycisku tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz przez ten okres 100 ms po pierwszym wykryciu zetknięcia się styków przycisku na pewno sytuacja się ustabilizuje i za drugim razem odczytasz już poprawny stan, to raz a dwa ten warunek nie wykona ci się kilka razy (chyba że długo będziesz trzymał przycisk)

Aha i jeszcze odnośnie podłączenia przycisku, skoro odczytujesz go jako poziom niski zakładam że tak masz go własnie podłączonego a więc przydało by się podciągnięcie do VCC na tym wejściu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Teraz gdy przycisk nie jest wciśnięty odczytasz na tym wejściu stan wysoki, a gdy zewrzesz go przyciskiem do masy - stan niski.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 09:54 
Offline
Nowy

Dołączył(a): 24 paź 2014
Posty: 21
Pomógł: 0

Dzięki za pomoc. Jednak wciąż coś jest nie tak. Pokazują się dziwne rzeczy. Przycisk mam podłączony do Atmegi i do masy. A diody tak jak napisałeś - anodą do atmegi i katodą do masy.

Podłączam układ do zasilania. Diody zrobią jeden cykl i wszystkie się zaświecą. Gdy wcisnę klawisz nic się nie dzieje, nawet jak dłużej przytrzymam. ALE co ciekawe wystarczy, że lekko dotknę kabel łączący switch z atmegą, to diody robią cykl, i jeśli znów nie poruszę kablem to będą świecić w nieskończoność. A teraz co bardzo dziwne - wystarczy że dotknę atmege palcem (!) to diody robią cykle. Spalony układ ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 10:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Zauważ że jeśli naciśniesz przycisk do diody zapalą ci się jedynie na chwilkę (ewentualnie dodaj tam opóźnienie) i poten będzie wykonywany cały czas elese.
Czy ustawiłeś podciągnięcie od którym ci mówiłem ?
Dodatkowo zwróć uwagę na to że wpisując
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
kasujesz to podciągnięcie, które wcześniej ustawiałeś.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 10:21 
Offline
Nowy

Dołączył(a): 24 paź 2014
Posty: 21
Pomógł: 0

Napisałem taki kod żeby można było nim łatwiej operować:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I niezależnie od tego co robię ciągle miga dioda PC2.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 10:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

A przytrzymaj przycisk kilka sekund i zobacz wtedy co się stanie. Teraz program w takiej postaci "siedzi" cały czas w "else" wykonyjąc opóźninie i ustawienia bitów więc dlatego gubisz odczyt przycisku który trwa zaledwie 100 ms w twoim przypadku. Spróbuj sobie przetestować taką pętlę while:

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


W ten sposób sprawdzisz czy poprawnie działa w twoim przypadku odczyt przycisku. Jeśli działa poprawnie to każde jego naciśnięcie powinno zmieniać stan na PC2


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 10:50 
Offline
Nowy

Dołączył(a): 24 paź 2014
Posty: 21
Pomógł: 0

Przepraszam kolego, kod który pisałem w poście kiladziesiąt minut temu działa, twój również :) Wielkie dzięki, jedno pytanie jeszcze, co oznacza "^=", i troszkę nie rozumiem tego "<<" wiem, że to przesunięcie bitu ale nie rozumiem zasady jego działania. Pozdrawiam

edit: Już wszystko wiem, jeszcze raz dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2014, o 11:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

"^" oznacza operację XOR różni się ona od zwykłego OR tym że w tabeli prawdy dla 1 XOR 1 wynik jest 0 a nie 1 jak dla OR, inaczej mówiąc XOR daje w wyniku 0 gdy na wejściu są takie same stany (00 lub 11), a kiedy są różne daje 1.

(1<<PC2) działa na takiej zasadzie że wykonujesz przesunięcie bitowe na jakimś rejestrze tymczasowym (na poziomie assemblera np. R16) , on ma same zera a ty przesuwasz mu 1 na pozycję w tym przypadku nr 2 (bo PC2 ma swoją definicję jako wartość 2). Więc ten rejestr trymczasowy będzie wyglądał teraz tak 000 0100

Dalej robisz operację XOR pomiędzy rejestrami PORTC i wcześniej wspomnianym rejestrze tymczasowym.
Więc z każdym wykonaniem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


będziesz zmieniał stan na drugiej pozycji (licząc pierwszą jako 0) czyli na porcie PC2, bo jeśli będzie 0 to 0 EOR 1 da w wyniku 1. Więc wpiszesz na tej pozycji 1 i następnym razem wykonasz ponownie tą operację ale tym razem będzie 1 EOR 1 czyli da 0. I tak w kółko.

Dokładniej poczytaj sobie to w pierwszej książce Mirka tzw. "Blue book'u" :D Jest to wszystko bardzo ładnie wyjaśnione.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO