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

AtMega32 i T6963C - Problem z wyświetlaniem ikon 8x8, GLCD_FONT_WIDTH=6

jarecki1989 21 Paź 2012 10:58 2562 22
  • #1 11433691
    jarecki1989
    Poziom 24  
    Witam, mam mały problem poruszany już zresztą na forum nie raz ale nie znalazłem odpowiedniego rozwiązania. Otóż bawię się wyświetlaczem na sterowniki T6963C i wszystko ładnie pięknie działa, wyświetla mi duże obrazki i tekst ale kiedy próbuję stworzyć małą ikonę np 8x8 to wyświetla mi jakieś bzdury na ekranie. Biblioteki z jakich korzystam to oczywiście ze strony radzia tak samo jak program to robienia ikon. Nie wiem dlaczego tak się dzieje, proszę o pomoc. GLCD_FONT_WIDTH mam ustawione na 6.
  • #2 11437108
    Mundi1970
    Poziom 24  
    W dokumentacji do układu jest coś takiego:
    Note:
     In the case of the Graphics Area with 6x8 font size selected, the most significant bits
    D6 and D7 of graphics data are ignored, and not displayed on the LCD screen.

    Wydaje mi się żeby zaświeci 8 pixeli obok siebie w trybie 6x8, należy wysłać dwa bajty. Gdzie w pierwszy bajcie będzie 6 bitów ustawionych, 2 zgaszone, a w drugim bajcie 2 ustawione i 6 zgaszonych.
  • #3 11437169
    jarecki1989
    Poziom 24  
    Sęk w tym, że jak zmieniłem FONT_WIDTH na 8 wtedy by było 8x8 to też nie wyświetla ich poprawnie.
  • #5 11437477
    jarecki1989
    Poziom 24  
    Ikona:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak wywołuje funkcję:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak wygląda ta funkcja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przy wyświetlaniu grafiki np 100x80 wszystko jest ok.
  • #6 11439735
    AlphaX
    Poziom 12  
    Spróbuj linijkę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    zamienić na:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Sprawdzałem to sam7, mam trochę inne funkcje..., szerokość fonta sprzętowo ustawiona na 8. Z tego kodu co podałeś wyświetla znaczek play.
  • #7 11457003
    jarecki1989
    Poziom 24  
    Jak zmieniłem tak jak pisałeś to nic mi nie wyświetla... Nie mogę sobie również poradzić z wyświetleniem znaków z CG-ROM z dokumentacji wynika że są dwa typy 0101 i 0201, chciałbym wyświetlić znaczek stopni (0xF0) jednak na wyświetlaczu nic sie nie wyświetla. Korzystam z funkcji:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    rozumie że defChar to 0xF0 a charCode to kod tablicy CG-ROM ?
  • #9 11458562
    jarecki1989
    Poziom 24  
    adambehnke napisał:
    Korzystasz z biblioteki Radzio.. ?


    No dokładnie z nich korzystam i ani małe ikony ani znaki z CG-ROM nie chcą mi się wyświetlić
  • #10 11458574
    adambehnke
    Poziom 24  
    A czy wyświetlacz pracuje w trybie 6 bitowym? Bo jeśli tak to jeżeli rysujesz sobie własne ikony to muszą one mieć szerokość wielokrotności liczny 6 a wysokość bez znaczenia.
    Ja to robię tak:
    1.Rysuję w programie graficznym ikonę o rozmiarach np 12x24(oczywiście w trybie 1 bitowym ) i zapisuję ją jako BMP
    2.Uruchamiam konwerter graficzny ze strony Radzia , ładuję do niego tą BMP , ustawiam tryb 6 bitowy , orientację horyzontalną i zapisuję plik (bez żadnego rozszerzenia).

    3.Potem podglądam taki plik i wklejam zawartość danych do programu np:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    4. I wywołuję sobie taką ikonę w programie tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Gdzie X i Y to koordynaty na lcd a 12 i 24 to szerokość i wysokość wybranej ikony.

    Tak ja to robię i mogę ładować na lcd dowolnej wielkości ikony w dowolne miejsce na ekranie.


    Dodatkowo Radzio odpisał na forum To powinno Ciebie zainteresować Link
  • #11 11459017
    jarecki1989
    Poziom 24  
    Wrzuciłem Twój obrazek, wywołałem swoją funkcją i wyświetla mi śmieci ... Nie rozumie tego, duże grafiki wyświetla poprawnie a małych już nie.

    Z tego co podesłałeś widać, że ta funkcja zapisuje a nie odczytuje.
  • #13 11459215
    jarecki1989
    Poziom 24  
    Mój również pracuje na 6.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie wiem czemu ale przy wywoływaniu funkcji kompilator zgłasza mi warning`a, który brzmi:

    ../main.c:110: warning: implicit declaration of function 'GLCD_Bitmap'

    wywołuje funkcje jako:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    obrazek zapisany jest w ikony.h, plik jest dodany do projektu i wygenerowany za pomocą programu asystent LCD w formacie 240x128. Jednak jest o wiele mniejszy stąd te 80 i 100. Skąd bierze się ten warning ?
  • Pomocny post
    #14 11459268
    adambehnke
    Poziom 24  
    Proszę użyj mojej lekko zmodyfikowanej funkcji. Załaduj przez nią moje dane i powinno działać ok.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie bardzo rozumiem sposobu twojej konwersji pliku. Jak mozna małą ikonę konwertować do 240x128 a potem ładować ją na lcd podając jej rozmiar jako 80 i 100? Toż to nie ma najmniejszego sensu.

    Poniżej masz program którym należy konwertować pliki do takiego rozmiaru jaki ma w rzeczywistości a nie jakichś losowych i dziwnych.
  • #15 11459515
    jarecki1989
    Poziom 24  
    Dzięki wielkie !! Wreszcie jakoś sensownie to działa. Tylko mam teraz kolejny mały problem. Mianowicie moja ikona, którą wrzucam do tego programu na wysokość i szerokość 9x9 nie wyświetla mi jej oczywiście w całości tylko 6x8 co zrobić zeby była widoczna cała ?
  • #16 11459541
    adambehnke
    Poziom 24  
    Zaprojektuj ją od nowa tak aby miała szerokośc wielokrotności liczby 6. Zrób sobie np: 9x12 pikseli i po prostu po bokach ikonki zrób pionowe puste kolumny. Ja tak robię. Przyznam że zmusiło mnie to do zrobienia sobie "przyjaznych" rozmiarów ikonek ale mozna się do tego przyzwyczaić i po czasie zapominasz o niedogodnościach. Pamiętaj tylko aby podawać w funkcji dokładne rozmiary ładowanych grafik. Apropo chyba wyświetla Ci twoją grafikę jako 6x9 prawda?? Ilość wierszy jest dowolna ale szerokość musi być x*6.

    Łatwiej i bezproblemowo pracuje się kiedy lcd działa w trybie 8 bitów , nie potrzeba tylu ceregieli. Ale za to fonty są nieproporcjonalne i rozlazłe. Zatem coś za coś :) .
  • #17 11460005
    jarecki1989
    Poziom 24  
    Nie no 8 bitów odpada bo mi się nie mieści wszystko co chcę na nim zawrzeć. Teraz jeszcze tylko jak wyświetlić coś z tego CG-ROM. Udało Ci się może ?
  • #19 11476874
    AlphaX
    Poziom 12  
    W bibliotekach ze strony radzio.dxp.pl jest pewien błąd...
    Status sterownika t6963c jest sprawdzany warunkiem:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Dokumentacja od sterownika jasno mówi, że przy odczycie statusu w trybie nie "automode" bity STA0 i STA1 mają być równe 1 przed wysłaniem komendy/danych. Pętla powyżej przechodzi dalej w sytuacji, gdy którykolwiek z tych bitów jest równy 1.
    U mnie się to objawiało tym, że funkcje operująca na bitach -> BIT SET/RESET nie działały poprawnie i na lcd pojawiały się czasem krzaczki. Inne funkcje działały niby poprawnie ale musiałem z opóźnieniami eksperymentować.
  • #20 11525467
    jarecki1989
    Poziom 24  
    Kolego adambehnke to co jest napisane na podanej przez Ciebie stronie działa. Jeżeli np narysuje znak stopni zapisze go do pamięci i będę odczytywał to wszystko jest ok. Tylko po co zapisywać coś do pamięci skoro wg noty katalogowej znaczek stopni już jest w pamięci CG-ROM pod adresem 0x7F tylko jak go wywołać np z pozycji funkcji sprintf?
  • #22 11526536
    jarecki1989
    Poziom 24  
    Mój wyświetlacz oparty jest na sterowniku SAP1024B i w tablicy 0201 jest znaczek stopni ale nie mogę go odczytać
REKLAMA