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



Teraz jest 26 sty 2026, o 12:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 1 lis 2017, o 19:13 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

Witam

Usiłuję ogarnąć temat enkodera i wyświetlacza poczwórnego LED 8 segmentowego. Procesor to Attiny 2313.
W sumie wszystko działa jak należy poza małym ale.
Cały czas na wszystkich czterech wyświetlaczach niezależnie od wyświetlanych cyfr świeci jeden segment (segment D a model wyświetlacza to fj5461bh).
Kręcąc enkoderem wynik jest poprawnie przetwarzany i prezentowany na wyświetlaczu jedynie ten jeden segment świecący permanentnie psuje wygląd.

Przeanalizowałem cały kod i nie znalazłem błędu który by podświetlał ten segment.
Anody są podpięte pod PD0, PD1, PD4, PD5 a katody pod cały port B.
Encoder pod PD2 i PD3 i przycisk enkodera PD6.

Wyświetlacz led korzysta z timera0 który generuje przerwanie o częstotliwości 200Hz a enkoder timer2 o częstotliwości 1kHz.
Problemu upatruję we wspólnym działaniu tych dwóch timerów tylko nie wiem co dokładnie.
Czy ktoś z Was miał podobny problem ?

PS: układ zmontowany na płytce stykowej, gdy wyłączę obsługę enkodera to problem znika. A dokładnie jak wyłączę obsługę przerwania timer1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2017, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

mk77 napisał(a):
Przeanalizowałem cały kod i nie znalazłem błędu który by podświetlał ten segment.

Ja też przeanalizowałem to co napisałeś. Też nie znalazłem błędu. Musi już tak zostać.

a w wolnym tłumaczeniu - pokażesz kod?

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2017, o 20:55 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Obawiam się, że szklana kula będzie najodpowiedniejszym narzędziem do rozwiązania problemu ;)

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2017, o 20:58 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

Nie dołączałem kodu bo myślałem że to możne jakiś znany problem.


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


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


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



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



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: 1 lis 2017, o 21:39 
Offline
Użytkownik

Dołączył(a): 14 sty 2017
Posty: 39
Pomógł: 4

Zmień PB3 w wyświetlaczu led na inne - na PB3 masz też OC1A od Timer1 z którego korzystasz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2017, o 21:49 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

Czyli jednak problem z przerwaniem timer1 ?
Mogę to przerzucić PA0 lub PA1 tylko że trzeba będzie przeprogramować całą obsługę katod wyświetlacza.
Ale faktycznie to może być problemem więc innego wyjścia chyba nie ma.
Dziękuję za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2017, o 19:10 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

A jest możliwość odłączenia tego pinu PB3 (OC1A) od Timer1 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2017, o 19:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

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


Pierwsza tabelka na stronie 104 w dt: http://www.atmel.com/Images/Atmel-2543-AVR-ATtiny2313_Datasheet.pdf
czyli Normal port operation, OC1A/OC1B disconnected.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2017, o 20:03 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

Dzięki teraz wszystko pięknie działa :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2017, o 18:08 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

To jeszcze jeden problem mam.
Chcę dodać opcję power down.
Do pinów INT0 oraz INT1 mam podłączone port A i B enkodera.
Dopisałem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

i po tym enkoder nie zlicza impulsów a wyświetlacz delikatnie miga podczas kręcenia enkoderem. Jak by procesor w trakcie jednego tyknięcia enkodera był wprowadzany w power down i od razu wybudzany.
Jak to powinno być ustawione abym gdy licznik enkodera będzie mniejszy od 0 to uśpi się procesor poleceniem sleep_mode() a następnie przy przekręceniu enkoderem wybudzał by się.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2017, o 18:27 
Offline
Moderator
Avatar użytkownika

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

No skoro bibliotekę ustawiłeś na te przerwania to ona ich używa - a ty robisz to ponownie ?

_________________
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: 6 lis 2017, o 19:44 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 31
Pomógł: 0

Czyli multipleksowanie wyświetlacza przerzucić do przerwania generowanego przez timer1 i zwolnić to przerwanie obsługiwane przez timer0 i korzystać z INT0 dla power down ?

Aaaa ok już widzę błąd :).
INT0 i 1 służy do wykrywania tyknięć enkodera.
Czyli jest w tym przypadku możliwość wybudzania tego procka inaczej niż przez int0 lub 1 ?



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

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