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

atmega16 + wyświetlacz + reset -co jest nie tak?

5657jz 12 Kwi 2011 15:50 1207 5
REKLAMA
  • #1 9391587
    5657jz
    Poziom 14  
    Atmega16 z kwarcem 4MHz napędza wyświetlacz z KS0066U
    Jak działa: -włączam zasilanie - wyświetlacz ustawia się na 4 linie itd. -OK
    Programowo, chcę wyświetlić napis na początku każdej linii, długości 9 znaków. + cyfrę.
    - wyświetla napis: 0..3 znaku-nie wyświetla, od 4..8 losowe znaki , 9zn. OK, oraz cyfrę-OK (tak w każdej z czterech linii)
    -teraz RESET: wyświetlacz zaczyna działać z ustawieniami domyślnymi( 1 linia). => Dlaczego tak sie dzieje ?
    - Wyłączam zasilanie, włączam ponownie -wyświetlacz ustawia sie poprawnie. Dalej działa, jak opisałem wyżej.

    Napięcie na kwarcu ok. 1V i sinusoida 4MHz (dotykając sondą do nogi kwarcu)
    Zasilanie 5,1V
    Czy może Ktoś podpowiedzieć jaka jest różnica pomiędzy, załączeniem zasilania a resetem uC ???

    PS: Do moderatora. Jaśniej przedstawić problemu nie umiem. Gdzie można edytować temat ?[/img]
    void main(void)
    {
    ////////////
    unsigned char napis[]="TOLINIA=>"; 
    
    char x;
    char i;
    char bufor[2];
    
    //////////////
        menu_init();
    	lcd_init();  
    		while(1)
    		{
    			if(bit_is_clear(PIN(MENU_PORT),MENU))       		
    			{
    			menu();
    
    			} // endif MENU
    		 		if(bit_is_clear(PIN(MENU_PORT),X_MENU))
    				{
    				    	do
    						{
    							for (x=0;x<=3;x++)
    							{
    							    lcd_clrscr();
    								lcd_gotoxy(0,x);  // x-kolumna y-linia (linia 1 = 0 
    
    									for(i=0;i<=10;i++)
    									{
    								    	lcd_write(napis[i],1);
    									}
    								sprintf(bufor,"%d",x);
    						    	lcd_write(bufor[0],1);
    								
    									while (bit_is_set(PIN(MENU_PORT),Y_MENU));
    								_delay_ms(1000);
    								lcd_clrscr();
    								
    							}// end for
    						} while (bit_is_set(PIN(MENU_PORT),Y_MENU));
    				}// end X_MENU
            }// end while(1)
    	  
    }//end main
    

    https://obrazki.elektroda.pl/9863731600_1302621200.gif
  • REKLAMA
  • REKLAMA
  • #3 9392601
    Krauser
    Poziom 26  
    Różnica pomiędzy włączeniem zasilania a resetem uP jest taka, że w tym 1 przypadku resetujesz również LCD. Może to mieć pewne znaczenie bo powtarzasz konfigurację początkową.
    PS.
    zamiast
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    lepiej po prostu dodać '0' do cyfry i wyjdzie na to samo. Do dłuższych liczb osobiście używam funkcji itoa.
  • REKLAMA
  • #4 9392729
    nsvinc
    Poziom 35  
    Dla uściślenia dodam:
    dondu napisał:
    2. Reset za pomocą pinu RESET ma taki sam skutek jak włączenie zasilania.

    Nie podważam tego gdy rozpatrujemy procesor z rodziny AVR, ale nie jest to prawdziwe dla każdego procesora. Z reguły POR nie jest tym samym co external reset, i np. ARMy to konsekwentnie rozróżniają. PICe też.
  • REKLAMA
  • #5 9392751
    janbernat
    Poziom 38  
    Ten sterownik jest prawie zgodny z HD.
    Ale po inicjalizacji należy odczekać 30ms na ustabilizowanie sie napięcia.
    Chyba że to opóźnienie jest już w funkcji lcd_init().
    Podobnie należy sprawdzić lcd_clrscr().
    Tu też jest wymagane spore opóżnienie.
  • #6 9393906
    5657jz
    Poziom 14  
    Kombinuje z wyświetlaczem jak koń pod górę. Ale..
    Okazuje się, że wszystko zależy od odstępów czasowych przesyłania danych.
    Tak przy inicjalizacji wyświetlacza, jak równierz wyświetlania danych.

    Ale mam problem z interpretacja z datasheeta KS0066U ze str.24
    FRAME FREQUENCY
    Programmable Driving Method by the same font mask option: Display waveform A-Type, B-Type
    1) 1/8 duty cycle

    Jak to czytać, co to jest 1/8, 1/11, 1/16, z czym to się wiąże ?????
    Podpowiedzi ! Please.
REKLAMA