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

Błąd w wyświetlaniu grafiki na KS0108 - funkcja i tablica picture

squelch 17 Cze 2017 17:38 966 7
REKLAMA
  • #1 16535290
    squelch
    Poziom 11  
    Witam napisałem prostą funkcję wyświetlającą grafikę
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    całą grafikę zapakowałem do tablicy picture grafikę wygenerowałem sobie za pomocą pixel factory(w tym programie zaznaczyłem opcję vertical)

    Jednak na wyświetlaczu są jakieś śmieci i głupstwa, widzicie może jakiś błąd ?
  • REKLAMA
  • #2 16535803
    kamyczek
    Poziom 38  
    Ten wyświetlacz to dwa wyświetlacze 64*64 piksele więc trzeba dopasować w programie format tablicy do programu który obsługuje . Inna opcja to poprawić program obsługi wyświetlacza żeby chciał prawidłowo wyświetlić to co jest w tym formacie . Większość programów generujących takie kody ma możliwość ustawienia w opcjach różnych konfiguracji można więc zmieniać parametry i wgrywać do skutku aż pokaże się obrazek ;)
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #4 16538412
    Sparrowhawk
    Poziom 22  
    To spróbuj sobie wygenerować jakiś prostszy obrazek, np. prostokąt.

    Po co Ci w drugiej pętli zmienna 'k', skoro w jej miejsce może być użyta zmienna 'd' ?
    squelch napisał:
    wywołuję funkcję która za pomocą zewnętrznych wsp. lcd(tj. GLCD_x,GLCD,y) uaktywnia wybrany kontroler.
    Ale wywołujesz ją raz na 128 zapisów ;-)
  • #5 16543565
    squelch
    Poziom 11  
    Witam

    Przepraszam że tak długo nie odpisywałem. GLCD_putchar wywołuje funkcję Write_data która kontroluje wskaźnik x i włącza drugi kontroler jak przekroczy granicę.

    Cytat:

    Ale wywołujesz ją raz na 128 zapisów


    Tak goto wywołuje a potem ciurkiem ładuje 128 bajtów a Write_data kontroluje x i w zależności od niego włącza dany kontroler.

    Cytat:

    Po co Ci w drugiej pętli zmienna 'k', skoro w jej miejsce może być użyta zmienna 'd' ?

    bo d zlicza od 0 do 128 ciągle , a k od 0 do rozmiaru tablicy tak żeby wysłać każdy bajt

    Pozdrawiam

    Dodano po 6 [minuty]:

    Poprawiłem mały błąd jednak kod dalej nie działa chodzi o linię
    GLCD_putchar ta funkcja wysyła znak asc2 do ks0108 więc tam powinno być tylko wysłanie bajtu czyli
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jednak na wyświetlaczu widać tylko jakieś bzdury.

    Dodano po 37 [minuty]:

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


    pojawia się 8 linii czyli dobrze nie wiem co jest z tą grafiką czemu nie działa?
  • REKLAMA
  • Pomocny post
    #6 16544078
    Sparrowhawk
    Poziom 22  
    A w jakiej pamięci przechowujesz tablicę picture[k]? RAM czy FLASH?
  • #7 16544770
    squelch
    Poziom 11  
    Bardzo dobra uwaga kol. Sparrowhawk, tablica została wygenerowana przez pixel factory z atrybutem PROGMEM a dostęp do jej bajtów nie może odbywać się tak picture[k] tylko przez te funkcje pgm_read_byte. Nie napisałem tych funkcji więc wydaje mi się że tablica została umieszczona w ram i przepełniłem ram(dobrze kumam?). Zmieniłem def. tablicy na __flash a nie PROGMEM. Ruszyło wielkie dzięki kol. Sparrowhawk za pomoc.
  • Pomocny post
    #8 16544815
    Sparrowhawk
    Poziom 22  
    squelch napisał:
    Nie napisałem tych funkcji więc wydaje mi się że tablica została umieszczona w ram i przepełniłem ram(dobrze kumam?).
    Nie ;-)

    Tablica była umieszczona w pamięci FLASH (makro PROGMEM), jednakże powoduje to, że do tak zdefiniowanych zmiennych nie można odnosić się w sposób bezpośredni, tylko z poprzez odpowiednie makra: pgm_read*, które są zdefiniowane w pliku <avr/pgmspace.h>.
REKLAMA