Thông báo

Collapse
No announcement yet.

Giao tiếp AVR với PC

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

  • #16
    SPIEN có nghĩa là SPI Enable, nếu bạn disable nó thì có nghĩa là bạn cấm nạp qua đường SPI, và khi đó chỉ còn 1 cách duy nhất để nạp cũng như set các fuse bít cho con AVR là dùng phương pháp nạp song song (tương tự 89 ý, chứ ko phải là nạp qua cổng song song đâu nhé).

    Có thể sử dụng mạch nạp HV của bác TM, hoặc nhờ ai đó có mạch nạp Universal để Enable lại SPI.

    Tuy nhiên, cả CodeVisionAVR và PonyPro đều ko cho phép bạn lập trình bít SPIEN, ko bít AVRStudio có ko , lâu rồi ko dùng nên chưa cài, chắc là AVRStudio thì có!
    Last edited by sphinx; 10-08-2006, 13:36.
    PNLab
    Mạch nạp/debug ULink2, Jlink ARM USB
    Mạch nạp AVR, PIC, 8051, MSP430 USB
    Mạch phát triển STM32, ARM9, ARM11
    more...www.pnlabvn.com

    Comment


    • #17
      Chào các bạn mình đang muốn làm một mạch nạp cho AT90S8515 , có bạn nào chỉ giúp mình với !?

      Comment


      • #18
        Hì hì, cảm ơn bác Sphinx nhé, em toát hết cả mồ hôi, em dùng codevision và pony prog may quá như bác nói nó không set được ISP. Hết toát mồ hôi rồi bác ạ.

        Bạn lhthangktv này. bạn có thể vào trang www.lancos.com để download chương trình cũng như mạch nạp. Cái này bác RedRose post rồi mà.
        Em vẫn đang học và thấy cần phải học.
        Tiền thì ai cũng cần, học để làm ra tiền thì ít ai làm được.

        Comment


        • #19
          Khi truyền nhận với UART thì có phải set chân RX là in còn chân TX là out không ? Hay là cấu hình thế nào mà tớ làm hoài không chịu chạy(dùng ATMega8515, code bằng CodeVision) !

          Cấu hình UART và code như sau:
          <code>
          // USART initialization
          // Communication Parameters: 8 Data, 1 Stop, No Parity
          // USART Receiver: On
          // USART Transmitter: On
          // USART Mode: Asynchronous
          // USART Baud rate: 9600 , XTAL 11.0592
          UCSRA=0x00;
          UCSRB=0xD8;
          UCSRC=0x86;
          UBRRH=0x00;
          UBRRL=0x47;

          void put_char(unsigned char c)
          {
          UDR = c;
          while(!(UCSRA & 0x40));//chờ cho đến khi truyền xong
          UCSRA = UCSRA & (!0x40); // TXC = 0
          }

          interrupt [USART_RXC] void usart_rx_isr(void)
          {
          unsigned char c;
          c = UDR;
          UCSRA = UCSRA & (!0x80); // RXC = 0
          PORTC = c;//out led
          }
          </code>

          Xin chỉ giúp !

          Comment


          • #20
            Sao không có ai giúp mình hết nhỉ ?

            Khi generate code bằng CodeVision, nếu chọn mode không đồng bộ thì hai chân RX và TX đều được cấu hình là ngõ vào, còn nếu đồng bộ thì TX là ngõ ra. Như vậy là sao nhỉ ? Bình thường thì dùng mode nào ? Nhờ các cao nhân cho vài điểm chỉ.

            Ông AVR sao mà rắc rối quá, 8951 làm phát chạy liền. Chắc phải quay lại traditional thôi !

            Comment


            • #21
              Hi bocodai,

              Mình giả thiết bạn đã chọn đúng vị trí các bit cờ trong thanh ghi UCSRA. Cái sai lớn nhất và cũng là cái sai chủ yếu trong chương trình của bạn là phép toán "!". Phép toán này dùng cho đối tượng bit chứ không phải byte như bạn sử dụng.
              Cách đợi cờ của bạn không sai nhưng tốt hơn hãy viết như sau: while ((UCSRA&0x40)==0);
              Hiểu nhầm toán tử "!" nên bạn cũng sai luôn trong cách xóa cờ. (!0x40) hay (!0x80) đều bằng = 0x00. Vì thế các lệnh xóa cờ của bạn đều là UCSRA = UCSRA & 0x00 = 0x00. Vậy thì không xóa được cờ rồi. Để xóa thì hãy viết là:
              UCSRA = (1<<TxC); với TXC đã define = 6 (vị trí bit TXC trong thanh ghi UCSRA)
              UCSRA = (1<<RXC); với RXC đã define = 7 (vị trí bit RXC trong thanh ghi UCSRA)

              Thân mến,
              blackmoon.

              Comment


              • #22
                Ôi, hóa ra xoá cờ là set bit đó lên 1 hả bác ? UCSRA = (1<<TXC) : bit TXC sẽ là 1. Cảm ơn bác, về thử liền.

                Trong C, toán tử ! vẫn cho phép trên kiểu số : !x = 255 - x, nếu x là kiểu unsigned char. Nghĩa là nó sẽ đảo các bit trong x.

                Comment


                • #23
                  Hi bocodai,

                  Về toán tử "!", bạn có thể cài thêm AVRStudio để có thể mô phỏng với CodeVisionAVR. Lúc đó bạn sẽ rõ CodeVision làm gì với phép toán sử dụng toán tử đó của bạn.

                  Thân mến,
                  blackmoon.

                  Comment


                  • #24
                    Khi cờ đang bằng 1, ghi 1 vào sẽ xóa nó. Đó là một trong những điểm khác biệt của AVR. Bạn ghi 0 vào sẽ chẳng có tác dụng gì cả.

                    Thân mến,
                    blackmoon.

                    Comment


                    • #25
                      Xin lỗi bác, em nhầm với toán tử ~

                      Thì ra là vậy, phải ghi 1 vào đó. Nếu vậy thì phải luôn ghi vào là 1, bất kể muốn set nó là 0 hay 1, giá trị sau cùng sẽ phụ thuộc vào trạng thái hiện hành của bit trước khi ghi.

                      Hôm qua về hí hửng thử, ai ngờ cái mạch nạp tự nhiên ... toi, buồn bực vô cùng.

                      Vô cùng cảm ơn bác !

                      Comment


                      • #26
                        Hi bocodai,

                        Nếu bạn có được kết quả, hãy post lên thông báo để các bạn khác sau này bớt vấp phải các vấn đề như vậy.

                        Thân mến,
                        blackmoon.

                        Comment


                        • #27
                          Hi bocodai,

                          Còn một điều nữa là bạn không thể tự ý đặt cờ lên bằng 1 trong AVR được đâu. Cờ sẽ chỉ = 1 khi sự kiện gây ngắt xảy ra. Nói cách khác, bạn không thể tự tạo ra ngắt giả tạo bằng cách set cờ tương ứng lên bằng 1. Đây là một điểm khác nữa của AVR so với các vi điều khiển khác, các bạn làm với AVR phải lưu ý điều này.

                          Thân mến,
                          blackmoon.

                          Comment


                          • #28
                            Chào các bác, em đang định làm mạch đo nhiệt độ dùng Atmega16. Bác nào có tài liệu liên quan post lên diễn đàn được không.
                            Hoặc bác nào có tài liệu về Atmega16 tiếng việt cũng được. Em đang đọc giáo trình tiếng anh, nhưng vốn tiếng anh hạn chế nên đọc rất chậm.
                            Mong sự giúp đỡ của các bác

                            Comment


                            • #29
                              các bác à em đang làm về đồng hồ dùng RTC va AVR cả LCD nữa nhưng mà em không biết lâp trình lắm bác nao biết về cái nay chỉ dạy dùm em với,em cũng ko rõ về truyền thông với PC nua. Mong các bác chỉ dùm em,em cam on

                              Comment


                              • #30
                                các bác à em muốn làm mạch nạp cho AVR nhưng mà co một con VDk nó cần đươc lập trình mà em ko biết lâp trình nó như thế nào cả bác nào biết chỉ dùm em nhé em cám ơn các bác trước

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X