Thông báo

Collapse
No announcement yet.

Nhờ các Pro chỉ bảo cho 1 con gà như em về AVR

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

  • #16
    1. Em học lớp nào?
    2. Đề bài này của em đâu có khó. Thật đấy. Với yêu cầu trên chỉ cần có ít kiến thức lập trình và fầnn cứng chút là oke mà. Thật ....

    Comment


    • #17
      mình cũng thấy rất thú vị với đồ án của bạn! mình sẽ thử code xem nhé!
      bạn dùng con avr nào nhỉ? mình dùng atmega48 nhé, cho nó gọn! mình cũng giải mã trực tiếp ra 7 thanh luôn, không qua ic giải mã, để đỡ tốn phần cứng mà!

      Comment


      • #18
        bạn xem thử code này nhé, tớ vừa viết xong!
        sơ đồ thì tớ gửi bên dưới đây
        bạn nhìn theo sơ đồ để nối nhé!
        nếu bấm liên tục thì nó sẽ hiện lần lượt các số từ 1 ->99
        còn nếu dừng lại ko bấm khoảng 3s thì nó sẽ lại trở về 0!
        ko biết đã đúng với đồ án mà bạn phải làm chưa nữa!
        Code:
        /*****************************************************
        This program was produced by the
        CodeWizardAVR V1.25.9 Professional
        Automatic Program Generator
        © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
        http://www.hpinfotech.com
        
        Project : 
        Version : 
        Date    : 10/18/2009
        Author  : fiuzu                           
        Company : psg                             
        Comments: 
        
        
        Chip type           : ATmega48
        Clock frequency     : 4.000000 MHz
        Memory model        : Small
        External SRAM size  : 0
        Data Stack size     : 128
        *****************************************************/
        
        #include <mega48.h>
        #include <delay.h>
        
        #define button PINC.0
        // Declare your global variables here
        unsigned int i,a,b,t,num,k;
        unsigned int led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        void hienthi(unsigned int num)
        {
                 if(num<10)
                {       
                        PORTD=led[0];
                        PORTB=led[num];
                }
                else
                {
                 b=num%10;
                 a=num/10;
                 PORTD=led[a];
                 PORTB=led[b];       
                }
         
        }
        void main(void)
        {
        // Declare your local variables here
        
        // Crystal Oscillator division factor: 1
        #pragma optsize-
        CLKPR=0x80;
        CLKPR=0x00;
        #ifdef _OPTIMIZE_SIZE_
        #pragma optsize+
        #endif
        
        // Input/Output Ports initialization
        // 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
        // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
        // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
        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;
        
        
        ACSR=0x80;
        ADCSRB=0x00;
              i=0;
              t=0;
              num=0;
              k=0;
              hienthi(0);
        while (1)
                {
             
              //start:
              while(!button)
                        {
                        k=0;
                        i++;
                        t=1;
                        delay_ms(20);
                        if(i==5&&t==1);
                                 {       
                                 num++;
                                 hienthi(num);
                                  t=0;
                                  i=0;
                                  }
                          while(!button)
                                {delay_ms(20);}
                        } 
                while(button)
                        {
                         k++;
                         delay_ms(20);
                        if(k==150)
                                {
                                k=0;
                                t=0;
                                i=0;
                                num=0;
                                hienthi(num);
                                }     
                        }     
                }
              
        
        }

        Comment


        • #19
          Thực ra với yêu cầu bài này có rất nhiều fương án để giải quyết.
          1. Thực hiện với phần phím bấm: có thể sử dụng 2 dạng fímm bấm như sau:
          - Phím đơn: sử dụng mức tích cực 1 và 0 để xác định
          - Phím giao tiếp ADC sử dụng chênh áp đầu vào ADC để phân biệt có bấm hay không!
          2. Hiển thị Led 7 thanh.
          - Giải mã Led 7 thanh (8 chân)
          - Giải mã Led 7 thanh sử dụng IC giải mã 7447(7446) sử dụng 6 chân IC
          - Giải mã SPI (mất 2 chân, nhưng tốn tiền linh kiện)

          Chúc bạn thành công.

          Comment


          • #20
            Nguyên văn bởi Brilliant8x Xem bài viết
            Thực ra với yêu cầu bài này có rất nhiều fương án để giải quyết.
            1. Thực hiện với phần phím bấm: có thể sử dụng 2 dạng fímm bấm như sau:
            - Phím đơn: sử dụng mức tích cực 1 và 0 để xác định
            - Phím giao tiếp ADC sử dụng chênh áp đầu vào ADC để phân biệt có bấm hay không!
            2. Hiển thị Led 7 thanh.
            - Giải mã Led 7 thanh (8 chân)
            - Giải mã Led 7 thanh sử dụng IC giải mã 7447(7446) sử dụng 6 chân IC
            - Giải mã SPI (mất 2 chân, nhưng tốn tiền linh kiện)

            Chúc bạn thành công.
            hix, bấm phím mà bác dùng ADC thì khác gì giết con kiến bằng đạn đại bác ạ!
            chắc em mà bấm phím trong 8051 thì phải nối module ADC ngoài mất

            Comment


            • #21
              Hì ...e đưa ra fương án thôi. Chứ làm thế nào thì chắc khổ chủ đã có chủ định rồi. Bác em cứ soi

              Sao iem ko thấy điều kiện thoát để từ 99 về 00 nhỉ?

              Comment


              • #22
                hì, quên mất là nếu bấm quá 99 lần, chưa đưa lại số về 0 rồi! bạn tự sửa lại vậy nhé!

                Comment


                • #23
                  EM nói lại yêu cầu nha các pro: thiết kế bộ đếm xung nhịp, xung vào từ 1 phím bấm....bấm 1 lần rồi bỏ ra(nó như là cái nut bấm bàn phím điện thoại đó)....thì nó hiển thị số 1 trên LED 7 thanh, ở đâu Em cho dưới 99 xung vì chỉ cần 2 con LED 7 thanh thôi cho dễ hiểu, ai đã làm đề tài này rùi mong shared cho E với nha.....Thank các pro chỉ giáo
                  Dear TranVietKy!
                  Đối với bài của bạn có 3 cách thực hiện:
                  1. Đơn giản nhất: dùng chức năng counter của timer để đếm sự kiện ngoài. với AVR nếu dùng Timer0 hoặc Timer2 bạn có thể đếm tối đa đến 255. Nếu dùng Timer1 bạn có thể đếm tối đa đến 65535. Phần cứng thì bạn chỉ việc nối phím bấm vào chân Tx (tương ứng với timer bạn chọn). Phần mềm bạn chỉ có 2 nhiệm vụ:
                  - Khởi tạo cho Timer hoạt động chở chế độ counter (thực hiện 1 lần ở đầu chương trình)
                  - Đọc giá trị đếm trong thanh ghi số đếm của Timer và hiển thị lên LED 7 thanh. (Thực hiện liên tục trong vòng lặp vô tận)
                  2. Đơn giản thứ 2: Dùng ngắt. Phần cứng:nối phím bấm với 1 chân ngắt ngoài nào đó. Phần mềm:
                  - chương trình chính:
                  + Khởi tạo ngắt và biến đếm: (thực hiện 1 lần đầu chương trình)
                  + Hiển thị giá trị của biến đếm ra LED 7 thanh (thực hiện liên tục trong vòng lặp vô tận)
                  - Chương trình phục vụ ngắt:
                  + Cập nhật giá trị của biến đếm theo ý muốn
                  3. Đơn giản thứ 3: Nối phím bấm vào chân I/O bình thường. Chương trình bạn phải liên tục kiểm tra phím bấm. Mỗi khi phát hiện có phím bấm thì bạn cập nhật giá trị của biến đếm. Sau khi kiểm tra phím bấm dù có hay không bạn đều phải hiển thị giá trị biến đếm ra LED 7 thanh. Cả hai nhiệm vụ kiểm tra phím bấm và điều khiển LED 7 thanh đều phải thực hiện liên tục.

                  4. Đánh giá: Phương án thứ 2 và thứ 3 đều có thể thực hiện được bài toán một cách đơn giản tuy nhiên chúng không phải là phương pháp tối ưu bởi vì CPU vẫn phải trực tiếp thực hiện việc đếm sự kiện. Trong khi CPU có trong tay một người đầy tớ (ngoại vi) có chức năng đếm sự kiện là Timer.

                  5. Mở rộng: Khi dùng phím bấm để tạo ra sự kiện đếm bạn cần phải chống rung cho nó (có thể bằng phần cứng hoặc phần mềm). Chính vì thế việc dùng phím bấm để tạo ra sự kiện đếm tuy đơn giản và rẻ tiền nhưng không tối ưu. Bạn có thể dùng một mắt đếm hồng ngoại đơn giản để mô phỏng bài đếm sản phẩm như trong file đính kèm.

                  Chúc bạn thành công!
                  Attached Files
                  For a better world

                  Comment


                  • #24
                    @Brilliant8x: đấy, bác lại soi em!

                    Comment


                    • #25
                      Nguyên văn bởi fiuzu Xem bài viết
                      hì, quên mất là nếu bấm quá 99 lần, chưa đưa lại số về 0 rồi! bạn tự sửa lại vậy nhé!
                      Sao bác em ko làm cho hết đi, làm thế khác nào "đem con bỏ chợ", thôi bác em "tiễn phật thì tiễn tận Tây phương đê".

                      iem nào có soi giề đâu, chẳng qua iem thấy thiếu mà, cơ mà điều đó ko đúng àhh?

                      Mà sao k thấy khổ chủ vào nhỉ?

                      Comment


                      • #26
                        dạ! em viết thêm đây ạ!

                        Comment


                        • #27
                          Nguyên văn bởi fiuzu Xem bài viết
                          bạn xem thử code này nhé, tớ vừa viết xong!
                          sơ đồ thì tớ gửi bên dưới đây
                          bạn nhìn theo sơ đồ để nối nhé!
                          nếu bấm liên tục thì nó sẽ hiện lần lượt các số từ 1 ->99
                          còn nếu dừng lại ko bấm khoảng 3s thì nó sẽ lại trở về 0!
                          ko biết đã đúng với đồ án mà bạn phải làm chưa nữa!
                          Code:
                          /*****************************************************
                          This program was produced by the
                          CodeWizardAVR V1.25.9 Professional
                          Automatic Program Generator
                          © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com
                          
                          Project : 
                          Version : 
                          Date    : 10/18/2009
                          Author  : fiuzu                           
                          Company : psg                             
                          Comments: 
                          
                          
                          Chip type           : ATmega48
                          Clock frequency     : 4.000000 MHz
                          Memory model        : Small
                          External SRAM size  : 0
                          Data Stack size     : 128
                          *****************************************************/
                          
                          #include <mega48.h>
                          #include <delay.h>
                          
                          #define button PINC.0
                          // Declare your global variables here
                          unsigned int i,a,b,t,num,k;
                          unsigned int led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
                          void hienthi(unsigned int num)
                          {
                                   if(num<10)
                                  {       
                                          PORTD=led[0];
                                          PORTB=led[num];
                                  }
                                  else
                                  {
                                   b=num%10;
                                   a=num/10;
                                   PORTD=led[a];
                                   PORTB=led[b];       
                                  }
                           
                          }
                          void main(void)
                          {
                          // Declare your local variables here
                          
                          // Crystal Oscillator division factor: 1
                          #pragma optsize-
                          CLKPR=0x80;
                          CLKPR=0x00;
                          #ifdef _OPTIMIZE_SIZE_
                          #pragma optsize+
                          #endif
                          
                          // Input/Output Ports initialization
                          // 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
                          // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                          // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                          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;
                          
                          
                          ACSR=0x80;
                          ADCSRB=0x00;
                                i=0;
                                t=0;
                                num=0;
                                k=0;
                                hienthi(0);
                          while (1)
                                  {
                               
                                //start:
                                while(!button)
                                          {
                                          k=0;
                                          i++;
                                          t=1;
                                          delay_ms(20);
                                          if(i==5&&t==1);
                                                   {       
                                                   num++;
                                                    if(num==100){num=0;}
                                                   hienthi(num);
                                                    t=0;
                                                    i=0;
                                                    }
                                            while(!button)
                                                  {delay_ms(20);}
                                          } 
                                  while(button)
                                          {
                                           k++;
                                           delay_ms(20);
                                          if(k==150)
                                                  {
                                                  k=0;
                                                  t=0;
                                                  i=0;
                                                  num=0;
                                                  hienthi(num);
                                                  }     
                                          }     
                                  }
                                
                          
                          }
                          đã sửa lại cái lần thứ 100 rồi ạ!

                          Comment


                          • #28
                            Có lẽ bây giờ em mới cảm nhận đc 1 gia đình về Điện tử việt nam...cho dù em đọc vânc chưa hiểu hết do E đang trong quá trình tìm hiểu mà....nhưng thấy các anh ủng hộ em nhiệt tình như thế này...em thật thấy mình "chỉ là 1 hạt bụi nằm trong cả một dãy núi toàn đá hộc thui"...huhuhu..Em đã gà bây giờ thấy mình là gà con hơn...huhuhuhuhu
                            Em cảm các anh rất nhiều bây giờ E đang tập tọe trên Protues...khi nào có kết quả em sẽ cảm ơn cả nhà nha...
                            Last edited by tranvietky; 20-10-2009, 23:05.

                            Comment


                            • #29
                              Nguyên văn bởi Toan.Lv Xem bài viết
                              Dear TranVietKy!
                              Đối với bài của bạn có 3 cách thực hiện:
                              1. Đơn giản nhất: dùng chức năng counter của timer để đếm sự kiện ngoài. với AVR nếu dùng Timer0 hoặc Timer2 bạn có thể đếm tối đa đến 255. Nếu dùng Timer1 bạn có thể đếm tối đa đến 65535. Phần cứng thì bạn chỉ việc nối phím bấm vào chân Tx (tương ứng với timer bạn chọn). Phần mềm bạn chỉ có 2 nhiệm vụ:
                              Như vậy chưa ổn lắm bác ạ.Mình dùng nút bấm cơ khí, khi bấm còn bị dao động chán.Còn phải chống nhiễu nữa.Nên viết chương trình kiểm tra:nếu thấy phím được nhấn thì delay 1khoảng thời gian,sau đó kiểm tra lại,nếu vẫn nhấn thì mới nhận.rồi delay thêm 1 thời gian nếu cần.

                              Comment


                              • #30
                                Bác nói rất đúng, hôm nọ Em cũng đọc ở đâu đó là cần thềm 1 bộ chống nhiều...hay là xóa độ trễ đi.....đó là đối với nút bấm cơ khí....

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X