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



Teraz jest 21 mar 2026, o 00:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 2 maja 2014, o 08:27 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Witam,
Mam wyświetlacz LED którego schemat zamieszczam poniżej:
Obrazek

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

Teraz przełączanie kropek chciałbym zrealizować według schematu. Każde wywołanie funkcji "zmiana" powoduje odpowiednie przejście:
DIP1-ON, DIP2-OFF -> DIP1-OFF, DIP2-ON -> DIP1-OFF, DIP2-OFF -> i od nowa DIP1-ON, DIP2-OFF.................
Do tego służy mi funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Gdzie wartości 13 i 14 oznaczają 13-ty i 14-sty element zadeklarowanej następująco tablicy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Warunki if(c==0) i if(c==1) działają poprawnie. Problem polega na tym, że gdy chcę wyłączyć kropki (przechodzę do warunku if(c==2) to obie kropki rzeczywiście się wyłączają albo obie świecą. Czyli przypadkowy stan. Domyślam się, że powodem tego jest podanie identycznych wartości (dip1=dip2=14) do sterowania PB5 w case 0: i case 1. Nie wiem jednak jak to ominąć.
Jak sterować kropkami tego wyświetlacza ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2014, o 09:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Tak na szybko w linii 6

(0<<5) - przesuwając zero o pięć pozycji nic nie zmieniasz (0b00000000 << 5).
~(1<<5) - przesuwając jeden na piątą pozycję (0b00100000) i negując (0b11011111) uzyskasz zero w tym bicie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2014, o 12:40 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Tylko że podany sposób zmienia mi pozostałe bity na PORTB które są wykorzystywane do innych celów.
Tak czy inaczej oboje uzyskujemy 'zero' na piątym bicie.

Ehhh. jak zwykle diabeł tkwi w szczegółach..........
Wystarczyło w instrukcji wyboru CASE 1 i CASE 2 przenieść instrukcje PORTB |=... (odpowiedzialne za wył. kropek) na koniec. Prawidłowy kod wygląda następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Póki co działa prawidłowo :-)
Zamieszczam może komuś się przyda.



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

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