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

ATMega32 i wyświetlacz RC1602A 2x16 - brak inicjalizacji w trybie 4-bitowym

canion 18 Kwi 2012 20:13 2017 2
REKLAMA
  • #1 10809225
    canion
    Poziom 10  
    Witam. Mam problem z wyświetlaczem 2x16 RC1602A Link , a właściwie z samą jego inicjalizacją.
    Programuje w AVR GCC, procesor ATMega32 taktowany kwarcem 14,7456 MHz.
    Połączenia - ok, kontrast ok, a na wyświetlaczu mam same kwadraciki (więc brak inicjalizacji).

    Wyświetlacz ma pracować w trybie 4-bitowym.

    Biblioteka której używam to biblioteka p. Radosława Kwietnia, zmodyfikowana jeśli chodzi o wyprowadzenia i w pliku *.c zmieniłem funkcję do inicjalizacji wg noty (link wyżej) -Wyświetlacz natomiast posiada driver ST7066U.

    
    
    void LCD_Initalize(void)
    {
    LCD_DB4_DIR |= LCD_DB4;
    LCD_DB5_DIR |= LCD_DB5; 
    LCD_DB6_DIR |= LCD_DB6; 
    LCD_DB7_DIR |= LCD_DB7; 
    LCD_E_DIR 	|= LCD_E;  
    LCD_RS_DIR |= LCD_RS; 
    LCD_RW_DIR |= LCD_RW;
      
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_E_PORT &= ~LCD_E; 
    
    _delay_ms(5);
    _delay_ms(5);
    _delay_ms(5);
    _delay_ms(5);
    _delay_ms(5);
    _delay_ms(5);
    _delay_ms(5);
    _delay_ms(5);
    
    ////////// function set //////////////////////////
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT &= ~LCD_DB7;
    LCD_DB6_PORT &= ~LCD_DB6;
    LCD_DB5_PORT |= LCD_DB5;
    LCD_DB4_PORT |= LCD_DB4;
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E; 
    _delay_us(40);
    
    for(unsigned int i=0; i<2; i++)
    {
    	LCD_RS_PORT &= ~LCD_RS;
    	LCD_RW_PORT &= ~LCD_RW;
    	LCD_DB7_PORT &= ~LCD_DB7;
    	LCD_DB6_PORT &= ~LCD_DB6;
    	LCD_DB5_PORT |= LCD_DB5;
    	LCD_DB4_PORT &= ~LCD_DB4;
    
    	LCD_E_PORT |= LCD_E; 
    	_delay_ms(1);
    	LCD_E_PORT &= ~LCD_E;
      
    	_delay_us(40);
    
    	LCD_RS_PORT &= ~LCD_RS;
    	LCD_RW_PORT &= ~LCD_RW;
    	LCD_DB7_PORT |= ~LCD_DB7;	//N
    	LCD_DB6_PORT |= ~LCD_DB6;	//F
    
    	LCD_E_PORT |= LCD_E; 
    	_delay_ms(1);
    	LCD_E_PORT &= ~LCD_E;
    	
    	_delay_us(40);
    
    }
    	
    /////////on off//////////////
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT &= ~LCD_DB7;
    LCD_DB6_PORT &= ~LCD_DB6;
    LCD_DB5_PORT &= ~LCD_DB5;
    LCD_DB4_PORT &= ~LCD_DB4;
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E;  
    _delay_us(40);
    
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT |= LCD_DB7;
    LCD_DB6_PORT |= LCD_DB6;	//D
    LCD_DB5_PORT &= ~LCD_DB5;	//C
    LCD_DB4_PORT &= ~LCD_DB4;	//B
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E;  
    
    ////////////////////////////////
    _delay_us(40);
    ///////////////////////clear
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT &= ~LCD_DB7;
    LCD_DB6_PORT &= ~LCD_DB6;
    LCD_DB5_PORT &= ~LCD_DB5;
    LCD_DB4_PORT &= ~LCD_DB4;
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E;  
    _delay_us(40);
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT &= ~LCD_DB7;
    LCD_DB6_PORT &= ~LCD_DB6;
    LCD_DB5_PORT &= ~LCD_DB5;
    LCD_DB4_PORT |= LCD_DB4;
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E;  
    
    //////////////////////////////
    _delay_ms(3);
    
    /////////////////entry mode set
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT &= ~LCD_DB7;
    LCD_DB6_PORT &= ~LCD_DB6;
    LCD_DB5_PORT &= ~LCD_DB5;
    LCD_DB4_PORT &= ~LCD_DB4;
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E;
    _delay_us(40);
    
    LCD_RS_PORT &= ~LCD_RS;
    LCD_RW_PORT &= ~LCD_RW;
    LCD_DB7_PORT &= ~LCD_DB7;
    LCD_DB6_PORT |= LCD_DB6;
    LCD_DB5_PORT |= LCD_DB5;	//ID
    LCD_DB4_PORT |= LCD_DB4;		//SH
    
    LCD_E_PORT |= LCD_E; 
    _delay_ms(1);
    LCD_E_PORT &= ~LCD_E;
    
    }
    


    Proszę o pomoc
  • REKLAMA
  • #2 10809645
    sulfur
    Poziom 24  
    Napisz, co Twoim zdaniem trafia na pin w takim wypadku
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    i zastanów się, co powinno trafić.
  • #3 10809675
    canion
    Poziom 10  
    Zgadza się - zapomniałem wykasować tyldy, więc nie robił się stan wysoki. Moje niedopatrzenie:). I wyświetlacz działa, dzięki za pomoc.
REKLAMA