Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega 128A - Sterowanie wyświetlaczem tft

18 Cze 2016 16:43 936 10
  • #1 18 Cze 2016 16:43
    1542351
    Użytkownik usunął konto  
  • #2 18 Cze 2016 21:01
    JacekCz
    Poziom 36  

    Emila1994 napisał:

    ...
    Udaje mi się zaświecić wszystkie piksele w wybranym kolorze. Problem pojawia się, gdy chcę rozpocząć "rysowanie" na wyświetlaczu od zadanego punktu (np. w momencie, gdy chciałabym narysować funkcję sinus). Wyświetlacz w ogóle nie reaguje na na funkcję wadrr, piksel zaświeca się w lewym górnym rogu ekranu (w ogóle nie ma możliwości "przesuniecia" rysowania do innego miejsca na ekranie).

    Zamieszczam kod, który do tej pory napisałam.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Prosiłabym o pomoc w rozwiązaniu problemu. Może coś pominęłam i teraz nie mogę tego wyłapać z kodu.


    Wskazane przesunięcie xh = x >> 8; myslę daje zerową liczbę. Nie analizuję kodu głębiej

    0
  • #3 19 Cze 2016 10:40
    1542351
    Użytkownik usunął konto  
  • #4 19 Cze 2016 11:14
    JacekCz
    Poziom 36  

    Emila1994 napisał:
    Okazuje się, że to chyba nie jest problemem. Spróbowałam z xh = x/256; xl = x%256 i to również nie daje żadnych rezultatów.


    Nie problem z jednym operatorem, ale zamysłem funkcji.
    Co chcesz uzyskać? Argumenty są 8 bitowe (wartość 0 do 255) więc dzielenie przez 256 nie bardzo ma sens.

    0
  • #5 19 Cze 2016 11:20
    1542351
    Użytkownik usunął konto  
  • #6 19 Cze 2016 11:24
    JacekCz
    Poziom 36  

    Emila1994 napisał:
    Korzystałam z funkcji zawartych w dokumentacji, którą dołączam. Wyświetlacz ma 320x240. 240 można przedstawić na 8 bitach, ale 320 już nie, stąd zapis do części starszej i młodszej.
    Chcę po prostu odnieść się do konkretnego punktu na ekranie np. żeby narysować wykres funkcji.


    W nocie w podobnym fragmencie jest uint czyli pewnie unsigned int.

    nawiasem mówiąc funkcje są podobnie ale nie identyczne z Twoimi. Kopiując kod (czego nie jestem zwolennikiem) bez pełnego zrozumienia najmniej niebezpiecznie jest zrobić to absolutnie dokładnie.

    0
  • #7 19 Cze 2016 11:30
    1542351
    Użytkownik usunął konto  
  • #8 19 Cze 2016 11:38
    JacekCz
    Poziom 36  

    Emila1994 napisał:
    Z unsigned int również próbowałam i to nic nie zmienia. Nie mam już pomysłu co może być źle.


    Nie znam tego kontrolera i jego funkcji, Odpowiadam na poziomie języka programowania.

    Sample w nocie mają horrendalny brak stylu jak #define uint unigned int. Albo pisał je cienki programista, albo celowy zamysł aby nie było za łatwo odejść od zaplątanego kodu.

    W oryginalnej funkcji z głupoty albo świadomie.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    konwertowane są liczby 16bit na 8bit, inaczej x a inaczej y. A wcomd MUSI być z argumentem uchar, bo trick się wyłoży.
    EDIT: dlatego w nowszych językach rzutowanie dłuższego integera na krótszy musi być jawne. To jedno z miejsce gdzie C ułatwia strzelanie w stopę

    Jeśli poruszasz się po kodzie metodą strzelania, może jednocześnie zmieniłAś obie na 16bit i padło? Kopiuj dokładnie i nie zmieniaj bez głębokiego zrozumienia.

    EDIT: Co do mikroprocesorów: w/w funkcja podaje dalej argumenty, a numer rozkazu, funkcji sterownika? Nie brakuje tam czegoś?

    0
  • #9 19 Cze 2016 11:55
    1542351
    Użytkownik usunął konto  
  • #10 19 Cze 2016 12:02
    JacekCz
    Poziom 36  

    Emila1994 napisał:
    Nie. Nigdzie nie zmieniałam. Cały kod jest wyżej. Współrzędną y można przekazać bezpośrednio do wcomd bo jest na 8 bitach. Problem jest właśnie w tym x. Tu już trzeba odwoływać się do części starszej i młodszej bo x może być na 10 bitach. Próbowałam


    Kod: c
    Zaloguj się, aby zobaczyć kod



    ale nawet to nie idzie.


    To jest ewidentnie źle, co więcej sama piszesz o zakresach pixeli, sama powinnaś widzieć bezsens TEJ próby.

    Chyba każda komenda na każdy sterownik uP na świecie ma sekwencję:
    Code:
    numer_funkcji, argument, argument, argument ....

    a tu jest
    Code:
    argument, argument, argument ....


    pachnie mi że autor zamyślał waddr do czegoś innego niż my myślimy, jako jedno z sekwencji wywołań, do użycia w pewnym kontekście i tylko tak się sprawdzi. Podkreślę, kod załączony do noty uważam za niskiej jakości, i nie darzę go przesadnym zaufaniem, choć prawdopodobnie w zakresie noty chodził. Nota nie zawiera przykładu użycia waddr poza jednym kontrowersyjnym.

    1
  • #11 19 Cze 2016 19:33
    el2010tmp
    Poziom 25  

    W przykładzie masz stosowną komendę przed współrzędnymi:

    wcomd(0xa0); //display glayer1

    i oczywiście współrzędne ekranu muszą być 16-bitowe

    DS str.:7
    11. CONTROL AND DISPLAY INSTRUCTION
    czyli np.:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0