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

[AtMega 32] [C] Problem z Bitmapą do GLCD ST7565

Dachno 29 Gru 2010 16:17 4007 16
REKLAMA
  • #1 8929605
    Dachno
    Poziom 9  
    :idea: Witam :idea:

    Problem z wyświetlaniem Tekstu na GLCD ze sterownikiem ST7565 mam już za sobą. Wszystko działa bez zarzutu, z wyjątkiem próby załadowania BitMapy na LCD.

    Poniżej przedstawiam fragmenty bibliotek w której są komendy do wyświetlania Obrazu:

    LCD_ST7565.h
    
    //-----------------------------------------------------------------------
    // LCD_DisplayPicture
    // Picture Size: Hight*Weight
    //-----------------------------------------------------------------------
    
    
     uint8_t LCD_DisplayPicture(char *Picture, uint8_t adrPage, uint8_t adrColumn,uint8_t Weight, uint8_t Hight); 
    
    
    void LCD_Draw_Pixel(uint8_t Xpos,uint8_t Ypos,uint8_t Color);
    							
    void XY_Goto5_7(uint8_t adrPage, uint8_t adrColumn);  // Coursor XY_Goto 
    void XY_Goto8_16(uint8_t adrPage, uint8_t adrColumn);  // Coursor XY_Goto 
    
    
    void disp_set_pixel(uint8_t x, uint8_t y, uint8_t pixel_status);
    void disp_clear_dont_refresh();
    
    void lcd_spi_write(unsigned char hexwrite); //SPI Init starten
    void dogm_reset(void);						// Display Reset
    void lcd_set_cs(uint8_t enable);			// set Display cs
    void lcd_set_a0(uint8_t type);				// set Display a0
    void delay_s(uint8_t sec); 					// Delay 
    
    void disp_init(void);						//Display EA DOGM128-6 Init und Clear
    void LCD_DisplayChar5_7(uint8_t Dig);
    void LCD_DisplayChar8_16(uint8_t Dig);
    void LCD_DisplayOnOff(uint8_t On);
    void LCD_PowerControl(uint8_t Power);
    void LCD_SetStartLine(uint8_t LineStart);
    void LCD_SetPageAddress(uint8_t Page);
    void LCD_SetColumnAddress(uint8_t Column);
    void LCD_CLR_PICTURE(uint8_t Data);
    void LCD_CLR(void);
    uint8_t xy_adrColumn;
    uint8_t xy_adrPage;
    


    fragmenty LCD_ST7565.c
    
    //-----------------------------------------------------------------------------
    // LCD:Clear picture.
    //-----------------------------------------------------------------------------
    void LCD_CLR_PICTURE(uint8_t Data)
    {
       	uint8_t adrPage, adrLaw;
    	
       	for(adrPage = 0; adrPage < MAX_PAGE; adrPage++)
    	{  
    		LCD_SetPageAddress(adrPage);
    		LCD_SetColumnAddress(0);
          	for(adrLaw = 0; adrLaw < MAX_COLUMN; adrLaw++)
          	{
          		dogm_core_data(Data);
          	}
       	}
    } 
    
    void LCD_CLR(void)
    {
       	uint8_t adrPage, adrLaw, Data;
    	Data = 0;
       	
    	for(adrPage = 0; adrPage < MAX_PAGE; adrPage++)
    	{  
    		LCD_SetPageAddress(adrPage);
    		LCD_SetColumnAddress(0);
          	for(adrLaw = 0; adrLaw < MAX_COLUMN; adrLaw++)
          	{
          		dogm_core_data(Data);
          	}
       	}
    } 
    .
    .
    .
    //-----------------------------------------------------------------------
    // LCD_DisplayPicture
    // Picture Size: Hight*Weight
    //-----------------------------------------------------------------------
    uint8_t LCD_DisplayPicture(char *Picture, uint8_t adrPage, uint8_t adrColumn,uint8_t Weight, uint8_t Hight)
    {
    	uint8_t *dptr;               // dptr_adderss for Dig code.
       	uint8_t i, j;
    
    	if((adrPage+Hight)>MAX_PAGE) 		return FALSE;
    	if((adrColumn+Weight)>MAX_COLUMN) 	return FALSE;
    	
    	dptr = (uint8_t *)Picture;
    	
    	for(i=0; i<Hight; i++)
    	{
    		LCD_SetPageAddress(adrPage+i);
    		LCD_SetColumnAddress(adrColumn);
    		for(j=0; j<Weight; j++)
    		{
    			dogm_core_data(pgm_read_byte(dptr));
    		}
    	}
    	
    	return TRUE;
    }
    


    oraz cały main.c
    
    #include "global.h"
    #include "main.h"
    
    typedef enum {LCD_DATA, LCD_CMD} lcd_type_t;
    
    
    #include "dogm-core.h"
    #include "LCD_ST7565.h"
    #include "rprintf.h"
    #include "Obraz.h"
    
    
     
    void lcd_spi_write(unsigned char hexwrite)  //SPI Init
    {
    	delay_us(1);
    	SPDR = hexwrite;				// Daten nach Sender und starten
    	// while(!(SPSR & (1<<SPIF)));			// warte bis Bit 1: fertig
    	loop_until_bit_is_set(SPSR, SPIF);		// warte bis Bit 1: fertig
    	delay_us(1);
    	hexwrite = SPDR;				// SPIF wider 0 (Pseudolesen)
    }
    
    
    void lcd_set_a0(uint8_t type)
    {
    	if (type) cbi(LCD_DOGM_PORT, LCD_DOGM_A0); // Command (LCD_CMD) // Reg Select: 0 => Instruction Reg (w)
    	else      sbi(LCD_DOGM_PORT, LCD_DOGM_A0); // Data (LCD_DATA)	// Reg Select: 1 => Data Reg (w)
    }
    
    
    void lcd_set_cs(uint8_t enable)
    {
    	if (enable) cbi(LCD_DOGM_PORT, LCD_DOGM_CSB);	// DOGM select = LOW
    	else 		sbi(LCD_DOGM_PORT, LCD_DOGM_CSB);	// DOGM deselect = HIGH
    }
    
    
    int main(void)
    {
    
    	RES_PORT |= (1<<RES_BIT); 
    	
    	LCD_DOGM_DPORT = 0xff;			// set output
    	LCD_DOGM_PORT = 0xff;			// clear LEDS
    	sbi(DDRC,7);	
    
    	SPCR = (1 << SPE) | (1 << MSTR) | (1<<SPR0);	// SPI Master
    	InitDelay();
    	dogm_core_set_remore(&(lcd_spi_write), &(lcd_set_a0), &(lcd_set_cs), &(delay_us)); //SPI Init
    
    	
    	rprintfInit(LCD_DisplayChar5_7); // define output function for 5x7 char size
    
    	Delay(1000); //Inicialization 100ms Default delay is 100us
    
    
    	disp_init();
    
    
    	LCD_DisplayPicture(Obraz, 0, 0,128, 64);
    
    
    	
    
    while (1) 
    	{
    	}
    
    }
    
    void delay_us(u32 time_us)
    {
    	u32 i;
    	if (time_us < 1 ) time_us = 1;
    	for (i=0; i < time_us*2; i++) {};
    }
    


    Cała procedura jaką wykonuję:
    - Rysunek czarnym pędzlem w Paint'cie zapisuję jako JPG.
    - Zapisany Rysunek otwieram programem LCD Assistant, lub microLCD, i w nim przerabiam, JPG na plik w którym znajdują się kody w postaci 16-stkowej np."0x9f"
    - Zmieniam rozszerzenie na xxx.h i dodaję bibliotekę do Header Files w AVR Studio 4 oraz dodaję do main'a
     #include xxx.h 

    - Próbuję wywołać BitMape za pomocą
     LCD_DisplayPicture(Obraz, 0, 0,128, 64); 


    Lecz na LCD'ku nie ma nic...

    Jeśli ktoś wie jak rozwiązać mój problem, będę bardzo wdzięczny za każdą podpowiedź...
    Z góry dziękuję i Pozdrawiam. :D
  • REKLAMA
  • #2 8930305
    krdln
    Poziom 13  
    Mógłbyś pokazać, jak wygląda to xxx.h? Albo chociaż jego kawałek.
  • #3 8930562
    Dachno
    Poziom 9  
    to jest cały xxx.h w tym przypadku nazywa się: Obraz.h

    
    const unsigned char Obraz [] = {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x9f,0xc3,0x00,0x00,0x7f,0x00,0x67,0xc7,
    0x98,0x6f,0xdf,0x0f,0x80,0x4f,0x70,0x39,0xef,0xdf,0xef,0x80,0x5f,0x78,0x0d,0xce,
    0x03,0xef,0x80,0x5e,0x3c,0x2c,0x1e,0x1b,0xf7,0x80,0x5c,0x3c,0x38,0x1e,0xc9,0xc7,
    0x80,0x59,0x9c,0x31,0x06,0xfc,0x1b,0x80,0x41,0xc6,0xf7,0xe6,0xff,0xf3,0x80,0x6c,
    0x5c,0xf9,0x8e,0xef,0xe3,0x80,0x66,0xbd,0xfe,0xfe,0x83,0xfb,0x80,0x73,0x7b,0xfe,
    0x7e,0xb3,0xff,0x80,0x79,0x7f,0x9e,0x7e,0x87,0xff,0x80,0x63,0xef,0x8f,0xf6,0xff,
    0xc7,0x80,0x6f,0xcf,0xff,0xe6,0x7f,0x93,0x80,0x77,0xde,0xf3,0x89,0x07,0xbb,0x80,
    0x77,0xfc,0xf3,0xc1,0xf3,0x59,0x80,0x74,0xf8,0x21,0xe3,0xf8,0x11,0x80,0x70,0x39,
    0x6d,0xc9,0xf8,0xf9,0x80,0x79,0x78,0xcd,0x1c,0x7c,0x07,0x80,0x79,0x30,0x1c,0x7f,
    0x1f,0x5f,0x80,0x7f,0x87,0x7c,0xff,0x9f,0x1f,0x80,0x40,0x00,0x00,0x00,0x00,0x01,
    0x80,0x3f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    };
    
  • #4 8930735
    krdln
    Poziom 13  
    Sprawdź, czy
     LCD_DisplayPicture(Obraz, 0, 0,128, 64); 
    nie zwraca przypadkiem FALSE. Wydaje mi się, że tak jest. Chyba musisz podzielić wysokość przez 8, czyli wywołać tak: ...(Obraz, 0, 0, 128, 8).

    Nie zaszkodzi spróbować też z mniejszymi liczbami (zarówno dla szer. jak i wys.). Najwyżej wyświetli śmieci.

    Swoją drogą, cóż za wspaniała angielszczyzna :D Weight i Hight :D

    [edit]
    Przyjrzałem się temu plikowi .h i Twój obraz nie ma na pewno rozdzielczości 128×64, jak to sugerujesz wywołaniem LCD_DisplayPicture. Jeśli masz rozdzielczość (w tym jpgu, który tworzysz) np. 48×32 to napisz:
    LCD_DisplayPicture(Obraz, 0, 0, 48, 4)
  • REKLAMA
  • #5 8930826
    Dachno
    Poziom 9  
    Przy kompilacji mam zawsze jednego warning'a:

    ../main.c:70: warning: passing argument 1 of 'LCD_DisplayPicture' discards qualifiers from pointer target type


    Zmieniałem cyfry w Wysokości i Szerokości, ale nadal nic... Pusty Ekran...

    P.S. Biblioteki pożyczyłem od jakiegoś Niemca, to nie mój Angielski :)
  • #6 8931009
    krdln
    Poziom 13  
    Dachno napisał:
    Przy kompilacji mam zawsze jednego warning'a:

    ../main.c:70: warning: passing argument 1 of 'LCD_DisplayPicture' discards qualifiers from pointer target type


    Żeby pozbyć się warninga, dopisz const przy pierwszym argumencie w deklaracji i definicji funkcji LCD_DisplayPicture:
    ...
     uint8_t LCD_DisplayPicture(const char *Picture, uint8_t adrPage, uint8_t adrColumn,uint8_t Weight, uint8_t Hight)
    ...


    Poza tym, żeby się upewnić, że funkcja zwraca TRUE zrób tak:

    if (LCD_DisplayPicture(Obraz, 0, 0,25,7)==TRUE) {/*zapal diodę tutaj, czy coś w tym stylu*/}
  • #7 8931193
    Dachno
    Poziom 9  
    Warning zniknął lecz terazm mam takiego:
     ../main.c:62: warning: pointer targets in passing argument 1 of 'LCD_DisplayPicture' differ in signedness
     

    Nie wiem czy to może mieć jakiś wpływ na mój problem, lecz wolę się upewnić

    zrobiłem tak jak mi poleciłeś, tylko zamiast diody dałem żeby pokazał się napis, lecz go nie ujrzałem...
     if
    (LCD_DisplayPicture(Obraz, 0, 0, 25, 7)==TRUE) 
    {
    LCD_DisplayString5_7("  Zwraca TRUE", 2, 0);
    } 


    Sama funkcja :
     LCD_DisplayString5_7("  Zwraca TRUE", 2, 0); 
    działa, czyli całość zwraca mi FALSE ;/
  • REKLAMA
  • #8 8931376
    krdln
    Poziom 13  
    Jeszcze jest ryzyko, że ta funkcja coś miesza z wyświetlaczem, zawiesza się albo resetuje, więc najlepiej się upewnić (schematycznie) w ten sposób
    if (funkcja()==TRUE) "zwraca true"; else "zwraca false";

    jeśli naprawdę zwraca false, to jest to możliwe tylko z powodu tego fragmentu
       if((adrPage+Hight)>MAX_PAGE)       return FALSE;
       if((adrColumn+Weight)>MAX_COLUMN)    return FALSE; 

    czyli albo dajesz za duże Hight lub Weight dla tego wyświetlacza, albo MAX_PAGE lub MAX_COLUMN jest niepoprawne – za małe.

    Co do warninga:
    to nie robi, ale żeby nie śmiecił, tam gdzie dałeś const, daj też unsigned (w tych dwóch miejscach)
  • REKLAMA
  • #9 8931692
    Dachno
    Poziom 9  
    Zrobiłem tak jak poradziłeś:
     if
    (LCD_DisplayPicture(Obraz, 0, 0, 25, 7)==TRUE)
    {
    LCD_DisplayString5_7("  Funkcja TRUE", 2, 0);
    }
    else
    {
    LCD_DisplayString5_7("  Funkcja FALSE", 4, 0);
    } 


    I pokazał się napis: Funkcja FALSE, lecz Od góry do dołu na szerokość pierwszych trzech liter Fu od Funkcja są paski jak kod kreskowy (grubsze i chudsze)...

    P.S Warning chociaż zniknął po ostatniej poprawce :)


    Po zmianie w linice
     (LCD_DisplayPicture(Obraz, 0, 0, 25, 7)==TRUE) 

    na
     (LCD_DisplayPicture(Obraz, 0, 0, 128, 64)==TRUE) 


    Pokazuje sie juz czysto Funkcja FALSE ;/


    Mam jeszcze dwa Warning'i które raz się pokazują a raz nie:

     ../LCD_ST7565.c:100: warning: unused variable 'adrLaw'
    ../LCD_ST7565.c:100: warning: unused variable 'adrPage'
     
  • #11 8932129
    Dachno
    Poziom 9  
    Zrobiłem tak jak podpowiedziałeś
    Dodałem
     #include <avr/pgmspace.h> 


    oraz w pliku Obraz.h:
     #include <avr/pgmspace.h>
    
    unsigned const char Obraz [11][16] PROGMEM = {
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x9f,0xc3,0x00,0x00,0x7f,0x00,0x67,0xc7},
    {0x98,0x6f,0xdf,0x0f,0x80,0x4f,0x70,0x39,0xef,0xdf,0xef,0x80,0x5f,0x78,0x0d,0xce},
    {0x03,0xef,0x80,0x5e,0x3c,0x2c,0x1e,0x1b,0xf7,0x80,0x5c,0x3c,0x38,0x1e,0xc9,0xc7},
    {0x80,0x59,0x9c,0x31,0x06,0xfc,0x1b,0x80,0x41,0xc6,0xf7,0xe6,0xff,0xf3,0x80,0x6c},
    {0x5c,0xf9,0x8e,0xef,0xe3,0x80,0x66,0xbd,0xfe,0xfe,0x83,0xfb,0x80,0x73,0x7b,0xfe},
    {0x7e,0xb3,0xff,0x80,0x79,0x7f,0x9e,0x7e,0x87,0xff,0x80,0x63,0xef,0x8f,0xf6,0xff},
    {0xc7,0x80,0x6f,0xcf,0xff,0xe6,0x7f,0x93,0x80,0x77,0xde,0xf3,0x89,0x07,0xbb,0x80},
    {0x77,0xfc,0xf3,0xc1,0xf3,0x59,0x80,0x74,0xf8,0x21,0xe3,0xf8,0x11,0x80,0x70,0x39},
    {0x6d,0xc9,0xf8,0xf9,0x80,0x79,0x78,0xcd,0x1c,0x7c,0x07,0x80,0x79,0x30,0x1c,0x7f},
    {0x1f,0x5f,0x80,0x7f,0x87,0x7c,0xff,0x9f,0x1f,0x80,0x40,0x00,0x00,0x00,0x00,0x01},
    {0x80,0x3f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    
    };
     


    i w momencie kompilacji mam Warninga :
     ../main.c:62: warning: passing argument 1 of 'LCD_DisplayPicture' from incompatible pointer type
     


    po tych zabiegach również nie mam nic na wyświetlaczu ;/
  • #13 8932867
    Dachno
    Poziom 9  
    a wiec ze znakiem "*Obraz" pokazują się kreski poziome o długości 2cm od lewej strony LCD i w momencie dodania znaku "*"
    mam takiego Warning'a:
     ../main.c:61: warning: passing argument 1 of 'LCD_DisplayPicture' makes pointer from integer without a cast
    


    ale ani trochę nie przypomina to bitmapy :/, próbowałem na różne sposoby i jeszcze nic...;/

    Natomiast jeśli tak wywołam funkcję:
     LCD_DisplayPicture(*Obraz, 0, 0, 128, 8); 


    To wszystkie pixele sie palą, ale obrazka dalej nie ma ;/, lecz są jakieś postępy heh...
    Natomiast Warning jest zawsze kiedy jest znak "*"
  • Pomocny post
    #14 8932926
    krdln
    Poziom 13  
    Light-I napisał:
    Może tak ? :
    LCD_DisplayPicture(*Obraz, 0, 0, 25, 7)

    Tak na pewno nie jest dobrze. *Obraz to liczba (z początku tablicy, czyli 0), a potrzebujemy wskaźnika.

    Nie wiem, czy dobrze mi się wydaje, ale
    dogm_core_data(pgm_read_byte(dptr)); 
    Nie inkrementuje zmiennej dptr sam z siebie. Spróbuj to zmienić na:
    dogm_core_data(pgm_read_byte(dptr++));


    Poza tym, tak jak mówiłem, nie wywołuj obrazu z tak ogromnymi parametrami, bo dostaniesz „czystego false'a” :D Rób tak: (te 25 i 7 to tylko przykład)
    LCD_DisplayPicture(Obraz, 0, 0, <szerokość>, <wysokość/8>)


    A, i jeszcze jedno. A propos tego
    ../main.c:70: warning: passing argument 1 of 'LCD_DisplayPicture' discards qualifiers from pointer target type

    Obrazek jest w nieco niepoprawnej formie, nie wiem, czy z tym warningiem przejdzie. Dlaczego nagle Ci się pojawiły wąsy w wierszach w Obraz.h? Usuń je. I spróbuj zmienić tablicę na jednowymiarową:
    unsigned const char Obraz [] PROGMEM = {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x9f,0xc3,0x00,0x00,0x7f,0x00,0x67,0xc7,
    0x98,0x6f,0xdf,0x0f,0x80,0x4f,0x70,0x39,0xef,0xdf,0xef,0x80,0x5f,0x78,0x0d,0xce,...
  • #15 8934406
    Dachno
    Poziom 9  
    Zrobiłem tak:

    -Usunąłem znak * z Obraz.
    - Zmieniłem
     dogm_core_data(pgm_read_byte(dptr++)); 

    - Usunąłem "wąsy" z pliku Obraz.h
    - Oraz zmieniłem Obraz na inny, który zapożyczyłem z innego przykładu gdzie podobno działał:
     #include <avr/pgmspace.h>
    
    unsigned const char PROGMEM Obraz []  = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x03, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
    0x00, 0x00, 0x07, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 
    0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x7F, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x3F, 0xF8, 0x3F, 0xE0, 0x3F, 0x87, 0xE7, 0xC0, 0x00, 0x00, 
    0x00, 0x00, 0x1F, 0x9F, 0xCF, 0xFE, 0x7F, 0xF8, 0x7F, 0xF0, 0xFF, 0xCF, 0xEF, 0x9F, 0xFF, 0xFE, 
    0x00, 0x00, 0x3F, 0x3F, 0x9F, 0x7E, 0xFD, 0xF0, 0xFF, 0xF1, 0xFF, 0xCF, 0xDF, 0x3F, 0xFF, 0xFE, 
    0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE3, 0xFF, 0xDF, 0xFE, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0xFE, 0x7E, 0x7E, 0xF9, 0xF7, 0xE3, 0xE7, 0xC7, 0xDF, 0x9F, 0xFC, 0x7F, 0xFF, 0xFE, 
    0x00, 0x01, 0xFC, 0xFC, 0xFD, 0xF3, 0xEF, 0xC7, 0xCF, 0x8F, 0xBF, 0x3F, 0xF8, 0xFF, 0xFF, 0xFE, 
    0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x9F, 0x1F, 0x7E, 0x3F, 0xF0, 0x00, 0x00, 0x00, 
    0x00, 0x07, 0xFF, 0xF1, 0xFB, 0xCF, 0xBF, 0x9F, 0x3E, 0x3E, 0xFC, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 
    0x00, 0x0F, 0xFF, 0xE3, 0xF0, 0x1F, 0x7F, 0x3E, 0x7C, 0x7D, 0xF8, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 
    0x7F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x7C, 0xF8, 0xFB, 0xF1, 0xFF, 0xC0, 0x00, 0x00, 0x00, 
    0x00, 0x1F, 0xC0, 0x0F, 0xFE, 0x7E, 0xFC, 0xF9, 0xF1, 0xF7, 0xE3, 0xFF, 0x87, 0xFF, 0xFF, 0xFE, 
    0x00, 0x3F, 0x80, 0x1F, 0x80, 0xFD, 0xF9, 0xFF, 0xE3, 0xEF, 0xC7, 0xFF, 0x8F, 0xFF, 0xFF, 0xFE, 
    0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC7, 0xFF, 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0xFE, 0x00, 0x7F, 0x01, 0xFF, 0xE7, 0xFF, 0x8F, 0xFF, 0x1F, 0x3F, 0x1F, 0xFF, 0xFF, 0xFE, 
    0x01, 0xFC, 0x00, 0xFE, 0x00, 0xFF, 0xCF, 0xFE, 0x0F, 0xFE, 0x3E, 0x7F, 0x3F, 0xFF, 0xFF, 0xFE, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00,
     
    
    }; 

    Jest to logo: "PROPOX"

    i w momencie zmiany wielkości na małą, nic się nie pokazuje, dopiero zaczyna wyświetlać coś przy
     LCD_DisplayPicture(Obraz, 0, 0, 32, 2); 

    i wygląda to tak:
    [AtMega 32] [C] Problem z Bitmapą do GLCD ST7565

     LCD_DisplayPicture(Obraz, 0, 0, 96, 4); 

    [AtMega 32] [C] Problem z Bitmapą do GLCD ST7565

    a przy maksymalnym
     LCD_DisplayPicture(Obraz, 0, 0, 128, 8); 

    wygląda tak:
    [AtMega 32] [C] Problem z Bitmapą do GLCD ST7565

    próbowałem również pośrednich wartości, i zawsze się zmieniają te krzaczki lecz ani razu nie przypomniało to loga firmy...

    Jakieś dalsze sugestie:?: :D
  • Pomocny post
    #16 8934858
    szelus
    Poziom 34  
    Musisz dokładnie wiedzieć, jaki rozmiar ma bitmapa aby ją poprawnie narysować -to raz.
    A dwa, jesteś pewny, że to logo wogóle jest w formacie poprawnym dla tego wyświetlacza? Bo tu musisz mieć kolejne bajty poskładane z pionowych, 8-mio pixelowych słupków. Znaczy zapis bajtu rysuje słupek 8 pionowo ułożonych pikseli, następnego następne 8 na prawo itd.
    W innym wyświetlaczu/projekcie wcale tak nie musi być, np. bajt może rysować 8 poziomych pikseli, nastepny następne osiem itd.
    Te bitmapy nie są w jakiś standardowym formacie, a w formacie dopasowanym do konkretnego wyświetlacza.
  • #17 8934943
    Dachno
    Poziom 9  
    Znalazłem,inny program, Skonwertował mi BitMapę załadowałem i poszło bez problemu :)(widocznie wina była w programie) Dziękuje wszystkim za pomoc, i sorry za męczarnie :D ale ze wszystkimi poprawkami działa wyśmienicie :)

    P.S. i znowu podziękowania dla szelus :D oraz przede wszystkim dla krdln

    Zamykam post :)
REKLAMA