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

[ATTiny2313][Bascom]Obsługa wyswietlaczy LED - 74LS164

pawel.l89 16 Wrz 2008 23:06 2409 2
REKLAMA
  • #1 5542300
    pawel.l89
    Poziom 12  
    Witam próbuje napisać program w Bascomie dla At90S2313 do obslugi wyswietlaczy LED za pomoca 74LS164. POdłączyłem dwa wyswietlacze które obsługuje multipleksowo. Oto kod źródłowy:
    
    Ddrd = &B1111100 : Portd = &B1111111 : Ddrb = &B11111111 : Portb = &B11111111
    Tccr0 = &B11 : Timsk.1 = 1 : Sreg.7 = 1 : On Timer0 Co4ms
    'Tccr1b = &B11 : Timsk.7 = 1 : On Timer1 Co1s
    Dim Mop As Bit , Rejestr As Byte , X As Byte , Pomoc As Bit
    Rejestr = 0 : Pomoc = 0
    Do
    If Pomoc = 0 Then
    Portb.0 = 0
    Portb.1 = X.0
    Rotate X , Right
    Portb.0 = 1
    Incr Rejestr
    If Rejestr = 8 Then
       Rejestr = 0
       Pomoc = 1
    End If
    End If
    
    Loop
    
    'Co1s:
    'Timer1 = 65500
    'Return
    
    Co4ms:
    Portd.5 = 1 : Portd.6 = 1
    Toggle Mop
    Select Case Mop
    Case 0:
       Portd.6 = 0 : X = &B00000011 : POMOC = 0
    Case 1:
       Portd.5 = 0 : X = &B00100101 : Pomoc = 0
    End Select
    Return
    Tabela:
    
    'Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
    


    Efekt jest taki że na wyświetlaczu jest liczba 02 ale niestety nie mogę całkowicie zlikwidować lekkiego świecenia się pozostałych segmentów danego wyświetlacza które akurat nie są potrzebne do wyświetlenia prawidłowo danej cyfry. Tzn na tym wyswietlaczu gdzie jest cyfra 0 dodatkowo lekko świeci segment g. ogólnie to caly czas lekko świecą się wsyztskie segmenty obu wyświetlaczy.Wyswietlacze sa ze wspolna anoda. Do anody idzie kolektor tranzystora PNP a poszegolne segment sa poloczone z ukladem 74LS164 przez rezystory 220 om.moze ktoś mi pomóc?

    Tytuł poprawiłem - regulamin.
    [zumek]
  • REKLAMA
  • #2 5542667
    zumek
    Poziom 39  
    pawel.l89 napisał:
    ...Efekt jest taki że na wyświetlaczu jest liczba 02 ale niestety nie mogę całkowicie zlikwidować lekkiego świecenia się pozostałych segmentów danego wyświetlacza które akurat nie są potrzebne do wyświetlenia prawidłowo danej cyfry...

    Mnie to wcale nie dziwi , bo "wsuwasz" dane do rejestru 164 , kiedy wyświetlacz jest aktywny.

    Piotrek
  • #3 5545637
    pawel.l89
    Poziom 12  
    Dobra no to powiedzmy ze wygasze te wyswietlacze na czas "wsuwania" danych do rejestr 74LS164.Program wyglada tak:

    
    Ddrd = &B1111100 : Portd = &B1111111 : Ddrb = &B11111111 : Portb = &B11111111
    Tccr0 = &B11 : Timsk.1 = 1 : Sreg.7 = 1 : On Timer0 Co4ms
    Tccr1b = &B11 : Timsk.7 = 1 : On Timer1 Co1s
    Dim Mop As Bit , Rejestr As Byte , X As Byte , Pomoc As Bit , Cyfry(2) As Byte , Liczba As Byte
    Rejestr = 0 : Pomoc = 0
    Do
    If Pomoc = 0 Then
    
    portd.5=1 : portd.6=1  'Tu następuje wygaszenie obu wyświetlaczy
    Portb.0 = 0
    Portb.1 = X.0
    Rotate X , Right
    Portb.0 = 1
    Incr Rejestr
    If Rejestr = 8 Then
       ' a tu następuje wlaczenie wysiwetlacza ktory byl  czynny przed wygaszeniem.
       If Mop = 0 Then  
          Portd.6 = 0
       Else
          Portd.5 = 0
       End If
       Rejestr = 0
       Pomoc = 1
    End If
    End If
    
    Loop
    
    Co1s:
    Timer1 = 3035
    Incr Liczba : If Liczba = 100 Then Liczba = 0
    Cyfry(2) = Makebcd(liczba)
    Cyfry(1) = Cyfry(2) And &B00001111
    Shift Cyfry(2) , Right , 4
    Return
    
    Co4ms:
    Timer0 = 125
    Portd.5 = 1 : Portd.6 = 1
    Toggle Mop
    'If Pomoc = 1 Then
    Select Case Mop
    Case 0:
       Portd.6 = 0 : X = Lookup(cyfry(2) , Tabela)
    Case 1:
       Portd.5 = 0 : X = Lookup(cyfry(1) , Tabela)
    End Select
    'End If
    Return
    Tabela:
    
    Data &B00000011 , &B10011111 , &B00100101 , &B00001101 , &B10011001
    Data &B01001001 , &B01000001 , &B00011111 , &B00000001 , &B00001001


    To nie pomogło. Ma ktoś jeszcze jakis pomysł?
REKLAMA