Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VFD Futaba - migotanie wyświetlacza

gbr3 08 Lut 2008 01:44 1587 8
  • #1 08 Lut 2008 01:44
    gbr3
    Poziom 15  

    Witam!
    Mam wyświetlacz VFD 1x16 sterowany szeregowo i jest taki mały problem-gdy zapełnię ostatni znak wyświetlacza(pierwszy od prawej) to cały wyświetlacz zaczyna migotać. Próbowałem na wszelkie sposoby ale nie wiem dlaczego tak się dzieje. Oto przykładowy kod na M16 oraz pdf wyświetlacza:

    Code:

    #include <avr/io.h>
    #include <avr/interrupt.h>



    void czekaj (unsigned int time)
    {
    do
    {asm("NOP");}
    while(--time);
    }

    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 2stop bit */
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
    }

    void USART_Transmit( unsigned char data )
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) )
    ;
    /* Put data into buffer, sends the data */
    UDR = data;
    }

    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Get and return received data from buffer */
    return UDR;
    }




    int main(void)
    {
    DDRB=0b11111111;
    PORTB=0b00000000;
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    PORTB|=0b00000001;
    USART_Init(51);
    while(1)
    {

    USART_Transmit(0x10);
    USART_Transmit(0);
    USART_Transmit(0x04);
    USART_Transmit(0x20);
    USART_Transmit('A');
    USART_Transmit('B');
    USART_Transmit('C');
    USART_Transmit('D');
    USART_Transmit('E');
    USART_Transmit('F');
    USART_Transmit('G');
    USART_Transmit('H');
    USART_Transmit('I');
    USART_Transmit('J');
    USART_Transmit('K');
    USART_Transmit('L');
    USART_Transmit('M');
    USART_Transmit('N');
    USART_Transmit('O');
    USART_Transmit('P');
    czekaj(30000);


    }}

    http://lucaslab.grandhost.pl/temp/M16MD05CA_A.pdf

    0 8
  • #3 08 Lut 2008 12:58
    gbr3
    Poziom 15  

    Problem nie leży w zasilaniu wyświetlacz działa poprawnie nawet z zasilania z usb tylko jak wpisze na ostatni znak cokolwiek (w pętli for()) to jeżeli coś było na wyświetlaczu jeszcze napisane to zaczyna migotać a jeżeli zrobię tak

    Code:

    int main(void)
    {
    DDRB=0b11111111;
    PORTB=0b00000000;
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    czekaj(30000);
    PORTB|=0b00000001;
    USART_Init(51);
    czekaj(30000);

    USART_Transmit('A');
    USART_Transmit('B');
    USART_Transmit('C');
    USART_Transmit('D');
    USART_Transmit('E');
    USART_Transmit('F');
    USART_Transmit('G');
    USART_Transmit('H');
    USART_Transmit('I');
    USART_Transmit('J');
    USART_Transmit('K');
    USART_Transmit('L');
    USART_Transmit('M');
    USART_Transmit('N');
    USART_Transmit('O');
    USART_Transmit('P');
    }

    to wyświetlacz nie migocze tylko takie sterowanie to trochę niezbyt mi pasuje :(
    Mam nadzieje że mniej więcej wiadomo o co chodzi :D

    0
  • #4 08 Lut 2008 14:50
    markosik20
    Poziom 33  

    No i będzie migotał jeżeli któryś z tych komend

    Code:
    USART_Transmit(0x10); 
    
    USART_Transmit(0);
    USART_Transmit(0x04);
    USART_Transmit(0x20);


    to czyszczenie wyświetlacza.

    0
  • #5 08 Lut 2008 15:35
    gbr3
    Poziom 15  

    Komenda 0x10 -pozycja kursora za nią wysyła się numer znaku do którego ma sie przesunąć kursor 0-na początek wyświetlacza
    komenda 0x04 służy do ustawiania jasności wyświetlacza z nią wysyła sie jeden ze stopni jasności wszystko jest w dokumentacji.Wygląda na to że wyświetlacz sam sie czyści i to tylko jeżeli ostatni znak jest użyty dziwne to trochę bo np mogę zapisać cały wyświetlacz i zakończyć transmisję wtedy nie miga ale po wznowieniu i zapisaniu tego samego (np w pętli) to już migocze

    0
  • #6 08 Lut 2008 15:39
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #7 08 Lut 2008 15:48
    gbr3
    Poziom 15  

    dobra wywaliłem to jest przed pętlą ale to i tak nic nie dało

    0
  • #8 08 Lut 2008 16:39
    markosik20
    Poziom 33  

    gbr3 napisał:
    mogę zapisać cały wyświetlacz i zakończyć transmisję wtedy nie miga ale po wznowieniu i zapisaniu tego samego (np w pętli) to już migocze


    No bo miganie bierze się pewnie stąd że Ty cały czas wysyłasz do LCD te same dane. Ile wynosi u Ciebie to opóźnienie
    Code:
    czekaj(30000);

    Spróbuj poeksperymentować, zwiększyć opóźnienie, wysłać mniejszą ilość znaków. A jaki jest czas przetwarzania tego LCD?

    0
  • #9 08 Lut 2008 23:48
    gbr3
    Poziom 15  

    To nie jest lcd a poza tym jak do lcd wysyłam te same dane to nie migocze, w linku w pierwszym poście jest datasheet na 7 stronie jest transmisja szeregowa opisana nie mam pojęcia co jest nie tak chyba będę musiał jakoś go reklamować :(

    Dodano po 4 [godziny] 22 [minuty]:

    Problem rozwiązałem przypadkiem wszystko już działa
    Dzięki za podpowiedzi pozdro!

    0