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

[ATmega32][C] LCD Nokia 6100/6610 -> KAmodTFT2

mgiro 03 Lut 2011 11:55 10069 27
  • #1
    mgiro
    Poziom 22  
    Witam,

    Pracuję na zestawie ZL3AVR z ATmega32 i kwarcem wewnętrznym 8MHz. Kupiłem ostatnio moduł z Kamami KAmodTFT2 :


    [ATmega32][C] LCD Nokia 6100/6610 -> KAmodTFT2
    http://kamami.pl/index.php?ukey=product&productID=138918

    Czy komuś udało się uruchomić ten moduł? Jaki jest tam przeważnie sterownik? Pewnie przykładowego kodu (programu testowego )w języku C lub bibliotek nikt nie stworzył ??
  • #2
    Konto nie istnieje
    Poziom 1  
  • #4
    mgiro
    Poziom 22  
    atom1477 miałem na myśli, czy to prawdo co piszą, że jest tam sterownik PCF8833 przeważnie. Przykład jest w C, ale dla STM32. Ewentualnie można by przerobić na AVR, ale jest zawsze niepewność, czy będzie działać poprawnie.

    Przydała by się jeszcze biblioteka (przykładowy kod) dla tego wyświetlacza ze sterownikiem Epson S1D15G00, którym steruje mikrokontroler z rodziny AVR
  • #5
    piotrva
    VIP Zasłużony dla elektroda
    a jakiego koloru masz płytkę pcb na samym wyświetlaczu?
    jak czerwona to na 95% pcf8833
    jak zielona to na 95% epson
  • #6
    mgiro
    Poziom 22  
    Jest tak zabudowana, że nie widać niestety.
  • #8
    mgiro
    Poziom 22  
    Mój wygląda tak:

    [ATmega32][C] LCD Nokia 6100/6610 -> KAmodTFT2

    To jaki będzie sterownik na 95%??
  • #10
    mgiro
    Poziom 22  
    ok, spróbuję uruchomić ten przykładowy program, do którego podałeś link wcześniej
  • #11
    mgiro
    Poziom 22  
    piotrva wiesz może, jak to złącze smd się nazywa, z którym jest połączona taśma??
  • #12
    piotrva
    VIP Zasłużony dla elektroda
    kiedyś czytałem jak się to nazywa, ale już zapomniałem
    jakby co:
    http://www.hurtowniagsm.pl/p1029,zlacze-lcd-nokia-3100-6610-6100-7210-oryginal.html
    a coś nie tak z tym złączem na płytce?
  • #13
    mgiro
    Poziom 22  
    Nie, w porządku. Tylko pytam na przyszłość. Jak kupie wyświetlacz nowy, to będę musiał użyć tego złącza, aby połączyć z laminatem (goldpinami).

    Szukałem na allegro. ale tam nie ma takich rzeczy.
  • #14
    mgiro
    Poziom 22  
    piotrva odpaliłem wyświetlacz wykorzystujac biblioteke, którą podałeś w linku. Może jeszcze wiesz cos o programie, co przerabie bmp do tego wyswietlacza dla trybu 12 bitowego?? Bo dla 8-bitowego to gdzieś znalazłem taki program, ale wówczas obraz jest zniekształcony. A z tego co patrzyłem, to z ta biblioteka nie ma opcji, aby wyświetlić obraz w trybie 8 bitowym.
  • #15
    piotrva
    VIP Zasłużony dla elektroda
    Szczerze to sam szukam takiego programu do konwersji na tryb 12-bit, niestety nie znalazłem...
    napisałem za to funkcję , która pozwala na wyświetlanie grafik z konwertera dołączanego do bascom'a (8-bit), grafikę trzeba wcześniej:
    1. załadowac do konwertera
    2. wygenerować linie Data ... w trybie BEZ KOMPRESJI
    3. zamienić &H na 0x i Data na ,
    4. wkleić do szablonu obrazka z pliku *.h i uzupełnić dane o obrazku (szerokość, wysokość, ilość bajtów danych zapisana w 2 bajtach=szerokość*wysokość w naszym przypadku, bo 1 bajt = 1 pixel)
    i moja funkcja LCD_Bitmap_bas(...); wyświetli taki obrazek
    W załączniku:
    1. zmodyfikowana biblioteka z dodaną funkcją
    2. przykładowy obrazek
    3. przykładowy program z wyświetlaniem obrazka
  • #16
    esiu88
    Poziom 11  
    Mam pytanie. Próbowałem odpalić ten wysw na atmedze 128 na programie z and tech po wcześniejszym zmienieniu nóżek sterujących odpowiednio dla atmegi 128. Powinienem jeszcze któryś zanegować, bo niestety nie chce się odpalić.
  • #17
    piotrva
    VIP Zasłużony dla elektroda
    Jakie objawy? Czyżby wyświetlacz cały czas czarny, a czasem przy ruszeniu mignie podświetlanie?
  • #18
    esiu88
    Poziom 11  
    podświetlenie jest cały czas. Próbowałem nawet zanegować niektóre bity w programie ale efekt ten sam. Może jakiś detal przy konfiguracji różni się dla 128 i 32??

    Dodano po 8 [minuty]:

    może jeszcze dodam
    sce->pb0
    res->pb7
    clk->pb1
    din->pb2

    a w programie zmienione

    #define LCD_CS(x) PORTB= (x)? (PORTB|(1<<PB0)) : (PORTB&~(1<<PB0))
    #define LCD_CLK(x) PORTB= (x)? (PORTB&~(1<<PB1)) : (PORTB|(1<<PB1))
    #define LCD_DATA(x) PORTB= (x)? (PORTB&~(1<<PB2)) : (PORTB|(1<<PB2))
    #define LCD_RESET(x) PORTB= (x)? (PORTB&~(1<<PB7)) : (PORTB|(1<<PB7))
    #define LCD_BACKLIGHT(x) PORTD= (x)? (PORTD|(1<<PD0)) : (PORTD&~(1<<PD0))

    Dodano po 51 [minuty]:

    Doszedłem o co chodzi. Należało wyłączyć tryb zgodności z atmega103
  • #19
    mgiro
    Poziom 22  
    piotrva Próbowałeś może korzystając z tej biblioteki wyświetlić grafikę w trybie 8-bitowym??
  • #20
    piotrva
    VIP Zasłużony dla elektroda
    nie dalej jak 4 posty wyżej o tym właśnie piszę :D
    piotrva napisał:

    (...)napisałem za to funkcję , która pozwala na wyświetlanie grafik z konwertera dołączanego do bascom'a (8-bit)...
  • #21
    bednyk
    Poziom 13  
    Witam,

    mam moduł lcd podany w temacie i próbuję uruchomić go za pomocą uC PIC. Poniżej kod:

    [syntax=c]/** C O N F I G U R A T I O N   B I T S ******************************/
    
    //najnowszy!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    #pragma config FOSC = INTIO67
    #pragma config WDTEN = OFF, LVP = OFF, MCLRE = OFF
    
    /** I N C L U D E S **************************************************/
    #include "p18f45k20.h"
    #include <delays.h>
    
    #define LCD_Reset			LATCbits.LATC0    // LCD_Reset
    #define MOSI				LATCbits.LATC5    // DX0  output
    #define CLK					LATCbits.LATC3    // CLK  output
    #define CS			    	LATCbits.LATC7    // CS   output
    
    /** D E C L A R A T I O N S ******************************************/
    
    void InitLcdNokia(void);
    
    /** pozniej do pliku naglowkowego .h   **/
    #define WHITE     0xFFF
    #define BLACK     0x000
    #define RED       0xF00
    #define GREEN     0x0F0
    #define BLUE      0x00F
    #define CYAN      0x1FF
    #define MAGENTA   0xF0F
    #define YELLOW    0xFF0
    #define GRAY	  0x222
    #define LIGHTBLUE 0xADE
    #define PINK      0xF6A
    
    // Philips PCF8833 LCD controller command codes 
    #define NOP    0x00  // nop 
    #define SWRESET    0x01  // software reset 
    #define BSTROFF    0x02  // booster voltage OFF 
    #define BSTRON     0x03  // booster voltage ON 
    #define RDDIDIF    0x04  // read display identification 
    #define RDDST      0x09  // read display status 
    #define SLEEPIN    0x10  // sleep in 
    #define SLEEPOUT    0x11  // sleep out 
    #define PTLON      0x12  // partial display mode 
    #define NORON      0x13  // display normal mode 
    #define INVOFF     0x20  // inversion OFF 
    #define INVON      0x21  // inversion ON 
    #define DALO      0x22  // all pixel OFF 
    #define DAL      0x23  // all pixel ON 
    #define SETCON   0x25  // write contrast 
    #define DISPOFF    0x28  // display OFF 
    #define DISPON     0x29  // display ON 
    #define CASET      0x2A  // column address set 
    #define PASET      0x2B  // page address set 
    #define RAMWR      0x2C  // memory write 
    #define RGBSET     0x2D  // colour set 
    #define PTLAR      0x30  // partial area 
    #define VSCRDEF    0x33  // vertical scrolling definition 
    #define TEOFF      0x34  // test mode 
    #define TEON      0x35  // test mode 
    #define MADCTL     0x36  // memory access control 
    #define SEP      0x37  // vertical scrolling start address 
    #define IDMOFF     0x38  // idle mode OFF 
    #define IDMON      0x39  // idle mode ON 
    #define COLMOD     0x3A  // interface pixel format 
    #define SETVOP     0xB0  // set Vop   
    #define BRS      0xB4  // bottom row swap 
    #define TRS      0xB6  // top row swap 
    #define DISCTR     0xB9  // display control 
    #define DOR2      0xBA  // data order 
    #define TCDFE      0xBD  // enable/disable DF temperature compensation 
    #define TCVOPE     0xBF  // enable/disable Vop temp comp 
    #define EC      0xC0  // internal or external  oscillator 
    #define SETMUL     0xC2  // set multiplication factor 
    #define TCVOPAB    0xC3  // set TCVOP slopes A and B 
    #define TCVOPCD    0xC4  // set TCVOP slopes c and d 
    #define TCDF      0xC5  // set divider frequency 
    #define DF8COLOR    0xC6  // set divider frequency 8-color mode 
    #define SETBS      0xC7  // set bias system 
    #define RDTEMP     0xC8  // temperature read back 
    #define NLI      0xC9  // n-line inversion 
    
    void WriteSpiData(unsigned char data);
    void InitLcdNokia(void);
    void SetContrast(unsigned char con);
    void ClsLCD(short color);
    void delay_50ms(void);
    void WriteSpiCommand(unsigned char command);
    void clock_8bit(unsigned char bits_in);
    
    
    void WriteSpiCommand(unsigned char command)
    {
    		CLK=0;			   // ustaw SCLK w stan niski
    		CS=1;   // CS=0
    		MOSI=0;   // command 0
    	    clock_8bit(command);
    }
    
    void clock_8bit(unsigned char bits_in)
    {
    	unsigned char bitcnt;
    	CLK=1;
    	for (bitcnt = 8; bitcnt >0; bitcnt--)
    	{	
    		CLK=0;   // CLK=0			   // ustaw SCLK w stan niski
    		if ((bits_in&0x80)==1)
    			MOSI=1;    // MSB goes first
    		else
    			MOSI=0;    // MSB goes first
    		CLK=1;   // CLK=1			   // ustaw SCLK w stan wysoki
    	
    		bits_in = bits_in << 1;	   //  Logical shift data by 1 bit left		
    	}
    	CS=0;
    }
    
    void WriteSpiData(unsigned char data) 
    {
    	CLK=0;			   // ustaw SCLK w stan niski
    	CS=1;   // CS=0
    	MOSI=1;    // dane 1
    	clock_8bit(data);
    }
    
    
    void InitLcdNokia(void) 
    {
    	int i;
    	// Hardware reset
    	// linie interfejsu SPI inicjowane w stan wysoki
    	CS=1;
    	CLK=0;
    	MOSI=0;
    	
    	LCD_Reset = 0; // Reset nieaktywny
    		delay_50ms();
    	
    	LCD_Reset = 1; // Reset wyswietlacza aktywny
    		delay_50ms();
    		
    	LCD_Reset = 0; // Reset nieaktywny
    		delay_50ms();
    	
    	
    	// Software reset
    	WriteSpiCommand(SWRESET);
    	delay_50ms();
    	
    	// Sleep out
    	WriteSpiCommand(SLEEPOUT);
    
    	// Inversion on (command 0x20)
    	WriteSpiCommand(NORON); 
    	
    	WriteSpiCommand(BSTRON); //BoostON
    	
    	// Memory access controler (command 0x36)
    	WriteSpiCommand(MADCTL);
    	WriteSpiData(0xF0);
    	
    	//contrast - write_contrast (command 0x25)
    	WriteSpiCommand(SETCON); //SETCON
    	WriteSpiData(0x3a);  //contrast 0x30
    	delay_50ms();
    	
    	// Display On (command 0x29)
    	WriteSpiCommand(DISPON);
    	
    	// Color Interface Pixel Format (command 0x3A)
    	WriteSpiCommand(COLMOD);
    	WriteSpiData(0x03); // 0x03 = 12 bits-per-pixel
    	WriteSpiCommand(NOP);
    		
    }
    
    // This function sets contrast. con should be value in range <-64...63>
    void SetContrast(unsigned char con)
    {
    	WriteSpiCommand(SETCON);
    	WriteSpiData(con);
    }
    
    void ClsLCD(short color) {
    int i;
    // ustawienie zakresu zmian licznika adresowego stron pamięci
    WriteSpiCommand(PASET);
    WriteSpiData(0);    //adres początkowy
    WriteSpiData(131);  //adres końcowy
    // ustawienie zakresu zmian licznika adresowego kolumn
    WriteSpiCommand(CASET);
    WriteSpiData(0);    //adres początkowy
    WriteSpiData(131);  //adres końcowy
    // zapisanie pamięci kolorem z
    WriteSpiCommand(RAMWR);
    for(i = 0; i < ((131 * 131) / 2); i++) {
    WriteSpiData((color >> 4) & 0xFF);    //kopiowanie 12 bitów dla jednego piksela na 24 bity dla 2 pikseli
    WriteSpiData(((color & 0xF) << 4) | ((color >> 8) & 0xF));
    WriteSpiData(color & 0xFF);
    }
    i=1;
    }
    
    void delay_50ms(void){
    	Delay10KTCYx(10); //czekaj 100ms  - fcy=0,5us *10 000 = 5ms * 10 = 50ms
    	}
    
    void main (void)
    {
    	int i,k,l;
    	unsigned char status;
    	
    	TRISD = 0b00000000; 	// PORTD bit 7 to output (0); bits 6:0 are inputs (1)
    	//LATDbits.LATD5 = 5;
    	TRISC = 0b00000000;     	// PORTD bits 7:0 are all outputs (0)
    	//TRISCbits.TRISC7 = 1;  // is input
    
        OSCCON = 0x60;          // IRCFx = 110 8MHz
        OSCTUNEbits.PLLEN = 0;  // x4 PLL disabled  
    
    	test();
    
    	InitLcdNokia();
    	
    	ClsLCD(GREEN);
    
    	ClsLCD(WHITE);
    
    	ClsLCD(BLACK);
    	while (1)
    	{
    	;
    	}
    }
    
    void delay()
    {	
    	int i;
    	for (i=0;i<32000;i++)
    			;
    	
    }[/syntax]


    Niestety program nie działa. Sterownik na 99% PCF8833 Philipsa.

    Czy ktoś dostrzega jakiś błąd w moim kodzie?

    Opis wyprowadzeń ze strony producenta Kamodtft2
    Nr styku Nazwa Opis Kierunek
    1 CLK Sygnał zegarowy taktujący dane na linii DIN Wejście
    2 GND Masa zasilania Zasilanie
    3 DIN Wejście danych synchronizowane sygnałem CLK Wejście
    4 – – –
    5 – – –
    6 – – –
    7 RES Sygnał zerowania (aktywny stan wysoki) Wejście - czy to oznacza, że aktywowanie sygnału Reset urządzenia jest za pomocą stanu wysokiego na linii?
    8 – – –
    9 +V Zasilanie 3,3 lub 5 VDC Zasilanie
    10 SCE Wejście aktywujące interfejs szeregowy (aktywny stan wysoki) Wejście - czy to oznacza, że wybór aktynego urządzenia jest za pomocą stanu wysokiego na linii? pytam ponieważ program nie działa, próbowałem z dwoma opcjami ale efekt jest taki sam.

    W programie próbuję zapalić wszystkie piksele wyświetlacza na 3 różne kolory.


    Czy komuś udało się uruchomić ten moduł ?
  • #22
    zulugula
    Poziom 19  
    Witam przymierzam się do kupna lcd z noki 6100 i mam pytanie co do koloru taśmy a sterownika.
    Piotrva napisał
    Cytat:
    jak czerwona to na 95% pcf8833
    jak zielona to na 95% epson

    tylko ze znalazłem taką notkę "Philips controller has the green sticker label "NXP" on the LCD onnector. "
    link: http://www.gravitech.us/13secogrlcd.html
    czyli podobno philipsa (pcf) ma lepszy(większy) konektorek od taśmy przez co jest się łatwiej podpiąć i ma kolor....? wie ktoś na 100% ?
  • #23
    piotrva
    VIP Zasłużony dla elektroda
    Cóż, zwykle pcf mają (choć nie wszystkie - starsze mają na 100%) z tyłu coś takiego:
    [ATmega32][C] LCD Nokia 6100/6610 -> KAmodTFT2
    A tu chodzi o nalepkę, a kolory płytek w 95% przypadków się zgadzają. Ale zawsze jest te 5% wyjątków, a nalepka swoją drogą jest dla fabrycznie nowych lcdków.
  • #24
    DareckiD
    Poziom 13  
    Witam, mam pytanie do kolegów, która z funkcji w zamieszczonej przez piotrva bibliotece jest do odwrócenia obrazu?? Pytam bo wyświetlany tekst jest odwrócony o 180* i do tego literki są odbiciem lustrzanym.
  • #25
    piotrva
    VIP Zasłużony dla elektroda
    Nie ma jednej funkcji, w procedurze LCD_Int:
    
    SendLcd(LCDCommand,MADCTL);  // memory access control - odwrocenie
    SendLcd(LCDData,0xF0); //Nowy LCD
    

    Należy podać odpowiednią wartość zamiast 0xF0, za co są odpowiedzialne poszczególne bity można znaleźć w karcie katalogowej lub tutaj: http://and-tech.pl/forum/viewtopic.php?t=1246#3328 (kod w bascom, ale opis bitów uniwersalny)
  • #26
    DareckiD
    Poziom 13  
    Witam, dziękuję za pomoc -działa, a magiczna liczba wpisana w linii wskazanej przez kolegę to 50. W załączeniu dla chętnych wzór płytki testowej którą zaprojektowałem w wolnym czasie.
    [ATmega32][C] LCD Nokia 6100/6610 -> KAmodTFT2
  • #27
    piotrva
    VIP Zasłużony dla elektroda
    A udało się koledze zdobyć te złączki?
    Poza tym pomyślałbym nad jakimś mocowaniem LCD, chyba, ze będzie przyklejony do płytki
  • #28
    DareckiD
    Poziom 13  
    Złączka jak i LCD jest pozyskana ze starego aparatu tel komórkowego. Wylutowanie jej i ponowny montaż to masakra, ale się udało. Co do przyklejenia LCD do PCB wstrzymałem się gdyż jestem szczęśliwym posiadaczem większej ilości wyświetlaczy (z zieloną taśmą i czerwoną). Uczę się języka C na stare lata i sprawdazałem/przekładałem, LCD-ki w celu sprawdzenia, który będzie działał pod pobranymi bibliotekami z sieci.
    Pozdrawiam i jeszcze raz dzięki.
REKLAMA