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

[ATMEGA8][BASCOM] - Tablica świetlna LED

hiv_sick 02 Lut 2009 23:24 5313 7
  • #1 6094657
    hiv_sick
    Poziom 22  
    Witam, zrobiłem tablicę LED połączoną multipleksowo składającą się z 8*24 diod, oraz sterownik do niej. Potrafię już zaświecić daną diodę lub zbiór diod. W dalszym ciągu nie mam pojęcia jak zabrać się za wyświetlanie i przewijanie napisów. Może ma ktoś jakiś pomysł. W załączniku schemat sterownika, oraz podłączenia LEDów.

    [ATMEGA8][BASCOM] - Tablica świetlna LED
  • #2 6095716
    satanistik
    Poziom 27  
    to jest dość proste:
    Najpierw deklarujesz sobie tablicę dwudziestu czterech zmiennych np tak:
    Dim wiersze(24) as byte

    Tworzysz procedurę odświeżającą najlepiej w przerwaniu któregoś licznika.
    Procedura powinna podawać "1" po kolei na wszystkie 24 anody i jednocześnie wystawiać na port do którego podłączone są katod kolejne wartości z komórek tablicy. I tak w kółko. Teraz tylko procedura układająca zawartość tablicy wg uznania i powinno działać.
  • #3 6096729
    hiv_sick
    Poziom 22  
    Napisałem program, który podczas przerwań licznika T0 zapala kolejno dane kolumny:

    Cytat:

    St_cp Alias Portb.0 'ustawienie nazwy dla STORAGE CLOCK PULSE
    Sh_cp Alias Portb.5 'ustawienie nazwy dla SHIFT CLOCK PULSE
    Ds Alias Portb.3 'ustawienie nazwy dla DS

    Odmierz: 'przerwanie od timer0

    Load Timer0 = 1

    If K = 23 Then K = 0
    Gosub Kolumny

    Return

    Kolumny: 'podprogram włączający kolejno anody kolumn

    If K = 23 Then K = 0

    If K = 0 Then

    Ds = 1

    Gosub Reg_shift

    Else

    Ds = 0

    Gosub Reg_shift


    End If

    Incr K

    Return

    Sh_cp_shift: 'podprogram przesunięcia zegara w liczniku *74595

    Sh_cp = 1
    Sh_cp = 0

    Return

    St_cp_shift: 'podprogram załączenia zatrzasku w liczniku *74595

    St_cp = 1
    St_cp = 0

    return


    Teraz trzeba byłoby napisać procedurę, która kolejno na zapaloną kolumnę będzie podawać odpowiednią informację na port D (wiersze). Jak to zrobić?
  • #4 6097547
    dawid512
    Poziom 32  
    Pierwsza myśl
    Ddrd = &HFF
    Dim Tablica(2) As Byte
    
    Tablica(2) = 25
    Tablica(1) = 255
    
    Declare Sub Display(byval I As Byte)
    
    
    Call Dispaly(1)                                             ' wystawia na PORTD odpowienia wartosc z tablicy
    
    
    
    Sub Display(byval I As Byte)
    Portd = Tablica(i)
    End Sub
  • #5 6097682
    hiv_sick
    Poziom 22  
    udało mi się wyświetlać pojedyncze znaki ascii, nie wiem czemu ale pojawiają smugi (widac na zdjęciu)

    [ATMEGA8][BASCOM] - Tablica świetlna LED

    są to jakieś zakłócenia czy może wina programu??

    nastepnym zadaniem jakie należałoby wykonać to napisanie czterech znaków na matrycy (bo tyle się zmieści), później zabawa z przesuwaniem tego :)

    o to program:

    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Portd = Output
    Config Portb = Output
    
    Portd = &B01010101
    
    Config Timer0 = Timer , Prescale = 1
    
    Enable Interrupts
    Enable Timer0
    
    Load Timer0 = 200
    
    On Timer0 Odmierz
    
    Dim H As Byte
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    Dim Temp As Byte
    Dim Kod As Byte
    
    H = 1
    K = 0
    Kod = 48
    Portd = 1
    St_cp Alias Portb.0                                         'ustawienie nazwy dla STORAGE CLOCK PULSE
    Sh_cp Alias Portb.5                                         'ustawienie nazwy dla SHIFT CLOCK PULSE
    Ds Alias Portb.3                                            'ustawienie nazwy dla DS
    
    Gosub Clear_screen
    
    Do
    
    
    Waitus 700
    Incr Kod
    
    If Kod = 58 Then Kod = 48
    
    Loop
    End
    
    
       Odmierz:                                                 'przerwanie od timer0
    
          Load Timer0 = 1
    
             If K = 5 Then
    
                Gosub Clear_screen
                K = 0
    
             End If
    
             Gosub Kolumna
             Gosub Wiersze
          Return
    
       Kolumna:                                                 'podprogram włączający kolejno anody kolumn
    
    
    
          If K = 0 Then
    
             Ds = 1
    
             Gosub Reg_shift
    
          Else
    
             Ds = 0
    
             Gosub Reg_shift
    
    
          End If
          Incr K
    
       Return
    
       Reg_shift:                                               'podprogram przesuwania rejestru *595
    
          Sh_cp = 1
          Sh_cp = 0
          St_cp = 1
          St_cp = 0
    
       Return
    
       Clear_screen:                                            'czyszczenie matrycy ds=0
    
          For I = 0 To 23
    
             Ds = 0
             Gosub Reg_shift
    
          Next I
    
       Return
    
       Wiersze:
    
          Select Case H
             Case 1:
                Temp = Lookup(kod , Kol1)
                Portd = Not Temp
             Case 2:
                Temp = Lookup(kod , Kol2)
                Portd = Not Temp
             Case 3:
                Temp = Lookup(kod , Kol3)
                Portd = Not Temp
             Case 4:
                Temp = Lookup(kod , Kol4)
                Portd = Not Temp
             Case 5:
                Temp = Lookup(kod , Kol5)
                Portd = Not Temp
         End Select
    
         Incr H
    
         If H = 6 Then H = 1
         Waitms 5
    
    
         Return
    
    Kol5:                                                       'tablica kodow Kol1 dla pierwszej kolumny wyswietlacza - kolejnosc kodow odpowiada numerom ASCII
    
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 107 , 109 , 29 , 73 , 127,
    Data 127 , 127 , 107 , 119 , 127 , 119 , 127 , 125 , 65 , 127,
    Data 94 , 61 , 115 , 13 , 97 , 127 , 73 , 79 , 127 , 127 , 119,
    Data 107 , 127 , 95 , 89 , 64 , 0 , 65 , 0 , 0 , 0 , 65 , 0
    Data 127 , 125 , 0 , 0 , 0 , 0 , 65 , 0 , 65 , 0 , 78 , 63 , 1,
    Data 3 , 1 , 28 , 15 , 60 , 127 , 43 , 127 , 111 , 126 , 127,
    Data 125 , 0 , 113 , 113 , 113 , 119 , 103 , 0 , 127 , 125 , 0,
    Data 127 , 96 , 96 , 113 , 96 , 119 , 96 , 118 , 111 , 97 , 99,
    Data 97 , 110 , 103 , 110 , 127 , 127 , 127 , 119 , 119
    
    Kol4:
    
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 15 , 0 , 85 , 27 , 54 , 47 , 99,
    Data 62 , 119 , 119 , 122 , 119 , 124 , 123 , 58 , 94 , 60 , 62,
    Data 107 , 46 , 86 , 56 , 54 , 54 , 73 , 74 , 107 , 107 , 62 , 126,
    Data 119 , 126 , 95 , 111 , 62 , 55 , 62 , 55 , 54 , 63 , 126,
    Data 125 , 126 , 107 , 119 , 58 , 0 , 75 , 62 , 95 , 126 , 63
    Data 63 , 54 , 59 , 54 , 62 , 62 , 54 , 55 , 62 , 119 , 110 , 126,
    Data 123 , 62 , 111 , 119 , 110 , 107 , 107 , 119 , 106 , 1,
    Data 126 , 125 , 126 , 117 , 122 , 108 , 119 , 127 , 62 , 119 , 99
    
    Kol3:
    
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 6 , 127 , 107 , 0 , 119 , 42 , 31 , 93,
    Data 93 , 65 , 65 , 121 , 119 , 124 , 119 , 54 , 0 , 58 , 46 , 91,
    Data 46 , 54 , 55 , 54 , 54 , 73 , 73 , 93 , 107 , 93 , 58 , 48,
    Data 59 , 54 , 62 , , 62 , 54 , 55 , 54 , 119 , 0 , 62 , 107 , 126,
    Data 103 , 119 , 62 , 55 , 58 , 51 , 54 , 0 , 126 , 126 , 113,
    Data 119 , 120 , 54 , 62 , 96 , 62 , 63 , 126 , 95 , 106 , 110,
    Data 110 , 110 , 106 , 55 , 90 , 111 , 32 , 110 , 117 , 0 , 115,
    Data 111 , 110 , 107 , 107 , 111 , 106 , 110 , 126 , 126 , 121,
    Data 123 , 122 , 106 , 73 , 0 , 73 , 85 , 85
    
    Kol2:
    
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 15 , 0 , 85 , 108 , 93 , 127 , 62,
    Data 99 , 119 , 119 , 127 , 119 , 127 , 111 , 46 , 126 , 54 , 22,
    Data 0 , 46 , 54 , 47 , 54 , 53 , 127 , 127 , 62 , 107 , 107 , 55,
    Data 62 , 59 , 54 , 62 , 93 , 54 , 55 , 54 , 119 , 62 , 1 , 93
    Data 126 , 95 , 123 , 62 , 55 , 61 , 53 , 54 , 63 , 126 , 125 , 126,
    Data 107 , 119 , 46 , 62 , 75 , 0 , 95 , 126 , 111 , 106 , 110,
    Data 110 , 118 , 106 , 63 , 90 , 111 , 126 , 33 , 110 , 126 , 111,
    Data 111 , 110 , 107 , 115 , 111 , 106 , 126 , 125 , 125 , 126,
    Data 117 , 122 , 102 , 62 , 127 , 119 , 99 , 119
    
    Kol1:
    
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127,
    Data 127 , 127 , 127 , 127 , 127 , 107 , 91 , 92 , 122 , 127 , 127,
    Data 127 , 107 , 119 , 127 , 119 , 127 , 95 , 65 , 127 , 78 , 57,
    Data 123 , 49 , 121 , 31 , 73 , 67 , 127 , 127 , 127 , 107 , 119,
    Data 79 , 65 , 64 , 73 , 93 , 99 , 62 , 63 , 80 , 0 , 127 , 63 , 62,
    Data 126 , 0 , 0 , 65 , 79 , 66 , 78 , 57 , 63 , 1 , 3 , 1 , 28 , 15,
    Data 30 , 127 , 43 , 127 , 111 , 126 , 127 , 112 , 113 , 125 , 0,
    Data 115 , 95 , 65 , 112 , 127 , 127 , 127 , 127 , 112 , 112 , 113,
    Data 119 , 96 , 119 , 125 , 125 , 96 , 99 , 97 , 110 , 97 , 110,
    Data 127 , 127 , 127 , 119 , 119,
  • Pomocny post
    #7 6097884
    dawid512
    Poziom 32  
    Wywal opóźnienie z przerwania. Po za tym wygaszaj kolumny za każdym razem jak wchodzisz w przerwanie.
  • #8 6098965
    satanistik
    Poziom 27  
    nie zapomnij że można wybierać zmienną z tabeli inną zmienną np
    portd = kolumny(k)
    a nawet bity
    portd = kolumny(k).b
    gdzie k i b to zmienne typu byte

    Możesz więc stworzony tekst umieścić w tablicy a potem np zmieniając początkową wartość zmiennej k robić przesuwanie tekstu.
    Ogólnie żeby nie smużyło to tak:
    portb = zmienna(1)
    stan na 1 kolumnie
    czas (między przerwaniami a nie opóźnienie dodatkowe)
    0 na kolumnę 1
    portb = 0 'ważne!
    1 na kolumnę 2
    portb = zmienna (2)
REKLAMA