Thông báo

Collapse
No announcement yet.

GIÚP EM VỚI. HIỂN THỊ LÊN LCD 16x2.

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • GIÚP EM VỚI. HIỂN THỊ LÊN LCD 16x2.

    Vấn đề này không phải khó khăn gì. nhưng thực sự em đang bế tắc và không hiểu tại sao. em dùng con atmega16 chỉ để hiển thị ký tự lên LCD 16x2. trên mô phỏng thì chạy ok, nhưng khi làm mạch thực thì không hiển thị được gì hết.làm cả này mà không được. nhưng khi làm trên con atmega8 lại chạy bình thường. mong các bác chỉ bảo, thực sự em bế tắc lắm mới đưa lên đây
    code:

    #include <mega16.h>

    // Alphanumeric LCD Module functions
    #include <alcd.h>

    // Declare your global variables here

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;

    // SPI initialization
    // SPI disabled
    SPCR=0x00;

    // TWI initialization
    // TWI disabled
    TWCR=0x00;

    // Alphanumeric LCD initialization
    // Connections specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTA Bit 0
    // RD - PORTA Bit 1
    // EN - PORTA Bit 2
    // D4 - PORTA Bit 4
    // D5 - PORTA Bit 5
    // D6 - PORTA Bit 6
    // D7 - PORTA Bit 7
    // Characters/line: 16
    lcd_init(16);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts(" hello ");
    lcd_gotoxy(0,1);
    lcd_puts("hix hix");

    while (1)
    {
    // Place your code here

    }
    }

    mô phỏng:
    Click image for larger version

Name:	LCD.jpg
Views:	1
Size:	102.5 KB
ID:	1417097

  • #2
    mong bác nào biết trả lời nhanh dùm em. thanks nhiều lắm.

    Comment


    • #3
      chỉnh makefile chưa?

      Comment


      • #4
        Bác lập trình trên môi trường gì vậy? Bác đưa ra đây cả sơ đồ mạch thì sẽ tốt hơn!

        Comment


        • #5
          Nguyên văn bởi wikj10 Xem bài viết
          Vấn đề này không phải khó khăn gì. nhưng thực sự em đang bế tắc và không hiểu tại sao. em dùng con atmega16 chỉ để hiển thị ký tự lên LCD 16x2. trên mô phỏng thì chạy ok, nhưng khi làm mạch thực thì không hiển thị được gì hết.làm cả này mà không được. nhưng khi làm trên con atmega8 lại chạy bình thường. mong các bác chỉ bảo, thực sự em bế tắc lắm mới đưa lên đây
          code:

          #include <mega16.h>

          // Alphanumeric LCD Module functions
          #include <alcd.h>

          // Declare your global variables here

          void main(void)
          {
          // Declare your local variables here

          // Input/Output Ports initialization
          // Port A initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTA=0x00;
          DDRA=0x00;

          // Port B initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTB=0x00;
          DDRB=0x00;

          // Port C initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTC=0x00;
          DDRC=0x00;

          // Port D initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTD=0x00;
          DDRD=0x00;

          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          // Mode: Normal top=0xFF
          // OC0 output: Disconnected
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;

          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;

          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: Timer2 Stopped
          // Mode: Normal top=0xFF
          // OC2 output: Disconnected
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;

          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: Off
          // INT2: Off
          MCUCR=0x00;
          MCUCSR=0x00;

          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x00;

          // USART initialization
          // USART disabled
          UCSRB=0x00;

          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;

          // ADC initialization
          // ADC disabled
          ADCSRA=0x00;

          // SPI initialization
          // SPI disabled
          SPCR=0x00;

          // TWI initialization
          // TWI disabled
          TWCR=0x00;

          // Alphanumeric LCD initialization
          // Connections specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTA Bit 0
          // RD - PORTA Bit 1
          // EN - PORTA Bit 2
          // D4 - PORTA Bit 4
          // D5 - PORTA Bit 5
          // D6 - PORTA Bit 6
          // D7 - PORTA Bit 7
          // Characters/line: 16
          lcd_init(16);
          lcd_clear();
          lcd_gotoxy(0,0);
          lcd_puts(" hello ");
          lcd_gotoxy(0,1);
          lcd_puts("hix hix");

          while (1)
          {
          // Place your code here

          }
          }

          mô phỏng:
          [ATTACH=CONFIG]65325[/ATTACH]
          dòng 89 thì e còn biết tí xíu.
          Nỗ lực lớn nhất của tình bạn không phải là chỉ thẳng cho bạn thấy khuyết điểm mà là làm cách nào cho bạn thấy được nó.
          sđt:01692648999
          Ai Yên Bái không nhỉ?

          Comment


          • #6
            thì em lập trình trên thằng codevisionAVR, hỗ trợ sẵn thằng LCD luôn. tại mới đụng vô dòng AVR nên còn ít kinh nghiệm. khổ vậy chứ. làm mạch đo khoảng cách bằng sóng siêu âm (sfr05) tới thằng hiển thị LCD không được. em làm mạch riêng như mô phỏng proteus bên trên chỉ có LCD với con AVR thôi, như vậy cho dễ test. vậy mà làm mãi không được. chẳng hiểu sao nữa.
            còn bác aaahhhh nói makefile em không biết nó là gì. hình như nó hỗ trợ biên dịch gì đó, nhưng em nghĩ ở đây nó không ảnh hưởng gì đến chương trình đâu.

            Comment


            • #7
              1- Bạn định nghĩa lại port A cho đúng với in out của LCD.
              thường định nghĩa cpu là out thì mới có tín hiệu ra.
              2- sửa đoạn out ra lcd trong vòng lặp kết hợp với trễ . nếu không nhanh quá hoặc chưa cắm lcd thì không khởi tạo được.
              lệnh delay không biết có nhớ đúng không hihi
              3- Nếu có oxilo thì đo các tín hiệu điều khiển xem có đúng datasheet không.



              while (1)
              {
              lcd_init(16);
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(" hello ");
              lcd_gotoxy(0,1);
              lcd_puts("hix hix");
              delay_ms(200);
              // Place your code here

              }
              }

              // Alphanumeric LCD initialization

              // Connections specified in the
              // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
              // RS - PORTA Bit 0
              // RD - PORTA Bit 1
              // EN - PORTA Bit 2
              // D4 - PORTA Bit 4
              // D5 - PORTA Bit 5
              // D6 - PORTA Bit 6
              // D7 - PORTA Bit 7
              // Characters/line: 16
              lcd_init(16);
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(" hello ");
              lcd_gotoxy(0,1);
              lcd_puts("hix hix");

              Comment


              • #8
                ai đã từng làm hiển thị LCD trên atmega16 cho em xin code và sơ đồ phần cứng. cứ test hoài mà không được.

                Comment


                • #9
                  @ wikj10: Tôi không dùng codevision, tôi chỉ viết bằng winavr. Đây là code của tôi, hy vọng có thể giúp cho bạn. Bạn mở file lcd.h ra xem cách kết nối chân nào vào lcd nhé.
                  TEST LCD WITH MEGA32.rar

                  Comment


                  • #10
                    Bác xem qua đoạn code này nhé:

                    /************************************************** ***
                    This program was produced by the
                    CodeWizardAVR V1.24.6 Professional
                    Automatic Program Generator
                    © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
                    HP InfoTech, Development Tools for Microcontrollers, C Compilers, In-System Programmers
                    e-mail:office@hpinfotech.com

                    Project :
                    Version :
                    Date : 2/16/2006
                    Author : F4CG
                    Company : F4CG
                    Comments:


                    Chip type : ATmega16L
                    Program type : Application
                    Clock frequency : 8.000000 MHz
                    Memory model : Small
                    External SRAM size : 0
                    Data Stack size : 512
                    ************************************************** ***/

                    #include <mega16.h>
                    #include <delay.h>

                    // I2C Bus functions
                    #asm
                    .equ __i2c_port=0x18 ;PORTB
                    .equ __sda_bit=0
                    .equ __scl_bit=1
                    #endasm
                    #include <i2c.h>

                    // LM75 Temperature Sensor functions
                    #include <lm75.h>

                    // DS1307 Real Time Clock functions
                    #include <ds1307.h>

                    // Alphanumeric LCD Module functions
                    #asm
                    .equ __lcd_port=0x15 ;PORTC
                    #endasm
                    #include <lcd.h>

                    #define FIRST_ADC_INPUT 0
                    #define LAST_ADC_INPUT 1
                    unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
                    #define ADC_VREF_TYPE 0x00

                    // ADC interrupt service routine
                    // with auto input scanning
                    interrupt [ADC_INT] void adc_isr(void)
                    {
                    register static unsigned char input_index=0;
                    // Read the AD conversion result
                    adc_data[input_index]=ADCW;
                    // Select next ADC input
                    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
                    input_index=0;
                    ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
                    // Start the AD conversion
                    ADCSRA|=0x40;
                    }

                    // Declare your global variables here

                    void main(void)
                    {
                    // Declare your local variables here
                    unsigned char next;
                    // Input/Output Ports initialization
                    // Port A initialization
                    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                    PORTA=0x00;
                    DDRA=0xFF;

                    // Port B initialization
                    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                    PORTB=0x00;
                    DDRB=0xFF;

                    // Port C initialization
                    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                    PORTC=0x00;
                    DDRC=0xFF;

                    // Port D initialization
                    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                    PORTD=0x00;
                    DDRD=0xFF;

                    // Timer/Counter 0 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 0 Stopped
                    // Mode: Normal top=FFh
                    // OC0 output: Disconnected
                    TCCR0=0x00;
                    TCNT0=0x00;
                    OCR0=0x00;

                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 1 Stopped
                    // Mode: Normal top=FFFFh
                    // OC1A output: Discon.
                    // OC1B output: Discon.
                    // Noise Canceler: Off
                    // Input Capture on Falling Edge
                    // Timer 1 Overflow Interrupt: Off
                    // Input Capture Interrupt: Off
                    // Compare A Match Interrupt: Off
                    // Compare B Match Interrupt: Off
                    TCCR1A=0x00;
                    TCCR1B=0x00;
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0x00;
                    OCR1BH=0x00;
                    OCR1BL=0x00;

                    // Timer/Counter 2 initialization
                    // Clock source: System Clock
                    // Clock value: Timer 2 Stopped
                    // Mode: Normal top=FFh
                    // OC2 output: Disconnected
                    ASSR=0x00;
                    TCCR2=0x00;
                    TCNT2=0x00;
                    OCR2=0x00;

                    // External Interrupt(s) initialization
                    // INT0: Off
                    // INT1: Off
                    // INT2: Off
                    MCUCR=0x00;
                    MCUCSR=0x00;

                    // Timer(s)/Counter(s) Interrupt(s) initialization
                    TIMSK=0x00;

                    // Analog Comparator initialization
                    // Analog Comparator: Off
                    // Analog Comparator Input Capture by Timer/Counter 1: Off
                    ACSR=0x80;
                    SFIOR=0x00;

                    // ADC initialization
                    // ADC Clock frequency: 125.000 kHz
                    // ADC Voltage Reference: AREF pin
                    ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
                    ADCSRA=0xCE;

                    // I2C Bus initialization
                    i2c_init();

                    // LM75 Temperature Sensor initialization
                    // thyst: 75°C
                    // tos: 80°C
                    // O.S. polarity: 0
                    lm75_init(0,75,80,0);

                    // DS1307 Real Time Clock initialization
                    // Square wave output on pin SQW/OUT: On
                    // Square wave frequency: 1Hz
                    rtc_init(0,1,0);

                    // LCD module initialization
                    lcd_init(16);

                    // Global enable interrupts
                    #asm("sei")

                    while (1)
                    {
                    // Place your code here
                    for(next=0;next<=16;next++)
                    {
                    lcd_gotoxy(next,0);
                    lcd_putsf("LE MINH");
                    delay_ms(100);
                    lcd_clear();
                    }
                    for(next=0;next<=16;next++)
                    {
                    lcd_gotoxy(next,1);
                    lcd_putsf("LE MINH");
                    delay_ms(100);
                    lcd_clear();
                    }

                    };
                    }

                    Comment


                    • #11
                      Phần cứng: bạn xem lại giá trị điện trở tại chân 3 của LCD, thường thì là chân 3 sẽ mắc với một biến trở 10K để vi chỉnh, nếu giá trị này chưa đúng, màn hình LCD sẽ bị mờ và ko nhìn thấy nội dung hiển thị.
                      Phần mềm: xem lại fuse bit đối với chip mới

                      Comment


                      • #12
                        thanks mọi người, em đã hiển thị được rồi nhưng trên portA, còn portC thì không hiểu tại sao nó không hiển thị được.

                        Comment


                        • #13
                          Nguyên văn bởi wikj10 Xem bài viết
                          thanks mọi người, em đã hiển thị được rồi nhưng trên portA, còn portC thì không hiểu tại sao nó không hiển thị được.
                          Thấy mô phỏng trên port A nên ko nhắc còn nếu dùng port C thì nhớ check fuse jtag nhé.
                          AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                          Xem thêm tại Online Store ---> Click here
                          Mob: 0982.083.106

                          Comment

                          Về tác giả

                          Collapse

                          wikj10 Tìm hiểu thêm về wikj10

                          Bài viết mới nhất

                          Collapse

                          Đang tải...
                          X