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

[atmega8][winavr]Wyświetlacz nokia 3510i nie rusza

pawelvod 30 Sty 2011 18:21 4160 6
  • #1 9079255
    pawelvod
    Poziom 18  
    Witam. Mam już nerwa mocno naruszonego przez ten wyświetlacz więc proszę o pomoc;). Nie byłem pewien czy lutowanie wyświetlacza jest ok więc kupiłem na allegro moduł który ma wyjścia goldpin. Żeby nie było problemu z napięciem dałem stabilizację napięcia 3v3 na lp2950. Wobec czego mikrokontroler (zasilany 3v3) jest podłączony bezpośrednio do wyświetlacza (bez dzielników itd.) Zielona dioda widoczna na zdjęciu "pożycza" sygnał z sdata (i mruga po zaprogramowaniu mikrokontrolera). Prościej już sprawy nie mogłem rozwiązać, bo próbowałem dzielniki napięcia z 5V z wyświetlaczami które lutowałem i nic. Na zdjęciu aktualny układ i program którego używam. Mikrokontroler 8Mhz. Oczywiście cholerstwo nie działa. Czarny ekran. Tylko podświetlenie led jest.
    [atmega8][winavr]Wyświetlacz nokia 3510i nie rusza
    kod którego używam:

    
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    #define PORT_3510i PORTD
    #define SCK_3510i 3
    #define SIO_3510i 2
    #define CS_3510i  1
    #define RES_3510i 4 //może być podpięty pod 3.3V na stałe
    #define CMD 0
    #define DATA 1
    
    void init_3510iport(void)
    {
    DDRD = (1<<SIO_3510i)|(1<<SCK_3510i)|(1<<CS_3510i);
    PORTD=0xff;
    }
    
    void send_to_lcd(unsigned char data, unsigned char op_kind)
    {
       
       int i;
       PORT_3510i &= ~(1<<CS_3510i); //CS ustaw na zero
       PORT_3510i &= ~(1<<SCK_3510i);   
       if (op_kind==0)
       {                         //komenda - wyslij zero
          PORT_3510i &= ~(1<<SIO_3510i);
       }
       else
       {                        //dane - wyslij jeden   
          PORT_3510i |= 1<<SIO_3510i;
       }
       PORT_3510i |= 1<<SCK_3510i;
       //transmisja bitow D7-D0
       for (i=7; i>=0; i--)
       {
          PORT_3510i &= ~(1<<SCK_3510i);
       if ((data & _BV(i))==0)
       {
       PORT_3510i &= ~(1<<SIO_3510i);
       }
       else
       {
       PORT_3510i |= 1<<SIO_3510i;
       }
       PORT_3510i |= 1<<SCK_3510i;
       }
       PORT_3510i |= 1<<CS_3510i;
    
    }
    
    
    void init_3510i(void)
    {
    	_delay_ms(1000);
    //inicjacja wyswietlacza nokia 3510i
    //hardware reset (gdy pin reset podpięty)
    
        PORT_3510i &= ~(1<<RES_3510i);
        _delay_ms(5);
        PORT_3510i |= 1<<RES_3510i | 1<<SCK_3510i | 1<<SIO_3510i | 1<<CS_3510i;
        _delay_ms(5);
       
        send_to_lcd(0x00, CMD);      // NOP
        _delay_ms(10); 
    	send_to_lcd(0x01, CMD);        // LCD Software Reset
        _delay_ms(10);
        send_to_lcd(0xC6, CMD);        // Initial Escape
       _delay_ms(10);
    // phase 2: display setup 1
        send_to_lcd(0xB9, CMD);        // Refresh set
        send_to_lcd(0x00, DATA);
        send_to_lcd(0xB6, CMD);        // Display Control
        send_to_lcd(128, DATA);
        send_to_lcd(128, DATA);        //no N line inversion
        send_to_lcd(129, DATA);        //frame freq; bias rate of LCD drive voltage; 98x67; diplay duty=1/67;
        send_to_lcd(84, DATA);
        send_to_lcd(69, DATA);
        send_to_lcd(82, DATA);
        send_to_lcd(67, DATA);
        send_to_lcd(0xB3, CMD);        // Gray Scale Position
        send_to_lcd(1, DATA);
        send_to_lcd(2, DATA);
        send_to_lcd(4, DATA);
        send_to_lcd(8, DATA);
        send_to_lcd(16, DATA);
        send_to_lcd(30, DATA);
        send_to_lcd(40, DATA);
        send_to_lcd(50, DATA);
        send_to_lcd(60, DATA);
        send_to_lcd(70, DATA);
        send_to_lcd(80, DATA);
        send_to_lcd(90, DATA);
        send_to_lcd(100, DATA);
        send_to_lcd(110, DATA);
        send_to_lcd(127, DATA);
        send_to_lcd(0xB5, CMD);        // Gamma Curve Set
        send_to_lcd(1, DATA);
        send_to_lcd(0xBD, CMD);        // Common driver setup
        send_to_lcd(0, DATA);
    //phase 3: power supply
        send_to_lcd(0xBE, CMD);        // Power Control
        send_to_lcd(4, DATA);
        send_to_lcd(0x11, CMD);        // Sleep out
        send_to_lcd(0xB7, CMD);        // Temperature gradient set
       for (int i=0; i<=14;i++)
       {
        send_to_lcd(0, DATA);
       }
        send_to_lcd(0x03, CMD);        // Booster Voltage ON
        _delay_ms(40);
        send_to_lcd(0x20, CMD);        // Inversion control (OFF)
        send_to_lcd(0xBA, CMD);        // Voltage control
        send_to_lcd(117, DATA);
        send_to_lcd(3, DATA);
        send_to_lcd(0x25, CMD);        // Write contrast
        send_to_lcd(63, DATA);
        send_to_lcd(0x2D, CMD);        // Colour set (only for 8-bit/pixel)
        send_to_lcd(0x00, DATA);       // RED
        send_to_lcd(0x02, DATA);
        send_to_lcd(0x04, DATA);
        send_to_lcd(0xC6, DATA);
        send_to_lcd(0x09, DATA);
        send_to_lcd(0x0b, DATA);
        send_to_lcd(0x0d, DATA);
        send_to_lcd(0x0f, DATA);
        send_to_lcd(0x00, DATA);       // GREEN
        send_to_lcd(0x02, DATA);
        send_to_lcd(0x04, DATA);
        send_to_lcd(0xC6, DATA);
        send_to_lcd(0x09, DATA);
        send_to_lcd(0x0b, DATA);
        send_to_lcd(0x0d, DATA);
        send_to_lcd(0x0f, DATA);
        send_to_lcd(0x00, DATA);       // BLUE
        send_to_lcd(0x05, DATA);
        send_to_lcd(0x0a, DATA);
        send_to_lcd(0x0f, DATA);
        send_to_lcd(0x3A, CMD);        // 8bpp
        send_to_lcd(0x02, DATA);
        send_to_lcd(0x29, CMD);        // Display On
       
    }
    
    int main(void)
    {
    
    //DDRD=0b11000000;
    init_3510iport();
    init_3510i();
    //PORTD=0b00000000;
    unsigned int n;
    unsigned char kolor;
    while(1)
    {
    	send_to_lcd(0x2C, CMD);
    
    	for(n=0;n<6566;n++)
    		{
    		if(n==0)kolor=0b11111111;
    		if(n==2000)kolor=0b00011100;
    		if(n==4000)kolor=0b00000011;
    		send_to_lcd(kolor, DATA);
    		}
    
    }
    return 0;
    }
    
  • #2 9090245
    wxw
    Poziom 14  
    Mam 3 oryginalne wyświetlacze od tej noki i każdy jest inny:
    1.
    [atmega8][winavr]Wyświetlacz nokia 3510i nie rusza
    2.
    [atmega8][winavr]Wyświetlacz nokia 3510i nie rusza
    3.
    [atmega8][winavr]Wyświetlacz nokia 3510i nie rusza


    I tak w telefonie wszystkie działają poprawnie.

    Wyświetlacz nr.1 działa właśnie z takim programem jakiego używasz. , ale ma "lipne kolory" oraz piksele są dziwnie adresowane to znaczy :
    0,1........98
    3333......3430
    99.........196

    itd. do

    ......6566
    ......3332
    z programem który zamieszczam nie działa .

    Wyświetlacz nr.2

    Najlepszy z tych 3 .Ma żywe kolory . Działa z obydwoma programami . Adresowanie pikseli normalne "poklei".

    Wyświetlacz nr.3
    Nie działa .

    Także spróbuj program2 .

    Teraz pytanie do osób które bawiły się tymi wyświetlaczami . Jak to możliwe że wszystkie poprawnie działają w noki.
  • #3 9096813
    mgiro
    Poziom 22  
    Wykorzystałem ten kod, i wyświetlacz dalej nie ruszył. Uszkodzony, czy inny sterownik?? Może inaczej trzeba zainicjować??
  • #4 9101163
    pawelvod
    Poziom 18  
    Spróbuję kod tylko muszę do sprzętowego SPI podłączyć wyświetlacz bo puki co programowo wysyłam. Nie bardzo wiem co siedzi na tej miojej płytce. Jakieś 2 kondensatory tam są i 2 diody. Mam jakiś kod do tego dołączony pod 51 i jak patrzę to tam jakies info czyta z wyświetlacza i 4 rodzaje rozpoznaje i w zależności od tego inicializuje. Na razie kupiłem jeszcze jerden wyświetlacz i podlutuje go sam. Przy okazji masz jakiś schemat sprawszony który działa u ciebie z tym kodem?
  • Pomocny post
    #5 9103233
    wxw
    Poziom 14  
    pawelvod napisał:
    Spróbuję kod tylko muszę do sprzętowego SPI podłączyć wyświetlacz bo puki co programowo wysyłam. Nie bardzo wiem co siedzi na tej miojej płytce. Jakieś 2 kondensatory tam są i 2 diody. Mam jakiś kod do tego dołączony pod 51 i jak patrzę to tam jakies info czyta z wyświetlacza i 4 rodzaje rozpoznaje i w zależności od tego inicializuje. Na razie kupiłem jeszcze jerden wyświetlacz i podlutuje go sam. Przy okazji masz jakiś schemat sprawszony który działa u ciebie z tym kodem?


    Mój schemat wygląda tak :
    Lcd
    1-- +3,3 z LF33CV
    3--gnd
    6-- +3,3 z LF33CV
    7-- +3,3 z LF33CV
    8--elektrolit 1uF

    2,4,5 podłączone przez dzielniki 10k do gnd ,5,6k do atmegi.
    Kwarc zewnętrzny 8Mhz,atmega zasilana 5v.
  • #6 9105778
    pawelvod
    Poziom 18  
    Na reszcie zadziałał dziad jeden:).
    Po prostu zamówiłem inny wyświetlacz i przykręciłem go do tej płytki. Zarówno ten mój kod jak i Twój poszły za pierwszym razem. Ten który nie działa wygląda na oryginalny nokii (wytłoczony napis). I jest dużo staranniej wykonany niż ten co teraz mi działa. Spróbuję więc zmusić go do pracy. Mam kod na 51 który dodawał sprzedawca i ma to na tym chodzić. Z tego co widzę on coś czyta z wyświetlacza i na podstawie tego ustala metodę inicializacji. Jakbyś miał 51 pod ręką i mógłbyś sprawdzić czy wszystkie zaświecą było by dobrze. Puki co w wolnej chwili spróbuję przekonwertwać ten kod na atmegę i zobaczę. Dam znać jak skończę. Dzięki za pomoc.
  • #7 9109542
    pawelvod
    Poziom 18  
    Heh.
    8 godzin i rozwiązałem. Wszystkie wyświetlacze które mam zaczęły świecić na tym kodzie. Jakby nie chciał się automatycznie typ wykryć można w pliku3510i.c w linii 55 zmieniać typy od 'A' do 'D'. (czasem nie czyta typu prawidłowo). Kod pod AVR korzystający z dowolnego portu i pinów.
REKLAMA