logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Bascom] Atmega128 multipleks LED i RC5

FastProject 07 Maj 2011 15:02 2865 9
REKLAMA
  • #1 9480766
    FastProject
    Poziom 28  
    Witam,
    od wczoraj zmagam się z problemem odbioru kodu RC5 w urządzeniu, w którym mam multipleks dużej ilości wyświetlaczy 7-segmentowych LED.

    Przerwania na multipleks przychodzą co około 4ms. Multipleksowanych cyfr jest łącznie 48, ale pogrupowane są one, tak jakby były tylko 4 cyfry. W każdym przerwaniu kody segmentów wysyłane są szeregowo na 3 rejestry zbudowane z układów 4094. Czyli mamy:
    - 3 kolumny wyświetlaczy
    - w każdej kolumnie po 12 cyfr (4 wiersze)
    - każdy wiersz sterowany z innego 4094
    - rejestry połączone w szeregu (4x4094=32bity)

    Całe wyświetlanie i dekodowanie cyfr na kody 7-segmentowe odbywa się w przerwaniu od Timera1. Multipleks działa świetnie bez żadnego mrugania, ma dużą jasność.

    I teraz chciałbym ustawiać wartości na wyświetlaczy za pomocą pilota RC5. Pilot zbudowany także samodzielnie-sprawdzona konstrukcja działa od dawna z innymi urządzeniami.

    Problem polega na (próbowałem narazie 2 metody odbioru kodu RC5):
    1. Odbiór RC5 w pętli głównej..praktycznie bardzo rzadko odbierany jest kod..prawdopodobnie multipleks go zakłóca.
    2. Odbiór RC5 w przerwaniu od INT0. Odbiornik wykrywa każde naciśnięcie pilota, jednak po przerwaniu INT0 procesor ATmega 128 zawiesza się na stałe(odwiesza go tylko watchdog, reset, lub odłączenie zasilania--totalni zwis :( )

    Poniżej kod odbiornika:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Powyższy kod jest dla odbierania RC5 w przerwaniu, po którym procesor zawiesza się. Po usunięciu "Getrc5(adress , Command)" program działa poprawnie.

    Proszę o sugestie i podpowiedzi, gdzie robię błąd.

    Pozdrawiam.
  • REKLAMA
  • #2 9480779
    tadzik85
    Poziom 38  
    A czasem ta instrukcja nie wykorzystuje przerwań od t0? Wywoływanie jej w przerwaniu jest troszkę nieodpowiednie bo zablokowane są przerwania więc instrukcja ta zawiesza ci procesor.
  • REKLAMA
  • #3 9480798
    FastProject
    Poziom 28  
    Owszem, ale widziałem na elektrodzie 2 rozwiązania (np https://www.elektroda.pl/rtvforum/topic1422293.html#6987882: ), gdzie RC5 jest poprawnie odbierane w przerwaniu zewnętrznym INT0 lub INT1.

    Być może pomijam jakiś banalny szczegół, ale nie wiem w którym miejscu lub o czym zapomniałem.

    Mam pomysł...chwila...
  • #4 9480813
    tadzik85
    Poziom 38  
    po prostu włącz przerwania wszystkie po wyłączeniu INT
  • #5 9480819
    FastProject
    Poziom 28  
    Ok już nie zawiesza, ale jeszcze nie dekoduje komend...

    Wystarczyło w obsłudze przerwania INT0 dodać
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 9480825
    tadzik85
    Poziom 38  
    włączenie timera 1 jest zbyteczne
  • #7 9480856
    FastProject
    Poziom 28  
    tadzik85 napisał:
    włączenie timera 1 jest zbyteczne


    Faktycznie, ale dlaczego nie dekoduje komend...
    ...Adress i Command są w większości równe 255, czasami tylko odbierze, więc zachowuje się podobnie jak przy odbiorze w petli głównej-bez przerwań INT0.

    Wyłączając przerwania od TIMER1 na czas dekodowania komendy odbierane są poprawnie, jednak wstrzymanie przerwań TIMER1 powoduje brzydkie przygaszanie wyświetlaczy..
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #8 9485551
    asembler
    Poziom 32  
    To może zamiast wyłaczać przerwanie od timer1 trzebaby pomysleć od odblokowaniu niektórych przerwań w przerwaniu.
  • #9 9488081
    FastProject
    Poziom 28  
    Odblokowywałem przerwania w przerwaniu od timera1, ale to także nie dało skutku. Dzisiaj jeszcze może trochę pokombinuje.

    Jeśli się nie uda to dam jakiś attiny tylko do dekodowania RC5 na małej płytce. Przewidziałem, że mogą być z tym problemy więc mam na płytce miejsce na taki moduł do odbioru RC5.
  • #10 9599164
    FastProject
    Poziom 28  
    No i dałem taki moduł na attiny2313 i problem z głowy. A moduł przyda się na przyszłość :)

    [Bascom] Atmega128 multipleks LED i RC5
REKLAMA