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

Wyswietlacz LCD na LC7582- jak wysterować??

mazomen 10 Lip 2009 12:58 3490 19
  • #1 6762096
    mazomen
    Poziom 16  
    Witam wszystkich.
    Posiadam zestaw sześciu wyświetlaczy LCD na LC7582 prawdopodobnie wymontowane z jakiejś ładowarki akumulatorków gdyż po podłączeniu zasilania na chwile ukazały mi się wszystkie możliwe segmenty (napisy: discharge, charge, condition, ready, bat.fault, analyze do tego jeszcze pola wyświetlające mAh i V) wiec mam pewność że są sprawne (tak przypuszczam :p). Wyświetlacz posiada jeszcze trzy piny:CE, CLK i DATA.
    Chciałbym wykożystać je praktycznie przy budowie własnej ładowarki lecz niewiem jak sterować nimi przy pomocy mikroprocesora np: ATMEGA8. Programuje w Bascom-ie. Bardzo proszę o pomoc
  • #2 6762118
    wdogli
    Poziom 18  
    Witam.
    W załączeniu datasheet . Tam jest wszystko
    Link
  • #3 6762210
    mazomen
    Poziom 16  
    Nic nie czaje z tej karty katalogowej (słaba znajomosc języka angielskiego :( )
  • #4 6762240
    wdogli
    Poziom 18  
    Więc poczytaj trochę na temat interfejsu I2C
    DATA- linia danych,
    CLK - linia sygnału taktującego,
    CE - wybór urządzenia (stanem wysokim)
  • #5 6762283
    mazomen
    Poziom 16  
    dzięki wdogli napewno poczytam :)

    A ma ktoś może kawałek kodu w bascomie do obsługi tego typu wyświetlaczy?
  • #6 6888925
    mazomen
    Poziom 16  
    Sterował już ktoś kiedyś takim wyświetlaczem w bascomie ?
  • #7 6889133
    Mat_91
    Poziom 25  
    Nie zaglądałem do datasheet'a ale jeżeli tam jest I2C tak jak pisze kolega wdogli to w czym Ty widzisz jakiś problem?;> Opis I2C masz w helpie do bascoma, reszta w datasheet- bez angielskiego ani rusz przyjacielu:)
  • #8 6890234
    mazomen
    Poziom 16  
    Problem w tym że to nie jest I2C. Komunikacja przebiega w jedna stronę i trzeba wysłać ciąg bitów zapalających i gaszących odpowiednie punkty wyświetlacza. Niestety nie wiem jak napisać program do jego obsługi (taktowanie wyświetlacza i wysyłanie ciągu)
  • #9 6891583
    Marczeli_P
    Poziom 20  
    Sterowanie jest banalnie proste. Sygnalem CE uaktywniasz ukad a potem kolejno taktujc sygnalem zegarowym CLK podajesz kolejne wartoci bitow (D1-D53) nastepnie bit DP i DQ i to zakanczasz zerem. Kolejne bity odpowiadaja za zapalenie segmentow wyswietlacza. Ostatnia faza jest podanie 0 na CE celem dezaktywowania ukladu.
  • #10 6892031
    mazomen
    Poziom 16  
    Podejrzewam że mój wyświetlacz pracuje na 112 bitach ponieważ naliczyłem u niego 61 segmentów. Czy w takim razie mogę niewykorzystane bity wyzerować ? Do czego służy bit DQ ? A w jaki sposób kolega zrealizował by podawanie tych kolejnych bitów ( ja używam Bascoma) ?
  • #11 6892076
    Mat_91
    Poziom 25  
    A co kolega ma z tym bascomem? Język tu nie ma żadnego znaczenia. Definiujesz sobie 2 piny jako wyjścia, jeden jako zegar drugie jako dane. I teraz tylko patrzysz na wykresy w datasheet. Jak zegar=0 ustawiasz lub zerujesz bit danych, czekasz, i ustawiasz zegar, w tym momencie następuje zapis. Powtarzasz to tyle razy aż zapiszesz wszystkie potrzebne Ci bity.

    Bit DP służy do wyboru transmisji.
    1- 1/2 duty
    0- 1/1 duty

    Bit DQ to "AD, DSP function select bit".
    Opis masz na stronie 4 w datasheet podanym w drugim poście.
  • #12 6892156
    mazomen
    Poziom 16  
    Chodzi o to że nie bardzo wiem jak przechowywać te poszczególne bity, czy pojedynczo w zmiennych bitowych czy jakoś razem w bardziej pojemnych zmiennych (i jak je potem zapisywać i odczytać przed podaniem na wyswietlacz
  • #13 6892251
    wdogli
    Poziom 18  
    Napisz co chcesz zrobić. Rodzaj zmiennej dobierasz w zależności od tego co chcesz zrobić.
  • #14 6892892
    mazomen
    Poziom 16  
    Chcę użyć ten wyświetlacz do ładowarki akumulatorków lub akumulatorów ołowiowych. Wyświetlacz ma pole do wyświetlania przekazanego ładunku (liczba 4-ro cyfrowa) oraz napięcia (liczba 2 cyfrowa + jedno miejsce po przecinku). Jak mając np. pomiar napięcia przekazać go razem z pozostałymi bitami do wyświetlenia? Jak podzielić zawartość zmiennej na poszczególne bity? Niestety nie wiem jeszcze które bity odpowiadają za wyświetlenie danego segmentu.
  • #15 6892920
    Mat_91
    Poziom 25  
    No to skoro naliczyłeś u niego 61 segmentów zrób sobie w ogóle funkcje która wyśle cokolwiek do tego lcd- może być nawet pętla która będzie ustawiała odpowiednio piny. Łącznie z bitem DQ, DP i wymaganym bitem 0 będziesz miał 64 powtórzenia pętli. Dzięki temu sprawdzisz który bit odpowiada za który segment.

    Co do podziału zmiennej na poszczególne bity będziesz musiał wczytać się w helpa do bascom'a ewentualnie poszukać na forum czy już o tym nie było.
  • #16 6893002
    mazomen
    Poziom 16  
    A jeśli segmenty których nie będę używał znajdą się za 53 bitem to można pominąć wysyłanie drugiej części ciągu bitów?
  • #17 6895242
    wdogli
    Poziom 18  
    Hej
    Najpierw napisz coś żebyś wiedział czy ten wyświetlacz działa czy nie a potem będziesz się zastanawiał czy wysyłać całość czy tylko część danych. Po prostu zrobisz testy.
    Pozdrawiam
  • #18 7784642
    mazomen
    Poziom 16  
    Witam.
    Odnawiam temat gdyż po długiej przerwie znowu postanowiłem zmierzyć się z tym wyświetlaczem na Lc7582 . I udało się :D
    Określiłem już pozycję każdego segmentu.
    Program pisany w Bascomie wielokrotnie zmieniałem upraszczając go i zmniejszając program wynikowy. I tu spotkała mnie niemiła niespodzianka. Próbując usunąć wcześniej zadeklarowaną zmienną (a w sumie 3 takie zmienne) której już nigdzie nie używam program się sypie i na wyświetlaczu widać dziwne krzaki. Wielokrotnie przeglądałem program i nigdzie nie widzę błędu. Nazwy tych zmiennych mogę zmieniać bez "buntu" wyświetlacza lecz usunąć nie mogę.

    Są to zmienne jednosci dziesiatki setki w kodzie poniżej:

    
    $regfile = "attiny2313.dat"                                 '
    $crystal = 4000000
    $lib "bcd.lbx"
    $external Bin2bcd16
    Declare Function Bin2bcd16(binval As Word) As Word
    
    
    Config Pind.2 = Output : Pind.2 = 0
    Config Pind.3 = Output : Pind.3 = 0
    Config Pind.4 = Output : Pind.4 = 0
    Config Pinb.7 = Output : Pind.7 = 0
    
    Dat Alias Portd.2                                           'linia danych
    Clk Alias Portd.3                                           'linia zegarowa
    Ce Alias Portd.4                                            'zezwolenie transmisji
    
    Dim Petla As Byte , Dane(10) As Byte
    Dim Jenosci As Byte , Dziesiatki As Byte , Setki As Byte
    Dim Tysiace As Byte
    Dim Dziesietnev As Byte
    Dim Pom As Word
    Dim B As Word , Mah As Word , V As Byte
    V = 183 : Mah = 1234
    Do
    Gosub Przelicz
    Gosub Wyswietlanie
    Waitms 10
    Loop
    End
    
    Przelicz:
    B = Mah
    Pom = Bin2bcd16(b)
    Dane(2) = Pom And &B0000000000001111
    Shift Pom , Right , 4
    Dane(4) = Pom And &B0000000000001111
    Shift Pom , Right , 4
    Dane(6) = Pom And &B0000000000001111
    Shift Pom , Right , 4
    Tysiace = Pom And &B0000000000001111
    
    B = V
    Pom = Bin2bcd16(b)
    Dziesietnev = Pom And &B0000000000001111
    Shift Pom , Right , 4
    Dane(5) = Pom And &B0000000000001111
    Shift Pom , Right , 4
    Dane(7) = Pom And &B0000000000001111
    
    Dane(2) = Lookup(dane(2) , Tabela)                          'jednosci mah
    Dane(4) = Lookup(dane(4) , Tabela)                          'dziesiatki mah
    Dane(6) = Lookup(dane(6) , Tabela)                          'setki mah
    Tysiace = Lookup(tysiace , Tabela)                          'tysiace mah
    'Dane(3) = Lookup(dane(3) , Tabela)
    Dziesietnev = Lookup(dziesietnev , Tabela)                  'dziesietne V
    Dane(5) = Lookup(dane(5) , Tabela)                          'Jednosci V
    Dane(7) = Lookup(dane(7) , Tabela)                          'dziesiatki V
    
    If Dane(7) = 123 Then Dane(7) = 0                           'jesli dziesiatki v = 0 to wygas segmenty dziesiatek
    
    Dane(3) = Dziesietnev
    
    Dane(8).0 = Tysiace.0
    Dane(8).1 = Tysiace.1
    Dane(8).6 = Tysiace.2
    Dane(8).7 = Tysiace.3
    Dane(9).0 = Tysiace.4
    Dane(9).1 = Tysiace.5
    Dane(9).2 = Tysiace.6
    
    Dane(8).3 = 1
    Dane(3).7 = 1                                               'kropka V
    Dane(1).6 = 1                                               'znak V
    Dane(1).7 = 1                                               'znak mAh
    Return
    
    Wyswietlanie:
    Reset Clk : Reset Dat                                       'wyzeroj dla pewnosci
    Set Ce                                                      'rozpoczecie transmisji
    For Petla = 6 To 117                                        'wyslij 112 bitow
    Dat = Dane(1).petla
    Set Clk                                                        'ustaw taktowanie            
    Reset Clk                                                   'wyzeruj taktowanie
    If Petla = 61 Then Reset Ce : Set Ce                        'jesli wyslalo polowe to wyzeruj i ustaw ce
    Next
    Reset Ce
    
    Tabela:
    Data 123 , 10 , 55 , 47 , 78 , 109 , 125 , 11 , 127 , 111
    


    Program sypie się również gdy próbuję bezpośrednio do trzeciego bajtu zmiennej tablicowej Dane (do dane(3) ) wpisać wartość z tabeli. Pozostałe bajty tej zmiennej bez problemu akceptują te operację. Program pokazany wyżej działa dobrze ale jak wprowadzę wymienione wcześniej zmiany wszystko psują choć nie powinny. Nie wiem czy to wina kompilatora czy czego.
    Wie ktoś o co chodzi?
    Prosze o pomoc :cry:
  • #19 8000549
    niutaki42
    Poziom 10  
    Sory że odgrzebuje temat ale jestem w posiadaniu podobnego wyświetlacza i mam problemy z jego odpaleniem. Mazomen czy udało ci się nakłonić go w końcu do współpracy? Też używam Bascoma więc czy mógłbyś zarzucić jakimś kawałkiem kodu?
  • #20 8000721
    mazomen
    Poziom 16  
    Witam.
    Tak udało mi się okiełznać ten wyświetlacz jednak jedna uwaga to to że zamiast 112 bitów z niewiadomych przyczyn muszę wysyłać 116 gdyż inaczej program idzie w "krzaki".
    
    '////////////////////////////////////////////////////////////////////
    '////////////   STEROWANIE WYSWIETLACZEM NA LC7582   ////////////////
    '////////////////////////////////////////////////////////////////////
    
    
    
    $regfile = "attiny2313.dat"                                 '
    $crystal = 8000000
    $lib "bcd.lbx"
    $external Bin2bcd16
    Declare Function Bin2bcd16(binval As Word) As Word
    
    Config Pind.2 = Output : Pind.2 = 0
    Config Pind.3 = Output : Pind.3 = 0
    Config Pind.4 = Output : Pind.4 = 0
    
    Dat Alias Portd.2                                           'linia danych
    Clk Alias Portd.3                                           'linia zegarowa
    Ce Alias Portd.4                                            'zezwolenie transmisji
    
    
    Dim Mah As Word , Napiecie As Word , Pom As Word
    Dim Petla As Byte , Dane(16) As Byte
    Napiecie = 16 : Mah = 1234                                  'opcjonalnie
    
    Do
    Gosub Przelicz : Gosub Wyswietlanie
    Waitms 100
    Loop : End
    
    Przelicz:
    Pom = Mah : Pom = Bin2bcd16(pom)
    Dane(2) = Pom And &B0000000000001111                        'wyodrebnij jedności mAh
    Shift Pom , Right , 4 : Dane(4) = Pom And &B0000000000001111       'dziesiatki mAh
    Shift Pom , Right , 4 : Dane(6) = Pom And &B0000000000001111       'setki mAh
    Shift Pom , Right , 4 : Dane(9) = Pom And &B0000000000001111       ''tysiace mAh
    
    Pom = Napiecie : Pom = Bin2bcd16(pom)
    Dane(3) = Pom And &B0000000000001111                        'dziesiętne V
    Shift Pom , Right , 4 : Dane(5) = Pom And &B0000000000001111       'jednosci V
    Shift Pom , Right , 4 : Dane(7) = Pom And &B0000000000001111       'dziesiątki V
    
    Dane(2) = Lookup(dane(2) , Tabela)                          'wczytaj z tabeli jednosci mah
    Dane(4) = Lookup(dane(4) , Tabela)                          'dziesiatki mah
    Dane(6) = Lookup(dane(6) , Tabela)                          'setki mah
    Dane(9) = Lookup(dane(9) , Tabela)                          'tysiace mah
    Dane(8) = Dane(9)                                           'tak ma byc
    Dane(3) = Lookup(dane(3) , Tabela)                          'dziesietne V
    Dane(5) = Lookup(dane(5) , Tabela)                          'Jednosci V
    Dane(7) = Lookup(dane(7) , Tabela)                          'dziesiatki V
    If Dane(7) = 123 Then Dane(7) = 0                           'jesli dziesiatki V = 0 to wygas cyfre dziesiatek
    
    Dane(16) = 2                                                'w dane(16).1 wymagane 1
    Dane(8).3 = 1                                               'wymagane 1
    Dane(8) = Dane(8) And 223                                   'to samo co Dane(8).5 = 0 -wymagane
    Dane(3).7 = 1                                               'kropka V
    Dane(1).6 = 1                                               'znak V
    Dane(1).7 = 1                                               'znak mAh
    Return
    
    Wyswietlanie:
    Set Ce                                                      'rozpoczecie transmisji
    For Petla = 6 To 121                                        'wyslij 112 bitow
    Dat = Dane(1).petla                                         'ustaw znak
    Set Clk : Reset Clk                                         'ustaw taktowanie i wyzeruj taktowanie -wpisz znak
    If Petla = 61 Then Reset Ce : Set Ce                        'jesli wyslalo polowe to wyzeruj i ustaw ce
    Next
    Reset Ce                                                    'koniec transmisji
    Return
    
    Tabela:
    Data 123 , 10 , 55 , 47 , 78 , 109 , 125 , 75 , 127 , 111
    


    Program ten w AtTiny2313 zajmuje 38% pamięci i nie mam pomysłu na jeszcze większe odchudzenie programu.
    Powyższy program realizuje tylko obsługę cyfrowego wyświetlania dwóch wartości (pojemności oraz napięcia)
    Jeśli nie posiadasz takiego samego wyświetlacza jak ja to z tego programu możesz wykorzystać tylko koncepcję. Sam musisz określić metodą prób kolejność poszczególnych bitów
REKLAMA