Thông báo

Collapse
No announcement yet.

AVR cho người mới bắt đầu

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin bác nào giải thích giúp, trong Datasheet Mega8 có đoạn đặt các chế độ cho cổng:
    PORTB=(1<<PB7)|(1<<PB6)|(1<<PB0);
    Hoặc Ở một ví dụ:
    #define ROW0 (1<<4)
    Ở đây ký hiệu << hình như là không phải phép dịch trái 1 bít? Xin cho biết cách hiểu và cách sử dụng. Cám ơn trước.

    Comment


    • Mình la dân điện mới ra trường kiến thức chưa có bao nhieu
      Có một đề tài đang làm về VĐK nhưng không biết nhiều, mong các bạn giúp mình với
      ĐỀ TÀI :
      thiết kế mạch và viết chương trình ASM cho con xử lý 89S52 điều khiển động cơ kéo bìa caton đúng chiều dài cần cắt.cắt bìa caton theo kích thước chọn ở nút nhấn l 100mm, 500mm
      - Yêu cầu :
      +input vào vđk là 4 nút nhấn (2 nút chon chế độ, 1 nút start 1 nút stop ) và 1cảm biến tiệm cận từ.
      + Output là transistor điều khiển Relay đóng tải cho motor
      Ví dụ : khi ta chọn nút nhấn 1 ( cắt chiều dài 100mm) nhấn nút start sau đó motor kéo bìa caton, cảm biến phát hiện số xung tức là số vòng quay của motor( trên trục motor gắn 1 cái dĩa đục 10lỗ).Sau khi kéo bìa caton đúng chiều dài,motor dừng, lưỡi dao cắt chạy xuống cắt.
      Tương tụ như nút chọn kích thước số 2 ( tức là 500mm)
      Đang cắt muốn dừng ta nhấn nút stop

      Mong các bạn giúp mình với
      Thanks much !
      Sukura0988

      Comment


      • PORTB=(1<<PB7)|(1<<PB6)|(1<<PB0);
        Bạn chú ý là trong file iom8.h (Với trình dịch WinAVR) có định nghĩa

        /* PORTB */
        #define PB7 7
        #define PB6 6
        #define PB5 5
        #define PB4 4
        #define PB3 3
        #define PB2 2
        #define PB1 1
        #define PB0 0

        => PORTB=(1<<PB7)|(1<<PB6)|(1<<PB0);

        tương đương với PORTB=(1<<7)|(1<<6)|(1<<0);

        hay PORTB = 0b11000001 = 0xC1;

        Cách viết PORTB=(1<<PB7)|(1<<PB6)|(1<<PB0); cho ta hiểu sẽ đặt bit 7, bit 6 và bit 0 của PORTB lên 1.
        ----------------------
        Bể học là mênh mông!

        Comment


        • Nguyên văn bởi sukura0988 Xem bài viết
          Mình la dân điện mới ra trường kiến thức chưa có bao nhieu
          Có một đề tài đang làm về VĐK nhưng không biết nhiều, mong các bạn giúp mình với
          ĐỀ TÀI :
          thiết kế mạch và viết chương trình ASM cho con xử lý 89S52 điều khiển động cơ kéo bìa caton đúng chiều dài cần cắt.cắt bìa caton theo kích thước chọn ở nút nhấn l 100mm, 500mm
          .......
          Mong các bạn giúp mình với
          Thanks much !
          Sukura0988
          Theo tôi khâu quan trọng nhất của đề tài này là điều khiển motor kéo tấm carton đến độ dài cần thiết. Vấn đề này được qui về bài toán điều khiển vị trí động cơ.
          -Nếu dùng động cơ bước, bạn có thể tham khảo project này: http://dientuvietnam.net/forums/showthread.php?t=23085
          -Nếu dùng động cơ DC, bạn có thể tham khảo project này http://dientuvietnam.net/forums/showthread.php?t=22221
          2 Project này được thực hiện trên ATmega16 và 89C51. Bạn nắm được phương pháp thì sẽ lập trình cho VĐK của mình để điều khiển motor. Lập trình thêm cho 4 cái nút bấm nữa là xong.
          Chúc bạn thành công.
          :-)

          Comment


          • Cám ơn bạn HAI_ABC:
            Cách viết và hiểu tôi coi như tôi nắm được theo quy ước. Nhưng nếu như phép tính:
            PORTB=(1<<7)|(1<<6)|(1<<0)
            tôi cụ thể ra: 7=0b0111;
            6=0b0110;
            0=0b0000;
            Dịch trái các số 1 bit: 1<<7=0b1110; 1<<6=0b1100 và 0=0b0000;
            Tiếp: 0b1110|0b1100|0b0000=1110 ?
            Đến đây thì tôi hết hiểu

            Comment


            • Nguyên văn bởi athuy Xem bài viết
              Cám ơn bạn HAI_ABC:
              Cách viết và hiểu tôi coi như tôi nắm được theo quy ước. Nhưng nếu như phép tính:
              PORTB=(1<<7)|(1<<6)|(1<<0)
              tôi cụ thể ra: 7=0b0111;
              6=0b0110;
              0=0b0000;
              Dịch trái các số 1 bit: 1<<7=0b1110; 1<<6=0b1100 và 0=0b0000;
              Tiếp: 0b1110|0b1100|0b0000=1110 ?
              Đến đây thì tôi hết hiểu
              1<<n phải hiểu là 1 dịch trái đi n bit.
              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


              • gởi athuy.
                Bạn phải hiểu như thế này nhé:
                (1<<7) // dịch bit 1 sang trái 7 vị trí
                (1<<6) // --------//---------6-----
                (1<<0) //-------- //---------0-----
                Sau đó ta OR 3byte này lại với nhau được 1 byte là 0b11000001 , rồi gán cho PORTB. Ban hiểu rồi chứ

                Comment


                • Cách viết và hiểu tôi coi như tôi nắm được theo quy ước. Nhưng nếu như phép tính:
                  PORTB=(1<<7)|(1<<6)|(1<<0)
                  tôi cụ thể ra: 7=0b0111;
                  6=0b0110;
                  0=0b0000;
                  Dịch trái các số 1 bit: 1<<7=0b1110; 1<<6=0b1100 và 0=0b0000;
                  Tiếp: 0b1110|0b1100|0b0000=1110 ?
                  Đến đây thì tôi hết hiểu
                  PORTB = (1<<7) | (1<<6) | (1<<0)
                  = 0b10000000 | 0b01000000 | 0b00000001
                  = 0b11000001

                  (1<<7) trong đó 1 = 0b00000001 từ đó bạn dịch trái 7 lần => 0b10000000

                  OK?
                  ----------------------
                  Bể học là mênh mông!

                  Comment


                  • Có ai biết cách nạp cho AVR bằng chương trình ICC ko?
                    Giúp với, sao diễn đàn này chỉ xài code vision ko vậy?

                    Comment


                    • Cách nạp cho AVR bằng ICC thì tôi chưa nạp bao giờ. Còn tại sao chỉ xài codevisionAVR thì theo tôi nó dễ sử dụng, ngôn ngữ gần với con người, ngôn ngữ C rất tường minh, hỗ trợ winzard mạnh ( đây là bản đắt tiền nên nhiều tiện ích). Còn sử dụng miễn phí như WinAVR-GCC hơi khó hiểu hơn và trình winzard không mạnh và không thuận tiện. Bao giờ cũng thế, miễn phí thì ít khi bằng mất tiền.
                      n
                      ĐT: 0986 492 489

                      Tham khảo:

                      Comment


                      • ack....Vậy cuối cùng có bác nào biết ko?
                        Bác nào biết chỉ dùm em cho 1 phát cám ơn ngay tắp lị....

                        Comment


                        • có công mài sắt có ngày nên kim ah.

                          Comment


                          • Nguyên văn bởi minhhieu Xem bài viết
                            Cách nạp cho AVR bằng ICC thì tôi chưa nạp bao giờ. Còn tại sao chỉ xài codevisionAVR thì theo tôi nó dễ sử dụng, ngôn ngữ gần với con người, ngôn ngữ C rất tường minh, hỗ trợ winzard mạnh ( đây là bản đắt tiền nên nhiều tiện ích). Còn sử dụng miễn phí như WinAVR-GCC hơi khó hiểu hơn và trình winzard không mạnh và không thuận tiện. Bao giờ cũng thế, miễn phí thì ít khi bằng mất tiền.
                            ICC cũng viết bằng C mà!!!chắc kiểu này chuyển qua Code Vision quá!!!

                            Comment


                            • Giao tiếp RS-232

                              Tôi đang gặp vấn đề này, nhờ diễn đàn chỉ giúp.
                              Tôi dùng ATmega32, giao tiếp với PC bằng VB6, đo điện áp, giá trị gửi về ADC rồi đưa lên VB. Nhưng nó chỉ hiện toàn ký tự. Vậy làm sao cho nó hiện đúng với số đọc được từ mạch?????

                              Comment


                              • Nguyên văn bởi vandinhmc Xem bài viết
                                Tôi đang gặp vấn đề này, nhờ diễn đàn chỉ giúp.
                                Tôi dùng ATmega32, giao tiếp với PC bằng VB6, đo điện áp, giá trị gửi về ADC rồi đưa lên VB. Nhưng nó chỉ hiện toàn ký tự. Vậy làm sao cho nó hiện đúng với số đọc được từ mạch?????
                                Bạn đọc ADC rồi puts chuổi lên trên PC.
                                VD:
                                adc=read_adc(kenh);
                                truyenso=adc/10.23;
                                ftoa(truyenso,1,truyenchuoi);
                                puts(truyenchuoi);
                                Phone: 0909319477
                                Email:

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X