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



Teraz jest 30 maja 2026, o 17:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 29 lip 2014, o 19:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 wrz 2013
Posty: 162
Lokalizacja: Rbk
Pomógł: 5

Witam!

Próbuję stworzyć tablice, w której będę mógł zmieniać kolory diody LED RGB (na razie tylko na zasadzie ON-OFF). Po dodaniu przycisku i kodu z bloga (eliminacja drgania styków) zauważyłem, że program bardzo dziwnie się zachowuje - tak jakby nie było eliminacji drgań styków.
Sprawdziłem o co chodzi i okazało się, że podciągnięcie portu PB3 do VCC w funkcji main nie działa:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wiem, że kod może być troszkę nie czytelny, ale musiałem dodać kilka warunków, aby sprawdzić z czym jest problem. Po podłączeniu diody LED do portu PB3 dioda LED w ogóle nie świeci.
Natomiast w poniższym kodzie podciągnięcie do VCC znajduje się w pętli while:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I dioda lekko świeci. Wiec dlaczego nie chce świecić w main?
Nawet jakbym dodał DDRB w main to i tak dioda LED nie świeci.
Może to być jakiś problem z eclipsem?


Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2014, o 19:46 
Offline
Użytkownik
Avatar użytkownika

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

Ta linijka powoduje problem:

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

To w niej dla każdego "i" z przedziału <0, 7> zerowane jest ustawienie wewnętrznego pull-up'a.

Powinno występować maskowanie bitów. Jedynie bity 0..2 mogą zostać zmodyfikowane, pozostałe powinny pozostać bez zmian:

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


Po rozpisaniu to samo co:

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


Autor postu otrzymał pochwałę


Ostatnio edytowano 29 lip 2014, o 19:54 przez atmel, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2014, o 19:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

No tak jak kolega wyżej napisał ,masz ledy i przycisk na tym samym porcie ,więc migając ledami ,migasz też pull-apem.

Najprościej to podłącz przycisk np. do portu D.


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2014, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 wrz 2013
Posty: 162
Lokalizacja: Rbk
Pomógł: 5

Dziękuję panowie za odpowiedzi! Nawet nie wiedziałem o czymś takim ;)
Ale mam jeszcze jedno pytanie. Załóżmy, że chciałbym zostać tylko przy porcie B (np. attiny13).
Zauważyłem, że program reaguje bardzo dziwnie. Gdy zbliżymy rękę do przewodu to następuje mruganie diod LED. Nawet nie trzeba przewodu dotykać. Fajny efekt, ale na chwilę obecną do niczego mi się nie przyda ;P
Czy można to w jakiś sposób poprawić, tak aby układ nie był aż tak czuły i nie działał jak wzmocnienie - antena i reagował tylko na przycisk?

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



Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2014, o 19:10 
Offline
Użytkownik
Avatar użytkownika

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

Nie bardzo się zrozumieliśmy i wydaje mi się, że mimo wszystko powyższy program nie ma prawa działać poprawnie :P

W linii 17 zamiast PORTB &= 0b11111000; powinno być tak jak poprzednio PORTB|= KEY1;.
Natomiast zmiana powinna dotyczyć linii 30/31 tzn. PORTB= tab [ i ]; trzeba zamienić na PORTB = PORTB & 0xF8 | tab[i];.

Całość (nie zmieniałem formatowania ze względu na zgodne numerowanie linii):

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: 31 lip 2014, o 16:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 wrz 2013
Posty: 162
Lokalizacja: Rbk
Pomógł: 5

Faktycznie, źle zrozumiałem :P
Eclipse jeszcze zwrócił uwagę, aby PORTB & 0xF8 umieścić w nawiasie.
Wszystko śmiga. Dziękuję jeszcze raz za pomoc!


Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2014, o 17:02 
Offline
Użytkownik
Avatar użytkownika

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

Proszę bardzo ;)

Warning Eclipse'a jest zrozumiały, ponieważ sugeruje możliwy błąd w przypadku, kiedy działanie sumy bitowej powinno być wykonywane przed priorytetowym w tym wypadku operatorem iloczynu bitowego.
Mimo wszystko wersja bez nawiasów również będzie działać bez zarzutu. Jednak tworzymy programy bez żółtych trójkącików (tym bardziej czerwonych krzyżyków :)), dlatego ten nawias faktycznie powinien tam być.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO