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

[ATmega16] + ICM7228A wysterowanie [bascom]

morock 04 Paź 2009 16:50 1145 0
REKLAMA
  • #1 7090166
    morock
    Poziom 12  
    Wpadł mi do ręki układ ICM 7228 AIPI z czterema wyświetlaczami 7 segmentowymi led
    układ ten może wysterować 8 wyświetlaczy.

    niestety nie znalazłem nigdzie opisu jak mógłbym to coś wysterować, na ślepo starałem się sam do tego dojść, i zajęło mi to naprawdę kilka godzin dłubania.

    przedstawiam efekt mojej pracy, może komuś oszczędzę tego czasu który sam w to włożyłem.

    jak na razie wysterowanie odbywa się szeregowo, bez kodowania, być może w przyszłości rozgryzę jeszcze także kodowanie.

    link do pdf-a

    program napisany w bascomie
    
    
    ' obsługa układu icm7228
    $regfile = "m16def.dat"
    $crystal = 16000000
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               'default use 10 for the SW stack
    $framesize = 40                                             'default use 40 for the frame space
    
    Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7       'standard
    Config Lcd = 16 * 2
    
    
    'podłączenie układu icm 7228A
    ' Port A pin 7 - write
    '            6 - mode
    '
    ' Port B pin 0 - ID0
    '            1 - ID1
    '            2 - ID2
    '            3 - ID3
    '            4 - ID4  shutdown *H - normalna praca L - wyłączony
    '            5 - ID5  decode *H - bez dekodowania L - z dekodowanie
    '            6 - ID6  wybór kodowania (ważny tylko dla trybu z dekodowaniem) H-hex L-code B
    '            7 - ID7  Data Coming *H - wgranie danych L - bez wgrywania danych
    
    'ten program wykorzystuje wprowadzanie danych bez dekodowania czyli ID0-ID7 odpowiadają
    'po kolei segmentom wyświetlacza, za każdym razem jak na WR pojawia stan H do następnego segmentu wrzucane są dane liczby
    
    ' dane do cyfr:
    '  0  11111011
    '  1  10110000
    '  2  11101101
    '  3  11110101
    '  4  10110110
    '  5  11010111
    '  6  11011111
    '  7  11110000
    '  8  11111111
    '  9  11110111
    '  A  11111110
    '  b  10011111
    '  C  11001111
    '  d  10111101
    '  E  11001111
    '  F  11001110
    '  -  10000100
    '  H  10111110
    '  L  10001011
    '  P  11101110
    '  blank 10000000
    
    ' kropkę inicjujemy wpisując 0 w pierwszym bicie (przykładowo &B01111111 - efekt zapalenie wszystkich segmentów)
    
    Display On
    Cursor Off
    Cls
    Lcd "do dziala  "
    Wait 1
    Ddra = 255                                                  ' wprowadzenie portu A jako port wyjściowy
    Ddrb = 255                                                  ' wprowadzenie portu B jako port wyjściowy
    Wait 1
    Cls
    Do
    Lcd "pierwsze"
    Porta = &B01000000                                          ' mode na H, WR na L (stany wyjściowe)
    Portb = &B10110000                                          ' Wpisanie parametrów wczytania danych (opis wyżej zaznaczony *)
    Porta = &B11000000                                          ' WR - H wpisanie wartości
    Waitms 1
    
    'pierwszy segment wpisujemy 4
    Porta = &B00000000                                          ' przygotowanie do wprowadzenia danych
    Portb = &B10110110                                          ' wprowadzenie danych cyfry 4
    Porta = &B10000000                                          ' wpisanie danych do pamięci
    Waitms 1
    
    
    'następny segment wpisujemy 3
    Porta = &B00000000
    Portb = &B11110101
    Porta = &B10000000
    Waitms 1
    
    
    '2
    Porta = &B00000000
    Portb = &B11101101
    Porta = &B10000000
    Waitms 1
    
    
    '1
    Porta = &B00000000
    Portb = &B10110000
    Porta = &B10000000
    Waitms 1
    
    
    'pozostałe 4 segmenty czyste
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    'po wpisaniu wszystkich znaków układ sam je wyświetli na wszystkich segmentach
    ' oraz podtrzyma świecenie wszystkich do czasu wpisania nowych danych
    
    
    Wait 2
    
    Cls
    
    Lcd "drugie"
    Porta = &B01000000
    Portb = &B10110000
    Porta = &B11000000
    Waitms 1
    
    
    '9
    Porta = &B00000000
    Portb = &B11110111
    Porta = &B10000000
    Waitms 1
    
    
    '7
    Porta = &B00000000
    Portb = &B11110000
    Porta = &B10000000
    Waitms 1
    
    
    '6
    Porta = &B00000000
    Portb = &B11011111
    Porta = &B10000000
    Waitms 1
    
    
    '5
    Porta = &B00000000
    Portb = &B11010111
    Porta = &B10000000
    Waitms 1
    
    
    'reszta segmentów czysta
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    
    Porta = &B00000000
    Portb = &B00000000
    Porta = &B10000000
    Waitms 1
    
    
    Wait 2
    Cls
    
    Loop
    
    


    Jeśli macie mnie krytykować to lepiej nic nie piszcie :P
  • REKLAMA
REKLAMA