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.

Atmega32 i LCD HD44780 - przy jednym podłączeniu działa, przy drugim nie.

*vip* 16 Maj 2013 22:23 1074 4
  • #1 16 Maj 2013 22:23
    *vip*
    Poziom 17  

    Witam,
    Męczę się już 6-tą godzinę i nie mogę dojść o co chodzi...Mianowicie podłączam LCD pod Atmegę32 i używam skryptu radzia, aby go odpalić. Problem w tym, że przy takiej konfiguracji połączeń (biblioteka HD44780.h) wszystko ładnie działa:

    Code:
    //-------------------------------------------------------------------------------------------------
    
    #define LCD_RS_DIR      DDRB
    #define LCD_RS_PORT    PORTB
    #define LCD_RS         (1 << PB2)

    #define LCD_E_DIR      DDRB
    #define LCD_E_PORT      PORTB
    #define LCD_E         (1 << PB3)

    #define LCD_DB4_DIR      DDRB
    #define LCD_DB4_PORT   PORTB
    #define LCD_DB4         (1 << PB4)

    #define LCD_DB5_DIR      DDRB
    #define LCD_DB5_PORT   PORTB
    #define LCD_DB5         (1 << PB5)

    #define LCD_DB6_DIR      DDRB
    #define LCD_DB6_PORT   PORTB
    #define LCD_DB6         (1 << PB6)

    #define LCD_DB7_DIR      DDRB
    #define LCD_DB7_PORT   PORTB
    #define LCD_DB7         (1 << PB7)

    //-------------------------------------------------------------------------------------------------


    A płytkę wytrawiłem sobie pod takie podłączenie i w tym przypadku wyświetlacz już nie chce wyświetlic napisu "OK":
    Cytat:
    //-------------------------------------------------------------------------------------------------
    #define LCD_RS_DIR DDRC
    #define LCD_RS_PORT PORTC
    #define LCD_RS (1 << PC6)

    #define LCD_E_DIR DDRC
    #define LCD_E_PORT PORTC
    #define LCD_E (1 << PC5)

    #define LCD_DB4_DIR DDRC
    #define LCD_DB4_PORT PORTC
    #define LCD_DB4 (1 << PC4)

    #define LCD_DB5_DIR DDRC
    #define LCD_DB5_PORT PORTC
    #define LCD_DB5 (1 << PC3)

    #define LCD_DB6_DIR DDRC
    #define LCD_DB6_PORT PORTC
    #define LCD_DB6 (1 << PC1)

    #define LCD_DB7_DIR DDRC
    #define LCD_DB7_PORT PORTC
    #define LCD_DB7 (1 << PC0)

    //-------------------------------------------------------------------------------------------------


    Program główny (sam main) w działającym przypadku (od góry):
    Code:

    void main()
    {
    DDRB=0XFF;
    PORTB=0XFF;
    while(1)   {
       LCD_Initalize();
       LCD_Clear();
          LCD_WriteText("OK");
          

          
          

       }
    }

    I w drugim - niedziałającym przypadku:
    Code:

    void main()
    {
    DDRC=0XFF;
    PORTC=0XFF;
    while(1)   {
       LCD_Initalize();
       LCD_Clear();
          LCD_WriteText("OK");
          

          
          

       }
    }


    Co jest nie tak ?

    0 4
  • Pomocny post
    #2 16 Maj 2013 22:27
    marci4
    Poziom 29  

    Rozumiem, że JTAG w Fuse Bitach wyłączyłeś? ;)

    0
  • #3 16 Maj 2013 22:27
    BlueDraco
    Specjalista - Mikrokontrolery

    Czy dobrze kojarzę, że RS dołączyłeś do wejścia RESET mikrokokontrolera? Jeśli tak, to nie jest najlepszy pomysł, bo po wyłączeniu funkcji RESET już nie zaprogramujesz uC, a bez jej wyłączenia nie uruchomisz LCD.

    0
  • #4 16 Maj 2013 22:33
    marci4
    Poziom 29  

    BlueDraco napisał:
    Czy dobrze kojarzę, że RS dołączyłeś do wejścia RESET mikrokokontrolera? Jeśli tak, to nie jest najlepszy pomysł, bo po wyłączeniu funkcji RESET już nie zaprogramujesz uC, a bez jej wyłączenia nie uruchomisz LCD.


    Nie jest to możliwe na ATmega32 ponieważ ma on RESET na nodze 9(DIP) lub 4(TQFP) i jest to tylko RESET, nic więcej. Link do Datasheet.

    0
  • #5 16 Maj 2013 22:46
    *vip*
    Poziom 17  

    marci4 napisał:
    Rozumiem, że JTAG w Fuse Bitach wyłączyłeś? ;)

    heh, dzieki wielkie, jednak jestem jeszcze bardziej początkujący niż myślałem :)
    Wszystko smiga juz az milo ;)

    0