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] Wyświetlacz graficzny i pliki *.bgf + karta SD

adambehnke 16 Gru 2009 07:16 4644 3
REKLAMA
  • #1 7395615
    adambehnke
    Poziom 24  
    Witam
    Interesuje mnie mozliwość załadowania na wyświetlacz graficzny obrazków.
    Co do bascomowego formatu BGF to nie ma problemu. Ale bardzo ogranicza mnie pamięć mikrokontrolera.W moim przypadku Atmega 2560.
    Mam uruchomioną obsługę karty SD i chciałbym z niej móc pobierać i wyświetlać obrazki w podobny sposób jak z pamięci procka.
    Owszem nie musi być to format bgf , może istnieje inny sposób.
    Widziałem na stronie MCS przykład w którym pokazano sposób odczytu takich obrazków w zewnętrznego eeproma ale to dla mnie za mała pamięc.
    Link

    Czy spotkał się Ktoś lub przerabiał sposób takiego wyświetlania z karty?

    Ewentualnie jak można (do jakiej postaci i jakim programem) przerobić obrazek aby wrzucić go z poziomu PC na kartę i wyświetlić to w projekcie dzięki atmedze i SD?

    Najprościej chyba jakoś przerobić taki obrazek w taki sposób że 0 oznacza zgaszony pixel a 1 zapalony. Czyli w pliku można by zapisać to tak:
    (nawet zapisać plik jako *.txt).Ale znów czym to zrobić?


    00000000
    00111100
    00100100
    00111100 przykład dla litery A
    00100100
    00100100

    Można by użyć wtedy polecenia PSET ..

    Ale jak przerobić taki obrazek do tej postaci? Oczywiście pomijając ręczne wklepywanie zer i jedynek. Bo dla obrazka 200*100 trwało by to wieki.
    No chyba że jest prostszy sposób aby jakoś odwołać się do BGF-a na karcie.
  • REKLAMA
  • Pomocny post
    #2 7395724
    pixel7
    Poziom 23  
    Bez problemu napiszesz obsługę plików BMP. Jak mi się uda odnaleźć to załączę kawałek kodu bascoma. Jaki masz wyświetlacz, kolorowy? Jeśli nie to faktycznie lepiej zapisać w formie tablicy i potem zapalać kolejne wiersze/kolumny. Są też konwertery BMP -> HEX, znajdziesz na forum.
  • REKLAMA
  • #3 7397538
    adambehnke
    Poziom 24  
    Mam czarno-biały na sterowniku T6963C 240*128
    Nie mam kompletnie pomysłu na proste wyświetlanie.

    Dodano po 15 [minuty]:

    Chyba znalazłem to czego mi było trzeba. Znalazłem konwerter BMP=>ASCII i w jego opcjach ustawiam aby podczas konwersji używał tylko znaków 0 i 1.

    [BASCOM] Wyświetlacz graficzny i pliki *.bgf + karta SD

    Chyba że można to wyświetlanie zrealizować prościej. Fajnie jak na prawdę dało by się zrobić wyświetlanie BMP na wyświetlaczu.Ale szczerze wątpię aby było coś takiego możliwe bez super rozbudowanego kodu.
    Załączniki:
  • #4 7399705
    adambehnke
    Poziom 24  
    Udało mi się napisać procedurkę wyświetlającą obrazki w dowolnej rozdzielczości na LCD 240*128.
    Obrazki mam zapisane na karcie SD w formacie *.txt ale tak na prawdę format nie ma znaczenia a sposób zapisu w tym pliku.
    Poniżej przedstawiam procedurkę. Jest to tylko częśc kodu odpowiedzialna za odczyt z SD i wyświetlenie na LCD. Należy jeszcze utworzyć system plików przy pomocy AVR-DOS i programik będzie śmigać.

    oto kod:

    '******************************************************************************'
    '******************************************************************************'
    '*****************************ŁADOWANIE GRAFIKI Z PLIKU************************'
    '******************************************************************************'
    '******************************************************************************'
    Graphic:
    
    'Koordynaty wyświetlenia obrazka i nazwa pliku do otwarcia
    
    Obrazek = "4.txt"       'Plik o tej nazwie zostanie wyświetlony na LCD
    Pozycja_x = 0                'Tu można zadeklarować w którym miejscu się pojawi obrazek
    Pozycja_y = 0                'Tu można zadeklarować w którym miejscu się pojawi obrazek
    
    
    Gr(1) = 0
    Gr(2) = 0
    Gr(3) = 0
    K = ""
    G = 0
    Dp = ""
    Cls Graph
    
    Open Obrazek For Binary As #5                               'można także użyć stałej jako numer kanału
    G = Lof(#5)                                                 'sprawdzenie długości pliku danych
    
    
    
    
    
    Do
     K = ""
    
     Line Input #5 , K                                          ' odczyt pojedyńczej linii z pliku z SD
    
    
    
    
    
    
    'XXXXXXXXXXXXXXXXXXXXXWYŚWIETLANIE NA LCDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Gr(1) = Len(k)                                              'długość kolumny
    Gr(2) = Gr(2) + 1                                           'kolejna linia
    
    
    For Gr(3) = 1 To Gr(1)
    
    
        Dp = Mid(k , Gr(3) , 1)
    
    
        'wprowadzene korekty wyświetlenia obrazka'
        Gr(4) = Gr(3) + Pozycja_x
        Gr(5) = Gr(2) + Pozycja_y
    
    
           If Val(dp) = 1 Then
            Pset Gr(4) , Gr(5) , 0
           End If
    
           If Val(dp) = 0 Then
            Pset Gr(4) , Gr(5) , 1
           End If
    
    Next Gr(3)
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    
    Loop Until Eof(#5) <> 0
    
    
    Close #5
    
    
    
    Return


    Wiem że kod nie jest jeszcze zoptymalizowany ale ważne że działa bezbłędnie. Czyli wychodzi na to że po co komu format BGF. Chyba że ktoś używa go do kilku mini rysunków. Za to na SD jestem niczym praktycznie nie ograniczony.

    Tutaj zamieszczam przykładowy plik z obrazkiem po konwersji w programie który umieściłem we wcześniejszym poście.

    Dodaję jeszcze na dowód fotkę (niestety kiepskiej jakości):

    [BASCOM] Wyświetlacz graficzny i pliki *.bgf + karta SD


    Mam nadzieję że komuś się przydadzą moje wypociny :]




    Dodano:

    Całość przetestowałem także na Atmega 32. Avr-Dos wchodzi do niej bez problemu nawet z rozbudowanym kodem programu. Co do czasu ładowania obrazka 240*128 to trwa to około 1s. Ale w tym czasie można także ładować i tekst na ekran lub wykonywać inne funkcje programu więc nie jest to uciażliwy czas zważając na to ile mogę umieścić takich obrazków na karcie (chociaż 64MB), jeśli obrazek 240*128 ma tylko 30,2k :)
REKLAMA