Thông báo

Collapse
No announcement yet.

Counter - LCD

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

  • Counter - LCD

    Các anh giúp em với!!...
    em muốn dùng times0 nhận xung từ ngoài vào đếm đủ 16 xung thì thực hiện chương trình trong ngắt(hiển thị chữ "nhấn đủ rồi" và sáng đèn lightback).
    Nhưng em nhấn mãi nó chẳng sảy ra ngắt,
    các anh xem giúp em với, chương trình em viết bằng CodeVision.
    Chip type : ATmega8535L
    Program type : Application
    Clock frequency : 12.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 128
    su dung time0 dem xung ngoai chan T0 hien thi ra man hinh lcd
    ************************************************** ***/

    #include <mega8535.h>
    #include<delay.h>

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x15 ;PORTC
    #endasm
    #include <lcd.h>
    int i;
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    // Place your code here
    PORTC.3=1; //sang den lightback
    lcd_init(16);
    for (i=0;i<=15;i++)
    {
    lcd_gotoxy(i,0);
    lcd_putsf("Nhan du roi");
    delay_ms(50);
    lcd_clear();
    };
    PORTC.3=0; //tat den lightback
    }

    // 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=P ;

    PORTB=0x01;
    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=P

    PORTC=0x01;
    DDRC=0x00;

    // 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: T0 pin Rising Edge
    // Mode: CTC top=OCR0
    // OC0 output: Clear on compare match

    TCCR0=0x2F;
    TCNT0=0x00;
    OCR0=0x10;

    // 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=0x01;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off

    ACSR=0x80;
    SFIOR=0x00;

    // LCD module initialization
    lcd_init(16);

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

    while (1)
    {
    // Place your code here
    for (i=0;i<=15;i++)
    {
    lcd_gotoxy(i,0);
    lcd_putsf("Happy new year");
    delay_ms(50);
    lcd_clear();
    };
    };
    }
    Attached Files
    Last edited by Le Thi Bich; 11-12-2008, 17:27.
    Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

  • #2
    mình chưa xem kỹ ct của bạn, nhưng trước hết mình thấy chổ này chưa hợp lý:
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    // Place your code here
    PORTC.3=1; //sang den lightback
    lcd_init(16);
    for (i=0;i<=15;i++)
    {
    lcd_gotoxy(i,0);
    lcd_putsf("Nhan du roi");
    delay_ms(50);
    lcd_clear();
    };
    PORTC.3=0; //tat den lightback
    }
    ở 2 dòng màu đỏ đấy, bạn chỉ cho hiển thị có 50ms rồi tắt nó rồi, nên có thể không nhìn thấy, bạn có thể delay khoảng 1 giây xem sao!
    hãy cố gắng dù vướn phải thất bại!!!!!!!!

    Comment


    • #3
      Bạn xem lại nhé, AVR 8515L thì dùng thạch anh tối đa là 8Mhz.
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      // Place your code here
      PORTC.3=1; //sang den lightback
      lcd_init(16);
      for (i=0;i<=15;i++)
      {
      lcd_gotoxy(i,0);
      lcd_putsf("Nhan du roi");
      delay_ms(50);
      lcd_clear();
      };
      PORTC.3=0; //tat den lightback
      }
      -> chuong trinh cua ban co van de khi xay ra ngat tai chan T0 no nhay vao trinh ngat, dung lenh for o day khong hop ly, no se hieu la ban se phai hien thi 16 lan chuoi "nhan du roi" bat dau tu vi tri (0,1)->(15,1)-> avr khong hieu y ban lam la dung roi con gi. Hon nua trong chuong trinh ngat khong thay ban xu ly khi nao thi nhan du 16 gia tri T0.

      Hi hi. Chuc ban thanh cong.
      Last edited by binhminh20; 12-12-2008, 12:03.

      Comment


      • #4
        đây là em sử dụng ngắt của times
        việc đếm đủ 16xung vào được thiết lập ở codewinza,
        trên thẻ time0 em chọn nguồn xung la:T0 pin Rising Edge,
        và Mode em chọn là TCTtop = ORC0,
        timervalue em chọn là 0h;
        Comamre em chọn là 10h;
        Output em chọn là clear compare match,
        chọn Overllow interrup
        thực tế cấu trúc của VĐK em không hiểu lắm nên chỉ biết cách làm ở codevision thôi, chương trình hiển thị em nghĩ không có vấn đề j vì vòng for chỉ có tác dụng cho chữ chạy mà thôi, ở trương trình chính chữ "happy new year" chạy tốt lắm.
        delay 50ms chỉ để trễ sau mỗi lần chữ chạy thôi,
        từ trước tới nay 8635 em toàn dùng thạch anh 12Mhz thấy vẫn chạy mà,
        các anh nghiên cứu giúp em với nhé
        Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

        Comment


        • #5
          có 50ms thì ít quá nên không thấy nổi đâu, bạn nên delay thêm thử coi sao?
          hãy cố gắng dù vướn phải thất bại!!!!!!!!

          Comment


          • #6
            50ms là thời jan trễ của một bước nhảy khi chạy chữ mà anh, chữ chạy đẹp ở chương trình chính mà, vấn để ở đây là nó không nhảy vào ngắt khi em nhấn đủ 16 phát.
            Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

            Comment


            • #7
              Ái chà...có tí ý kiến: nếu dùng CTC của timer0
              +Trình ngắt ở đây ko phải ngắt do timer tràn mà là ngắt do chế độ CTC (code của Bich hình như là ngắt tràn chứ ko phải ngắt do CTC thì phải...ko rành CVS lắm )
              +Chân T0 phải là ngõ vào.
              Mấy ai định nghĩa được tình yêu.
              Có gì đâu một buổi chiều.
              Kề dao lên cổ yêu hay chết .
              Gật đầu cái rụp thế là yêu.

              --------
              Apple

              Comment


              • #8
                Chương trình dùng ngắt tràn mà cài đặt timer chế độ CTC thì nhấn hoài không bao giờ xảy ra ngắt được.
                Cái vòng lặp for để làm gì nhỉ? Theo mình sửa thế này là xong
                ..
                interrupt [TIM0_COMP] void la_làng(void)
                {
                lcd_clear();
                lcd_putsf("nhấn mãi thế!!");
                }
                ..
                // Timer/Counter 0 initialization
                // Clock source: T0 pin Rising Edge
                // Mode: CTC top=OCR0
                // OC0 output: Clear on compare match
                TCCR0=0x2F;
                TCNT0=0x00;
                OCR0=0x10;

                TIMSK=2;

                ..
                Last edited by Kilodeth; 12-12-2008, 19:42.
                Đẹp từng kilomét

                Comment


                • #9
                  nhưng mà em muốn ngắt sảy ra khi em nhấn nút 16 lần mà, nếu dùng ngăt ngoài sau đó dùng thêm một biến trung jan là được nhưng em muốn dùng times để đảm bảo đếm xung ngoài mà không ảnh hưởng đến hoạt động của chương trình chính, vòng lặp for để cho chữ chạy mà. em không biết rõ lắm. các anh júp em!!..
                  Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                  Comment


                  • #10

                    Mười sáu lần được qui định trong câu này rồi:
                    OCR0=0x10;
                    Đẹp từng kilomét

                    Comment


                    • #11
                      Cái LCD bạn cũng gắn vào PORTC à?Trong khi nút bấm cũng để ở PORTC,khi bấm nó thay đổi trạng thái của chân đấy rồi còn đâu, có thể vì thế mà ko hiển thi đc. Thử để nút bấm sang vị trí khác xem

                      Comment


                      • #12
                        Quên mất, nhầm.
                        Có thể là do hiện tượng "dội phím" (chẳng biết dùng từ này có đúng ko), tức là rung phím ấy. Khi bấm thì phím thường dễ bị rung, mà cứ có mỗi xung là đếm, nên rất nhanh. Bạn thử thêm 1 chương trình chống rung xem sao.

                        Comment


                        • #13
                          Nguyên văn bởi Kilodeth Xem bài viết
                          Chương trình dùng ngắt tràn mà cài đặt timer chế độ CTC thì nhấn hoài không bao giờ xảy ra ngắt được.
                          Cái vòng lặp for để làm gì nhỉ? Theo mình sửa thế này là xong
                          ..
                          interrupt [TIM0_COMP] void la_làng(void)
                          {
                          lcd_clear();
                          lcd_putsf("nhấn mãi thế!!");
                          }
                          ..
                          // Timer/Counter 0 initialization
                          // Clock source: T0 pin Rising Edge
                          // Mode: CTC top=OCR0
                          // OC0 output: Clear on compare match
                          TCCR0=0x2F;
                          TCNT0=0x00;
                          OCR0=0x10;

                          TIMSK=2;

                          ..
                          Bạn này cho hiển thị "nhấn mãi thế!!" trong bao lâu vậy?

                          Comment


                          • #14
                            Nguyên văn bởi Le Thi Bich Xem bài viết
                            Các anh giúp em với!!...
                            em muốn dùng times0 nhận xung từ ngoài vào đếm đủ 16 xung thì thực hiện chương trình trong ngắt(hiển thị chữ "nhấn đủ rồi" và sáng đèn lightback).
                            Nhưng em nhấn mãi nó chẳng sảy ra ngắt,
                            các anh xem giúp em với, chương trình em viết bằng CodeVision.
                            bạn khai báo sai ở phần khởi tạo chế độ cho AVR. đây là chương trình hoàn chỉnh đấy. chúc thành công
                            Attached Files
                            hãy cố gắng dù vướn phải thất bại!!!!!!!!

                            Comment


                            • #15
                              noi chung vấn đề dội em khử rất tốt rôì, đã ứng dụng nhiều cái khác không vấn đề j, vẫn chương trình hiển thị lên LCD đó ở chương trình chính chạy rất tốt, vấn đề là nó không nhảy vào ngắt khi e nhấn đủ số xung, mà không biết tại sao bây jờ cả 2 con lcd của em toi cả rồi mới đầu tư một con mới nhưng có lẽ em phải kiểm tra lại mạch test đa, cái máy tính của em cũng trục trắc nên chưa chạy thử chương trình a Chimpickey sửa cho được, test xong chạy tốt em sẽ báo cáo các anh.

                              à em hỏi một điều nưã, có anh nào làm mạch in bằng Ocard không, mấy con avr này thì tìm trong thư viện nào các anh, em chỉ tìm được AT89 em dùng OCard v9.0
                              em cảm ơn các anh nhiều lắm
                              Last edited by VNarmy; 19-12-2008, 12:01. Lý do: Lần sau những vấn đề không liên quan đến nội dung box thì chịu khó mở luồng mới nhé.
                              Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                              Comment

                              Về tác giả

                              Collapse

                              Le Thi Bich Tìm hiểu thêm về Le Thi Bich

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

                              Collapse

                              Đang tải...
                              X