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

ATTINY 2313, prosty program: dwa liczniki, multipleksowanie

kkrryyss1 24 Maj 2010 20:02 3296 8
REKLAMA
  • #1 8113345
    kkrryyss1
    Poziom 11  
    Witam.
    Jestem bardzo początkującym "programistą". Na płytce AVT3500 stawiam pierwsze kroki przy programowaniu ATTINY2313. Postanowiłem spróbować zrobić program pracujący w następujący sposób:
    dwa wyświetlacze LED wyświetlają multipleksowo stan dwóch niezależnych liczników dziesiętnych ( 0..9 ) np. L1 i L2. Licznik L1 zlicza przyciśnięcia przycisku S1 , a licznik L2 przyciśnięcia przycisku S2 ( działają na okrągło do góry )
    Nie potrafię niestety zrobić tego na jednym ATTiny 2313 ( na dwóch oddzielnych to nie sztuka ). Bardzo proszę o pomoc , czy jest to w ogóle możliwe ze względu na małą ilość portów we/wy ( 15szt)

    Moderowany przez _Robak_:

    Podwójny temat.

  • REKLAMA
  • #2 8114488
    xanio
    Poziom 27  
    Bez najmniejszego problemu ten procesor obsłuży dwa wyświetlacze 7-segmentowe LED. Rozumiem, że masz wyświetlacze ze wspólną anodą.

    Wystarczy, że kupisz 2 tranzystory PNP (np BC558), emitery do + zasilania, bazy do pinów mikrokontrolera (przez rezystor) a kolektory do wspólnej anody wyświetlacza. Katody obu wyświetlaczy do tych samych pinów.

    Możesz też zaoszczędzić jeszcze jeden pin stosując prosty układ logiczny.
  • REKLAMA
  • #3 8114819
    mirekk36
    Poziom 42  
    xanio --> nie musi nic kupować, żadnych tranzystorów. Na tej płytce AVT3500 ma wszystko czego mu potrzeba do multipleksowania 4 szt wyświetlaczy LED.

    Problem w tym, że autor nie wie jak zrobić multipleksowanie - no to już trzeba co nieco poczytać i poszukać w necie. Wujek google przyniesie ci sporo linków do różnych kursów Bascoma w tej kwestii, gdzie rozwiązanie problemu będziesz miał jak na patelni.
  • #4 8120744
    kkrryyss1
    Poziom 11  
    Witam, dziękuję za chęć pomocy , ale Koledzy chyba nie do końca zrozumieli mój problem. Chodzi mi o uruchomienie na jednym ATTiny2313 dwóch niezależnych liczników liczących każdy od 0 do 9. Liczniki te mają zliczać impulsu od dwóch przycisków ( do masy ) , każdy na osobny licznik. NIe chodzi mi o licznik liczący do 99 z wyświetlaczmi multipleksowymi.
  • #5 8120834
    tadzik85
    Poziom 38  
    nie rozumiem w czym masz problem az taki. ilość tych liczników nie gra roli

    jesli p1=0 licznik1 +1 wyświetl licznik1

    i tak samo robisz z licznikiem i przyciskiem 2. działanie w pełni niezależne
  • REKLAMA
  • #6 8120876
    kkrryyss1
    Poziom 11  
    to rozumiem , ale w jakich dwóch (chyba) rejestrach umieścić dwa liczniki
  • REKLAMA
  • #7 8121022
    GSM
    Poziom 25  
    Witam,

    w dowolnych wolnych rejestrach, albo jeśli szybkość dostępu do zmiennej nie jest krytyczna to nawet w RAM'ie.

    Pozdrawiam,
    GSM
  • #8 8121803
    xanio
    Poziom 27  
    Koledzy jednak dobrze zrozumieli. Pokaż jaki masz obecnie program. Może być taki, który zlicza 0..99.
  • #9 8221286
    kkrryyss1
    Poziom 11  
    Witam i dziękuję Kolegom za pomoc. Ostateczne rozwiązanie mojego problemu wygląda tak :

    'Niezależne sterowanie dwoma wyświetlaczami 
    'przy pomocy dwóch przcisków. Zliczanie w górę. 
    
    $regfile = "attiny2313.dat" 
    $crystal = 4000000 
    
    Config Portb = 255       'wszystkie końcówki jako wyjścia 
           Portb = &B11111111       'na początek wygaś 
    Config Portd = &B1111100 'dwie najmłodsze jako wejścia 
           Portd = &B1111111 'wyłączone wyświetlacze 
    
    Dim Lewy As Byte , Prawy As Byte , Ktory As Byte , Licz As Word 
    
    Eedr = 0 
    Eear = 0 
    Do 
    Waitms 1 
    
    Debounce Pind.0 , 0 , Zwieksz1 , Sub       'naciśnięcie S1  --lewy 
    Debounce Pind.1 , 0 , Zwieksz2 , Sub       ' naciśnięcie S2 --prawy 
    
    Incr Ktory 
    If Ktory = 2 Then Ktory = 0 
    Portd = &B1111111 
    
    
    Select Case Ktory 
    
    Case 0: 
    Portb = Lookup(prawy , Tabela) 
    Portd.3 = 0 
    
    Case 1: 
    Portb = Lookup(lewy , Tabela) 
    Portd.4 = 0 
    
    End Select 
    
    Prawy = Eedr 
     Lewy = Eear 
    
    Loop 
    End 
    
    Zwieksz1: 
    Incr Eear 
    If Eear = 10 Then Eear = 0 
    Return 
    
    Zwieksz2: 
    Incr Eedr 
    If Eedr = 10 Then Eedr = 0 
    Return 
    
    Tabela: 
      Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 
    
REKLAMA