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

Bascom 8.3 i LCD KS108 128x64 - konflikt grafiki z tekstem, jak to naprawić?

jacynka84 16 Sty 2007 20:31 3280 12
REKLAMA
  • #1 3450673
    jacynka84
    Poziom 26  
    Posty: 1170
    Pomógł: 13
    Ocena: 29
    Proste gdzieś już przeczytałem że Grafika gryzie się z textową zawartością ekranu - czy to się da jakoś naprawić ? zaprogramowałem z wersji Demo Bascom 8.3 Lcd KS108 128x64 programem w której zmienna Line jest wyświetlana zależnie od zmiennej , jak dojdzie do końca swojego zakresu ,
    zawartość textowa wyświetlana razem z grafiką pierniczy sie totalnie ,jakby
    wszystko wrzucił do miksera. Czy istnieje na to jakaś łata czy rada?
    Wiem że bascom do miszczóf nie należy ale na razie sie dopiero uczę C.
  • REKLAMA
  • #2 3457508
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Cytat:
    Grafika gryzie się z textową zawartością ekranu

    Ten kontroler nie rozróźnia grafiki i tekstu. Dla niego jest ważny bajt do wyświetlenia bezpośrednio na Lcd'ku (jak 0 to zgaś, jak 1 to zapal) . Mam go oprogramowanego w C (128x64) i śmiga aż miło :).
    Nawet proste GIF'y wyświetla (tyle że dużo pamięci trzeba) :)
  • #3 3459191
    jacynka84
    Poziom 26  
    Posty: 1170
    Pomógł: 13
    Ocena: 29
    Cytat:
    Ten kontroler nie rozróźnia grafiki i tekstu

    Więc czemu sie psuje ?
  • REKLAMA
  • #4 3459268
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Żle zaimplementowane funkcje, złe wykorzystanie zasobów uP itd.
    Poprostu problem tkwi w oprogramowaniu bo skoro wyświetla linie i text osobno to strona sprzętowa jest OK. Ja Ci w Bascomie nie pomogę, umieść główne funkcje wyświetlające to może ktoś Ci doradzi albo ucz sie szybciej C :) i wtedy służe pomocą.
  • #5 3464527
    jacynka84
    Poziom 26  
    Posty: 1170
    Pomógł: 13
    Ocena: 29
    Właściwie nigdy sie nie zastanawiałem , czy inne języki jak C da się połączć z Bascom'em ? czy tylko Asm. ?
  • #6 3465235
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Nie da się miksować C i bascoma
  • #7 4093615
    jacynka84
    Poziom 26  
    Posty: 1170
    Pomógł: 13
    Ocena: 29
    Nadal mam taki problem że jak ta linia prostego
    pseudo-oscyloskopu "dojdzie" do połowy ekranu , to
    ekran się "łamie" na pół i ta linia zaczyna iść zamiast
    dołem normalnie to skacze na samą górę , bez powodu!
  • #8 4093725
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Jak nie wiesz co jest nie tak to odpowiedź brzmi bascom ... Napisz sobie to w asemblerku lub c i daj sobie spokój z bascomem
  • REKLAMA
  • #9 4093758
    jacynka84
    Poziom 26  
    Posty: 1170
    Pomógł: 13
    Ocena: 29
    Nie mam zamiaru pałować się z Asemblerem , a C niestety jeszcze nie umiem.
    Ponadto byłoby głupio trochę uczyć się tych języków dla rozwiązania paru drobiazgów...
  • REKLAMA
  • #10 4094318
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Przez te pół roku już dawno miałbyś po problemie gdybys przesiadł się na C :wink:
    Cytat:
    Ponadto byłoby głupio trochę uczyć się tych języków dla rozwiązania paru drobiazgów

    Czasami właśnie te parę drobiazków zajmują tyle czasu, że dopiero wtedy głupio jest jak się tego nie uda zrobić :wink: .
  • #11 4094627
    andrzejek23
    Poziom 19  
    Posty: 314
    Pomógł: 21
    Ocena: 146
    To nie jest kwestia Bascom czy C, po co te kłótnie? Procedury są prawie takie same, a różnica jest tylko w składni. Kolega prawdopodobnie użył gotowej biblioteki do obsługi tego lcd. Ja sobie napisałem obsługę lcd na KS0108 sam i też w Bascomie i śmiga aż miło. I nie gryzie się grafika z textem, pod warunkiem, że najpierw wyświetlam tekst, a na nim grafikę - tak było mi prościej.
    Jeśli się mylę, to niech kolega Jacynka84 wrzuci swoje procedury obsługi to pomyślimy razem co z tym zrobić.
  • #12 4094917
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    A jakby oprogramowanie napisał w linux'ie to już zupełnie samo by chodziło...
    Zwalanie krzaczenia lcd'ka na język to próba wykazania wyższości świąt Bożego Narodzenia nad świętami Wielkiej Nocy - bzdura.
    jacynka84:
    Nie wiem czy próbujesz wykorzystywać jakieś biblioteki do KS'a, jeśli tak to daruj sobie taką pomoc. Ten lcd nie przyjmuje danych jako textowe lub graficzne ponieważ nie ma zaimplementowanego generatora znaków. Cokolwiek próbujesz wyświetlić to zawsze jest tak naprawdę pionowa kreska 1x8 pixeli. Wynika z tego, że chcąc wyświetlić text musisz umieścić w programie tablice danych dla każdej litery i (najlepiej) tablice danych dla grafiki. Przemyślane gospodarowanie przestrzenią wyświetlacza gwarantuje, że nawet wyświetlając text na tle obrazka zostanie zamazany tylko jego fragment w miejscu gdzie aktualnie pojawia się napis. Należy pamiętać, że po wysłaniu danych do rejestru lcd, jego licznik zwiększa automatycznie adres pozycji Y o jeden. Więc jeśli pozostawisz jakąś wartość na porcie danych i przytrzaśniesz ENA to zostanie to wrzucone na lcd'ka. Dlatego istotna jest kolejność wystawiania sygnałów RS, R/W i ENA szczególnie po wysłaniu ostatniego bajtu danych.
    Ja zrobiłem to tak:
    Sub Posit
       Reset Rs
       Reset Rw
       Set Ena
          Waitus 5                                              ' Delay
       Porta = Y
       Reset Ena
          Waitus 5                                              ' Delay
       Set Ena
       Porta = X
       Reset Ena
          Waitus 5                                              ' Delay
       Porta = 0
       Set Ena
       Return
    End Sub
    
    Sub Marksend
       Call Posit
       Set Rs
       For Count = 1 To Ends                             
          Read Dane
          Porta = Dane
          Reset Ena
             Waitus 5                                           ' Delay
          Set Ena
          If Wireflag = 4 Then
             Temp = Ends
          Elseif Wireflag = 5 Then
             Temp = Ends / 3
             If Count > 16 Then
                Temp = Ends - 16
             End If
          Elseif Wireflag = 7 Then
             X = X - 1
             Reset Rs
             Porta = X
             Reset Ena
                Waitus 5
             Set Ena
             Set Rs
          Else
             Temp = Ends / 2
          End If
          If Count = Temp Then
             Y = Y + 1
             Set Rw
             Reset Ena
             Call Posit
             Set Rs
          End If
       Next Count
       Count = 1
       Temp = 0
       Return
    End Sub

    Procedura Posit ustala położenie "kursora" w danej połówce lcd, a Marksend wysyła dane z tablic do wyświetlacza.
    Zmienna Wireflag ustala w ilu liniach wyświetlany będzie znak/obraz, Na jej podstawie wyliczany jest moment zmiany linii lcd o 1 w związku z długością tablicy danych wyrażoną zmienną Ends.
    Jak widać da się to zrobić nawet w durnym Bascomie...
    Pzdr.
  • #13 4096791
    jacynka84
    Poziom 26  
    Posty: 1170
    Pomógł: 13
    Ocena: 29
    Używam normalnej biblioteki bascom'a , ponadto problem został już rozwiązany.
    Chodziło o to że oscyloskop był wywoływany "goto (Sub)" , jak go wywoływałem z przycisku to były ten błąd , jak teraz jest od razu w podprogramie bez potrzeby naciskania przycisku to działa...

    a teraz mam jeszcze gorszy problem.
    Mianowicie nie wiem jak pogodzić częstotliwość próbkowania z częstotliwością wyświetlania wyników.
    Żeby LCD był czytelny trzeba go zatrzymać na ok 30 milisekund , a przecież ADC ma co najmniej kilka khz odświeżania! wiek ktoś jak to załatwić aby wyświetlanie szło swoją drogą a zbieranie danych z ADC swoją ?

Podsumowanie tematu

✨ Dyskusja dotyczy problemu konfliktu wyświetlania grafiki i tekstu na wyświetlaczu LCD KS108 128x64 programowanym w Bascom 8.3. Kontroler LCD nie rozróżnia danych tekstowych od graficznych, wyświetla bajty bezpośrednio jako piksele, co wymaga odpowiedniego zarządzania pamięcią i danymi w oprogramowaniu. Problemy z "gryzieniem się" grafiki i tekstu wynikają z błędnej implementacji funkcji wyświetlania oraz niewłaściwego zarządzania buforem ekranu. Rozwiązaniem jest odpowiednia kolejność wyświetlania (najpierw tekst, potem grafika) oraz precyzyjne sterowanie adresowaniem pamięci LCD. Autor problemu rozwiązał błąd związany z wywoływaniem podprogramu oscyloskopu przez "goto (Sub)" – zmiana wywołania na bezpośrednie uruchomienie podprogramu wyeliminowała problem. Wskazano również trudności z synchronizacją częstotliwości próbkowania ADC i odświeżania wyświetlacza, gdzie konieczne jest zatrzymanie LCD na około 30 ms, podczas gdy ADC działa z kilkukilku kHz. Zalecane jest rozdzielenie procesów zbierania danych i wyświetlania, co wymaga odpowiedniego zarządzania czasem i programem. Wskazano, że Bascom ma ograniczenia i dla bardziej zaawansowanych rozwiązań lepsze są języki C lub asembler, jednak autor preferuje pozostać przy Bascomie ze względu na naukę i prostotę. Podkreślono, że nie można mieszać kodu Bascom i C. Wskazano, że biblioteki do KS108 często wymagają własnych tablic znaków i grafiki, gdyż kontroler nie posiada generatora znaków.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA