Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATmega + LCD graficzny 132x65 (LT13264 kontroler SPLC501C)

kapsel1985 15 Oct 2008 20:24 13881 45
Computer Controls
  • #1
    kapsel1985
    Level 12  
    Witam. Chciałbym podjąć temat mający za zadanie poprawne uruchomienie wyświetlacza graficznego, gdyż mam z nim nie mały kłopot.

    > ATmega8
    > LCD 132x65 LT13264 - kontroler SPLC501C http://www.densitron.com/uploadedFiles/Displays/Support/sunplussplc501c.pdf

    Proszę jeżeli ktoś posiada program, który działa o podesłanie lub wytknięcie błędów w poniższym kodzie.
    A może komuś się udało uruchomić bibliotekę ze strony http://en.radzio.dxp.pl/splc501c/ ??

    W font5x7.h i intro.h znajdują się czcionki i bitmapa odpowiednio zapisane w tablicy.
  • Computer Controls
  • #3
    Pituś Bajtuś
    Level 28  
    Co było przyczyną niedziałania? Jak to rozwiązałeś?
  • #4
    kapsel1985
    Level 12  
    Jeżeli będę miał trochę czasu to pojawi się opis uruchomienia LCD graficzny 132x65 (LT13264 kontroler SPLC501) na stronie www.uc.dl.pl
  • Computer Controls
  • #5
    andrzejswie
    Level 10  
    Witam, zgodnie z opisem sterownika SPLC501C można z nim współpracować w trybie szeregowym, jednak pin za to odpowiedzialny nie jest umieszczony wśród 18 pinów wyprowadzonych. Czy można to jakoś obejść czy jest on na stałe ustawiony w tryb pracy równoległej?

    Pozdrawiam.
  • #6
    michalko12
    MCUs specialist
    andrzejswie wrote:
    Witam, zgodnie z opisem sterownika SPLC501C można z nim współpracować w trybie szeregowym, jednak pin za to odpowiedzialny nie jest umieszczony wśród 18 pinów wyprowadzonych. Czy można to jakoś obejść czy jest on na stałe ustawiony w tryb pracy równoległej?

    Pozdrawiam.


    Można, na tym wyświetlaczy jest zwora J1 trzeba ja przelutować i będzie działało po SPI, a piny do komunikacji po SPI pokrywają się z tymi od komunikacji równoległej.


    Code: c
    Log in, to see the code
  • #7
    andrzejswie
    Level 10  
    Witam,

    dzięki za odpowiedź, znalazłem właśnie to info w necie wczoraj i przelutowałem te zworke do masy. Nie dodałem jeszcze że ja pracuje na MSP430 ale jakoś zawsze uda mi się przepisać programy na moje potrzeby. Jednak wyświetlacz dalej nie działa, moja konfiguracja pinów jest następująca:

    PIN 1 GND
    PIN 2 VCC 3,3V
    podświetlenie ( 17,18 ) i zasilanie połączyłem razem poprzez zwory J4 i J3
    PIN 3 C86 - GND
    PIN 4 DB7(SI-DANE)
    PIN 5 DB6(SCL-ZEGAR)
    PIN 6 - 13 - NIEPOLACZONE
    PIN 14 - AOP(RS)
    PIN 15 - RESET
    PIN 16 - CS1

    taktowanie msp-ka 1Mhz

    Komunikację szeregową realizuje programowo:

    
    
    void LCD_WysliBajt(unsigned char bajt)
    {
      unsigned char i;
      LCD_clock_high();
      LCD_CS1_low();
      for (i=0x80;i>0;i/=2)
      {
        if (i & bajt)
        {
          LCD_data_high(); 
        }
        else
        {
          LCD_data_low();  
        }
        LCD_clock_low();
        LCD_clock_high();
      }
      LCD_CS1_high();
    }
    
    // Pozostałe procedury obsługi
    
    void LCD_Inicjalizacja(void)
    {
      volatile int i;
      LCD_InicjalizacjaPortow();
      LCD_Komenda(LCD_BIAS_19);	
      LCD_Komenda(LCD_ADC_NORMAL);		//0xA0	
      LCD_Komenda(LCD_COM63);		//0xC8
      LCD_Komenda(0x23);
      LCD_Komenda(LCD_VOLUME_MODE);		//0x81
      LCD_Komenda(33);	//0x2C
      LCD_Komenda(LCD_POWERON);						
      LCD_Komenda(LCD_START_LINE | 0);	
      LCD_Komenda(LCD_PAGE_ADDRESS | 0);
      LCD_Komenda(LCD_COLUMN_ADDRESS_HI | 0);		
      LCD_Komenda(LCD_COLUMN_ADDRESS_LO | 0);
      LCD_Komenda(LCD_DISPLAY_ON);	//0xAF
    
      LCD_Zerowanie();
    }
    //*/
    //------------------------------------------------------------------------------------
    void LCD_Zerowanie(void)
    {
      char i,j;
      LCD_Komenda(LCD_START_LINE_SET);	//0x40
      for (i=0;i<9;i++)
      {
        LCD_Komenda(LCD_PAGE_ADDRESS+i);	//0xB0 + i
        LCD_Komenda(LCD_COLUMN_ADDRESS_HI);	//0x10
        LCD_Komenda(LCD_COLUMN_ADDRESS_LO);	//0x00
        for(j=0; j<132; j++)
         LCD_Dana(0);
      }	
    }
    //------------------------------------------------------------------------------------
    void LCD_Komenda(unsigned char komenda)
    {
      PORT_LCD_COMMAND &= ~(LCD_CS1);
      PORT_LCD_COMMAND &= ~(LCD_A0P);
      LCD_WysliBajt(komenda);
    }
    //------------------------------------------------------------------------------------
    void LCD_Dana(unsigned char dana)
    {
      PORT_LCD_COMMAND &= ~(LCD_CS1);
      PORT_LCD_COMMAND |= (LCD_A0P);
      LCD_WysliBajt(dana);
    }
    //------------------------------------------------------------------------------------
    void LCD_Ustaw_Pozycje(unsigned char x, unsigned char y)
    {
      LCD_Komenda(LCD_COLUMN_ADDRESS_HI | (x >> 4));
      LCD_Komenda(LCD_COLUMN_ADDRESS_LO | (x & 0x0F));
      LCD_Komenda(LCD_PAGE_ADDRESS | y);
    }
    //------------------------------------------------------------------------------------
    void LCD_InicjalizacjaPortow() 
    {
      PORT_LCD_DATA_DIR |= LCD_DATA;
      PORT_LCD_DATA_DIR |= LCD_CLOCK;
      PORT_LCD_DATA &= ~(LCD_DATA);
      PORT_LCD_DATA &= ~(LCD_CLOCK);
      PORT_LCD_COMMAND_DIR |= LCD_RES;
      PORT_LCD_COMMAND_DIR |= LCD_A0P; 
      PORT_LCD_COMMAND_DIR |= LCD_CS1; 
      PORT_LCD_COMMAND |= LCD_RES;
      PORT_LCD_COMMAND |= LCD_CS1;
      PORT_LCD_COMMAND |= LCD_A0P;
       
      PORT_LCD_COMMAND &= ~(LCD_RES); 
      for(volatile int i = 0;i<5000;i++)
      {}
      PORT_LCD_COMMAND |= LCD_RES;
      for(volatile int i = 0;i<5000;i++)
      {}
    }
    //------------------------------------------------------------------
    void LCD_Wysli_Znak(char kodZnaku)
    {
      unsigned char kolumna;
      for(kolumna = 0; kolumna < szerokoscT; kolumna++)
        LCD_Dana(czcionka5x7[((kodZnaku - offset) * szerokoscT) + kolumna]);
      LCD_Dana(0);
    }
    
    


    wzorowalem sie tez na kodzie ze strony http://en.radzio.dxp.pl/splc501c/

    Dodano po 6 [minuty]:

    I jak to jest z tym kontrastem? Jeśli ustawi się go mniej wiecej w połowie to powinno działać czy trzeba się wstrzelić dokładnie w jeden z tych 64 poziomów?
  • #8
    andrzejswie
    Level 10  
    Witam, problem juz rozwiazany.
  • #9
    MicWeg
    Level 11  
    Czy mógł bym prosić o schemat podłączenia równoległego tego wyświetlacza do ATmega8 ? Chociaż który pin do którego, potem już sobie po radze.
  • #11
    Daniel_T
    Level 11  
    Witam,
    Czy mógłby ktoś udostępnić jakikolwiek program, może być hex (+ jakiś opis portów) na ATmega16 pod ten wyświetlacz?
    Męczę go już tydzień czasu i rezultat jest taki, że rysuje pierwszą linię bez wszystkich pikseli na dwie sekundy po czym wszystko znika, dlatego chciałbym jakiś kod do sprawdzenia, czy lcd nie jest uszkodzony.

    Poniżej kod ze strony en.radzio.dxp.pl zaadaptowany do AVR. Proszę sprawdźcie co robię źle.
    Komendy po znaku komentarza to oryginał na procesor LPC.

    //#include "build/lpc213x.h"
    #include <avr\io.h>
    #include "SPLC501C.h"
    #include "font5x7.h"
    
    #define SPLC501C_DATA_PORT PORTA
    #define SPLC501C_DATA_DIR DDRA
    #define SPLC501C_DATA_PIN PINA
    
    #define SPLC501C_CTRL_PORT PORTD
    #define SPLC501C_CTRL_DIR DDRD
    
    #define SPLC501C_RD 7
    #define SPLC501C_WR 6
    #define SPLC501C_A0 5
    #define SPLC501C_RES 4
    #define SPLC501C_CS1 3
     
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    
    	
    void GLCD_InitializePorts(void)
    {
    volatile int i;
    //SPLC501C_SET = (SPLC501C_RD | SPLC501C_WR | SPLC501C_A0 | SPLC501C_RES | SPLC501C_CS1);
    SPLC501C_CTRL_PORT |= (SPLC501C_RD | SPLC501C_WR | SPLC501C_A0 | SPLC501C_RES | SPLC501C_CS1);
    //SPLC501C_DIR |= (SPLC501C_RD | SPLC501C_WR | SPLC501C_A0 | SPLC501C_RES | SPLC501C_CS1);
    SPLC501C_CTRL_DIR |= (SPLC501C_RD | SPLC501C_WR | SPLC501C_A0 | SPLC501C_RES | SPLC501C_CS1);
    
    //SPLC501C_CLR = SPLC501C_RES;
    SPLC501C_CTRL_PORT &= ~SPLC501C_RES;
    for(i = 0 ; i < 1000; i++);
    //SPLC501C_SET = SPLC501C_RES;
    SPLC501C_CTRL_PORT |= SPLC501C_RES;
    
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    unsigned char GLCD_ReadStatus(void)
    {
    unsigned char tmp;
    
    //SPLC501C_DIR &= ~(0xFF << SPLC501C_D0);
    SPLC501C_DATA_DIR = 0X00;
    
    //SPLC501C_CLR = (SPLC501C_RD | SPLC501C_A0 | SPLC501C_CS1);
    SPLC501C_CTRL_PORT &= ~(SPLC501C_RD | SPLC501C_A0 | SPLC501C_CS1);
    asm("nop");
    //tmp = (SPLC501C_PIN >> SPLC501C_D0);
    tmp = SPLC501C_DATA_PIN;
    //SPLC501C_SET = (SPLC501C_RD | SPLC501C_A0 | SPLC501C_CS1);
    SPLC501C_CTRL_PORT |= (SPLC501C_RD | SPLC501C_A0 | SPLC501C_CS1);
    
    return tmp;
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    unsigned char GLCD_ReadData(void)
    {
    unsigned char tmp;
    while(GLCD_ReadStatus()&0x90);
    //SPLC501C_DIR &= ~(0xFF << SPLC501C_D0);
    SPLC501C_DATA_DIR = 0X00;
    
    //SPLC501C_CLR = (SPLC501C_RD | SPLC501C_CS1);
    SPLC501C_CTRL_PORT &= ~(SPLC501C_RD | SPLC501C_CS1);
    asm("nop");
    //SPLC501C_SET = (SPLC501C_RD | SPLC501C_CS1);
    //SPLC501C_CLR = (SPLC501C_RD | SPLC501C_CS1);
    SPLC501C_CTRL_PORT |= (SPLC501C_RD | SPLC501C_CS1);
    SPLC501C_CTRL_PORT &= ~(SPLC501C_RD | SPLC501C_CS1);
    asm("nop");
    //tmp = (SPLC501C_PIN >> SPLC501C_D0);
    tmp = SPLC501C_DATA_PIN;
    //SPLC501C_SET = (SPLC501C_RD | SPLC501C_CS1);
    SPLC501C_CTRL_PORT |= (SPLC501C_RD | SPLC501C_CS1);
    
    return tmp;
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    void GLCD_WriteData(unsigned char dataToWrite)
    {
    while(GLCD_ReadStatus()&0x90);
    //SPLC501C_DIR |= (0xFF << SPLC501C_D0);
    SPLC501C_DATA_DIR = 0Xff;
    
    //SPLC501C_SET = (dataToWrite << SPLC501C_D0);
    //dataToWrite ^= 0xFF;
    //SPLC501C_CLR = (dataToWrite << SPLC501C_D0);
    SPLC501C_DATA_PORT = dataToWrite;
    
    //SPLC501C_CLR = (SPLC501C_WR | SPLC501C_CS1);
    SPLC501C_CTRL_PORT &= ~(SPLC501C_WR | SPLC501C_CS1);
    asm("nop");
    //SPLC501C_SET = (SPLC501C_WR | SPLC501C_CS1);
    SPLC501C_CTRL_PORT |= (SPLC501C_WR | SPLC501C_CS1);
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    void GLCD_WriteCommand(unsigned char commandToWrite)
    {
    while(GLCD_ReadStatus()&0x90);
    //SPLC501C_DIR |= (0xFF << SPLC501C_D0);
    SPLC501C_DATA_DIR = 0Xff;
    
    //SPLC501C_SET = (commandToWrite << SPLC501C_D0);
    //commandToWrite ^= 0xFF;
    //SPLC501C_CLR = (commandToWrite << SPLC501C_D0);
    SPLC501C_DATA_PORT = commandToWrite;
    
    //SPLC501C_CLR = (SPLC501C_WR | SPLC501C_A0 | SPLC501C_CS1);
    SPLC501C_CTRL_PORT &= ~(SPLC501C_WR | SPLC501C_A0 | SPLC501C_CS1);
    asm("nop");
    //SPLC501C_SET = (SPLC501C_WR | SPLC501C_A0 | SPLC501C_CS1);
    SPLC501C_CTRL_PORT |= (SPLC501C_WR | SPLC501C_A0 | SPLC501C_CS1);
    }
    
    	int main(void)
    {
    	
    	GLCD_Initialize();
    
    	
    GLCD_WriteString("hello");
    
    	while(1);
    
    	
    	}
    //----------------------------------------------------------------------------
  • #12
    cieplyy
    Level 10  
    Witam wszystkich. Udało mi sie uruchomic ten wyświetlacz z biblioteka ze strony en.radzio ale nie działa mi funkcja GLCD_SetPixel a co za tym idzie nie działa biblioteka graficzna. Czy ktoś miał ten problem i wie jak go rozwiązać?
  • #13
    adammruk
    Level 16  
    Witam. Odświeżam temat bo nie chcę zakładać takiego samego. Czy komuś udało się w końcu uruchomić ten wyświetlacz pod AVR? Przydałoby mi się cokolwiek, równolegle lub szeregowo, jakaś biblioteka plus schemat. Jeśli ktoś może coś udostępnić to będę wdzięczny:)
  • #14
    andy1024
    Level 11  
    Jestem kolejnym (nie)szczęśliwcem, próbującym uruchomić wspomniany wyświetlacz na atmedze.
    Dysponuję takim modelem: http://artronic.pl/o_produkcie.php?id=664?
    Podłączyłem go zgodnie z opisem:
    1 GND
    2 +3V
    3 GND
    4-11 PORTD kontrolera, wg numeracji
    12 PB7
    13 PB6
    14 PB5
    15 PB4
    16 PB0
    17,18 - podświetlenie (to działa;))

    Kombinowałem podobnie jak Daniel_T, tzn przerabiałem kod Radzia na Atmegę. Błąd, który od razu rzucił mi się w oczy w kodzie Daniela, to brak przesunięć bitowych podczas odwołań do bitów sterujących:
    
    SPLC501C_CTRL_PORT &= ~(SPLC501C_RD | SPLC501C_A0 | SPLC501C_CS1); 
    

    W efekcie zamiast ustawienia 0b10101000 otrzymujemy 0b00000111.
    Trzeba wykonać przesunięcia bitowe (lub skorzystać z _BV):
    
    SPLC501C_CTRL_PORT &= ~(1<<SPLC501C_RD | 1<<SPLC501C_A0 | 1<<SPLC501C_CS1); 
    

    Poza tym mam wątpliwości co do odczytu stanu - czy powinno się używać PIN czy po prostu czytać z portu? Chodzi o metodę GLCD_ReadStatus i tę linijkę:
    
    tmp = SPLC501C_DATA_PIN; 
    

    Na chwilę obecną mój wyświetlacz niczego nie wyświetla. Nie wiem nawet, czy jest sprawny.
    Może ktoś, np. @adammruk chciałby wspólnie popracować nad problemem?
    A może ktoś już wie, co jest nie tak i chciałby się podzielić informacjami?:)
  • #15
    adammruk
    Level 16  
    Kod ze strony Radzia jest pod LPC, chyba dlatego tam jest taki zapis (nie znam się na ARM). Chętnie popracuję wspólnie, dzisiaj zrobię jakąś małą płytkę LCD+Atmega8, to pokombinuję. Myślałem bardziej żeby zastosować kod z tej strony: http://www.uc.dl.pl/
  • #16
    andy1024
    Level 11  
    @adammruk: z tym też próbowałem. Niestety bez rezultatu. Podłączyłem tak, jak wynika z opisu na stronie i z samych źródeł.
    Różnice pomiędzy kodem radzia a tym co napisano na uc.dl.pl są znaczące. I nie mówię tu o różnicach w programowaniu kontrolera, tylko o różnicach w obsłudze wyświetlacza - choćby komendy przekazywane do LCD w trakcie inicjalizacji.

    Nie wiem, czy zauważyłeś, ale w kodzie na uc.dl.pl brakuje implementacji wywoływanej funkcji lcd_inicjalizacja_interfejs(); U siebie po prostu ją wykomentowałem, bo nie wiem co autor zamierzał w niej osiągnąć.
  • #17
    adammruk
    Level 16  
    Wydaje mi się że funkcja ta służy do ustawienia kierunku portów mikrokontrolera. Pamiętałeś o tym w swoim programie? Za jakąś godzinkę się zabiorę za to, a jak nie to się weźmie datasheet i krok po kroku będziemy analizować:)
  • #18
    andy1024
    Level 11  
    Tak, ustawiam DDR.
    Możesz opisać jak masz podłączony wyświetlacz i jakie napięcia na niego podajesz?
    W opisie z artronica znajduje się takie coś:
    VLCD:9.0V, VDD:3.3V
    Ja podłączam jedynie 3.3V i nawet nie wiem gdzie miałbym podpiąć te 9.0V..
  • #19
    adammruk
    Level 16  
    Hmm nie jest tak łatwo jednak:P Masz coś może już? Ja kombinuję różne ustawienia inicjalizacji, różne programy, ale słabo idzie.. Jak coś napisz do mnie na gg: 6818395
  • #20
    andy1024
    Level 11  
    Na razie nic. Chyba popróbuję debugowania. A że nie mam żadnego jtaga ani nic z tych rzeczy, to podłączę chociaż jakiegoś siedmiosegmentowca do pozostałych portów i zobaczę, czy program nie zamarza gdzieś po drodze.

    Odpiszę na gg jak tylko odszukam dane do mojego konta w tym komunikatorze;)
  • #21
    adammruk
    Level 16  
    Ok:) Ja na dziś dałem spokój. Ściągnąłem też CodeVisionAVR, zobaczyłem że tam są gotowe biblioteki pod nasz wyświetlacz, skonfigurowałem wszystko i.... też lipa.. Od wtorku będę miał dostęp do warsztatu to wytrawię normalną płytkę i wtedy będę dopiero testował dalej.
  • #22
    andy1024
    Level 11  
    Za mną kilka godzin prób. Wczytywałem się w specyfikację i szczerze mówiąc nie wiem, w jaki sposób działa kod Radzia.
    Albo czegoś istotnego nie wiemy, albo mam niezwykłe szczęście do kupowania szrotu. To już drugi mój wyświetlacz graficzny, którego nie udało mi się uruchomić. Pierwszy był SED1520...
  • #23
    michalko12
    MCUs specialist
    Zamiast biadolić to byś pokazał jeden z drugim schemat podłączenia i kod oraz opis zachowania się układu.
  • #24
    andy1024
    Level 11  
    Opisuję bieżącą wersję - zmieniłem na PORTC, bo portu B używam do wyświetlania stanu.
    Wyświetlacz - podłączenia
    #1 VSS GND
    #2 VDD +3.3V
    #3 C86 GND
    #4 DB7 PD7
    #5 DB6 PD6
    #6 DB5 PD5
    #7 DB4 PD4
    #8 DB3 PD3
    #9 DB2 PD2
    #10 DB1 PD1
    #11 DB0 PD0
    #12 /RD PC6
    #13 /WR PC5
    #14 A0 PC4
    #15 /RES PC3
    #16 /CS1 PC0

    Użyto źródeł ze strony http://uc.ugu.pl/joomla/index.php?option=com_...kontroler-splc501c&catid=37:projekt&Itemid=60

    z uwzględnieniem zmiany pinów i portów, czyli:
    #define P_DANYCH_LCD PORTD
    #define P_DANYCH_LCD_I DDRD
    #define P_DANYCH_PIN PIND

    #define P_STER_LCD PORTC
    #define P_STER_LCD_I DDRC

    #define RD 6
    #define WR 5
    #define A0 4
    #define RES 3
    #define CS1 0

    Kompletne źródło w załączniku.

    Kolega, który napisał powyższy kod używał dwóch różnych portów do sterowania - pinem 0 portu B sterował sygnał /CS1 wyświetlacza, a ostatnimi czterema pinami portu D sterował sygnałami /RD,/WR,A0 i /RES.
    Dodałem też metodę lcd_inicjalizacja_interfejs() w której ustawiam wszystkie porty na wyjściowe (w tej wersji programu nie czytam statusów).

    Opis zachowania: działa wyłącznie podświetlenie, żadna z komend nie daje efektu - nawet DISPLAY ON/OFF.
  • #25
    michalko12
    MCUs specialist
    Sam stwierdziłeś, że znalazłeś błędy, kod przerabiałeś to skąd mamy wiedzieć na czym operujesz? Schemat wiele mówi, zwłaszcza podłączenie zasilań, czy wszystko jest zasilane z tego samego napięcia? Uruchomiłem ten LCD na dwóch procesorach i nie miałem najmniejszych problemów, z tym że po SPI, ale i na interfejsie równoległym tez nie było problemu w projekcie znajomego.
  • #26
    adammruk
    Level 16  
    michalko12 byłbyś może skłonny wrzucić działający na 100% kod? Wtedy będziemy mogli wykluczyć złe podłączenie itp.

    U mnie sytuacja jest ta sama, wszystko zasilane z jednego źródła 3,3V (zasilacz komputerowy uruchomiony "na sucho")

    A co z pinem C86? U mnie wisi w powietrzu, w DS jest opis że to jakaś opcja zmiany interfejsu, ale nie wiem co z nim zrobić do końca, choć wydaje mi się że powinien być podłączony do GND. Czy tak?
  • #27
    andy1024
    Level 11  
    michalko12 wrote:
    Sam stwierdziłeś, że znalazłeś błędy, kod przerabiałeś to skąd mamy wiedzieć na czym operujesz?

    Wkleiłem kod: main-out.c. Zawiera dokładnie to, co wrzucam na mikrokontroler.
    michalko12 wrote:

    Schemat wiele mówi, zwłaszcza podłączenie zasilań, czy wszystko jest zasilane z tego samego napięcia?

    Tak, wszystko z jednego napięcia.
    michalko12 wrote:

    Uruchomiłem ten LCD na dwóch procesorach i nie miałem najmniejszych problemów, z tym że po SPI, ale i na interfejsie równoległym tez nie było problemu w projekcie znajomego.

    No to prosimy o schemat podłączeń oraz kod źródłowy.

    adammruk wrote:

    A co z pinem C86? U mnie wisi w powietrzu w DS jest opis że to jakaś opcja zmiany interfejsu, ale nie wiem co z nim zrobić do końca, choć wydaje mi się że powinien być podłączony do GND. Czy tak?

    Tak. To jest wybór czy sterujemy z poziomu 8080 (intel) czy 6800 (motorola/mostek). Ja korzystam z tego pierwszego trybu. Chociaż może kolega powyżej, który już to uruchomił, się wypowie.
  • #28
    michalko12
    MCUs specialist
    W pierwszej kolejności wypróbuj sekwencję inicjalizacyjną z tego posta Link

    Na jakiej częstotliwości pracuje procesor?

    Dodano po 1 [minuty]:

    adammruk wrote:
    A co z pinem C86?


    Podłącz do masy.
  • #29
    adammruk
    Level 16  
    michalko12 wrote:
    W pierwszej kolejności wypróbuj sekwencję inicjalizacyjną z tego posta Link


    WOW! Zrobiłem tak i wyświetlacz pokazał same śmieci, czyli widocznie wyrzucił całą pamięć!

    Moja inicjalizacja wygląda tak:

    void lcd_inicjalizacja(void)
    {
    lcd_inicjalizacja_interfejs();

    CBI(P_STER_LCD,RES);
    _delay_ms(10);
    SBI(P_STER_LCD,RES);
    _delay_ms(10);


    CBI(P_DANYCH_LCD,7);
    asm("nop");
    lcd_zapis_komend(0xA2);
    lcd_zapis_komend(0xA0);
    lcd_zapis_komend(0xC8);
    lcd_zapis_komend(0x23);
    lcd_zapis_komend(0x81);
    lcd_zapis_komend(33);
    lcd_zapis_komend(0x2f);
    lcd_zapis_komend(0x40);
    lcd_zapis_komend(0xB0);
    lcd_zapis_komend(0x10);
    lcd_zapis_komend(0x00);
    lcd_zapis_komend(0xAF);

    }

    Dzięki wielkie! Widać już postęp!
  • #30
    michalko12
    MCUs specialist
    Kolejna sprawa to reset wyświetlacza, bez odpowiedniej obsługi pinu /RES po włączeniu zasilania wyświetlacz może nie wstawać więc proponuję też sterować go za pomocą pinu procesora.