Thông báo

Collapse
No announcement yet.

Giao tiep ATmega16 với PC bằng Max232

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

  • #16
    Mình cũng gặp rắc rối với vấn đề này. Code cho Atmega16 mình dùng wizard của CodeVisionAVR, PC thì dùng C#. Atmega16 chỉ làm mỗi nhiệm vụ là nhận được byte nào thì forward nó ra TxD luôn. Mạch nối ghép dùng MAX-232, mình lắp theo datasheet của nó. Nhưng không hiểu sao PC gửi hàng chục ký tự thì VDK mới gửi lại một ký tự, và ký tự đó cũng không chính xác là ký tự mà PC đã gửi. Baudrate và format mình đã chọn giống hệt nhau rùi: 9600, 8, non-pairity , 1 bit stop . Có bạn nào giải thích cho mình lý do tại sao với.

    Comment


    • #17
      Giúp em với!Em cũng đang gặp vấn đề rắc rối về việc chuyển dữ liệu từ ATmega16 lên máy tính
      đồ án của em thì AVR chỉ làm nhiệm vụ chuyển dữ liệu lên máy tính, còn mọi việc tính toán là bọn em phải xử lý trên máy tính hết. Nhưng khó ở chỗ là tín hiệu đầu vào VĐK của bọn em là dữ liệu 16bit, theo em được biết thì dữ liệu đầu vào máy tính chỉ là 8bit. Máy tính chỉ truyền nhận dữ liệu 8bit.Vì thế mà bọn em ko biết phải xử lý tình huống này như thế nào. Mong các bác chỉ bảo giùm tụi em với.

      Comment


      • #18
        Cắt 16bit ra làm đôi rồi truyền. Lập trình cho chương trình nhận trên PC trigger sau khi nhận 2byte
        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


        • #19
          Cảm ơn bác apple! bác có thể nói rõ hơn cho em được không ạ?:
          - code viết cho AVR để "cắt 16bit ra làm đôi rồi truyền" như bác nói (em dùng C viết cho AVR) như thế nào ạ? Vì em cũng mới làm quen với AVR thôi nên còn hạn chế rất nhiều
          - bác có thể nói rõ hơn về "Lập trình cho chương trình nhận trên PC trigger sau khi nhận 2byte" được không? em chưa hiểu lắm ý của bác
          thanks!

          Comment


          • #20
            Nguyên văn bởi miss_yen Xem bài viết
            Cảm ơn bác apple! bác có thể nói rõ hơn cho em được không ạ?:
            - code viết cho AVR để "cắt 16bit ra làm đôi rồi truyền" như bác nói (em dùng C viết cho AVR) như thế nào ạ? Vì em cũng mới làm quen với AVR thôi nên còn hạn chế rất nhiều
            - bác có thể nói rõ hơn về "Lập trình cho chương trình nhận trên PC trigger sau khi nhận 2byte" được không? em chưa hiểu lắm ý của bác
            thanks!
            -Phần cắt 16bit thành 2byte thì bác xem lại phần "Struct" và "Union" trong lý thuyết C hoặc tham khảo box AVR này cũng có nhưng tôi ko nhớ tên luồng nữa.

            -Phần lập trình trên PC, nếu bạn dùng VB thì trong điều khiển MSOCX sẽ có thuộc tính trigger. Thuộc tính này quy định sẽ xuất dữ liệu ra ngoài sau khi PC nhận được bao nhiêu byte. Bạn tham khảo bên phần lập trình giao tiếp PC bằng VB của bác Ngo Hai Bac sẽ rõ, mình nói lại sẽ thành ăn cắp bản quyền của các bậc tiền bối.
            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


            • #21
              Cảm ơn bác!
              Em sẽ xem và nếu có gì khúc mắc xin được hỏi bác sau.

              Comment


              • #22
                Nguyên văn bởi thangktvta Xem bài viết
                Tôi cũng đã thực hiện như bác. Nhưng viết bằng C trên Code Vision. Dùng Winzard trong Code vision thì đỡ phần UART_init. Bác chỉ cần viết hai hàm Truyền và Nhận, tương dữ liệu vào là Truyền lên PC được thôi. Tiếc là tôi không mang theo Code ở đây. Hẹn hôm sau nhé.
                Bác có mô phỏng không em cũng dùng codevision như bác nhưng dùng proteus mô phỏng thây chuyền nhận loạn cả lên bác a!
                Bác có gì post bài lên em tham khảo với
                nich của em conan8620042002@yahoo.com

                Comment


                • #23
                  Atmega16 - RS232

                  Doạn code sau tôi viết cho vi điều khiển Atmega16 để truyền dữ liệu lên máy tính theo chuẩn giao tiếp RS232 nhưng không chạy, không biết tại sao. Mong mọi người chỉ giùm!
                  Truyền dữ liệu 8 bit, 2 bit stop, 9200bps.

                  # include <iom16v.h>
                  void CPU_init(void)
                  {
                  asm("CLI");
                  MCUCR = 0x00;
                  GICR = 0x00;
                  TIMSK = 0x00;
                  asm("SEI");
                  }
                  void PORT_init(void)
                  {
                  DDRA=0x00;
                  DDRB=0xFF;
                  DDRC=0xFF;
                  DDRD=0x00;
                  }
                  void usart_init()
                  {
                  UCSRA=0x00;
                  UCSRB=0x00;
                  UBRRH=0x00;
                  UBRRL=0x33;
                  UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
                  UCSRB=(1<<RXEN)|(1<<TXEN);
                  }
                  void USART_Transmit( unsigned char data )
                  {

                  while ( !( UCSRA & (1<<UDRE)))
                  {}
                  UDR = data;
                  }
                  void main(void)
                  {
                  CPU_init();
                  PORT_init();
                  usart_init();
                  while(1)
                  {
                  USART_Transmit(65);
                  }
                  }

                  Comment


                  • #24
                    Nguyên văn bởi P511 Xem bài viết
                    Doạn code sau tôi viết cho vi điều khiển Atmega16 để truyền dữ liệu lên máy tính theo chuẩn giao tiếp RS232 nhưng không chạy, không biết tại sao. Mong mọi người chỉ giùm!
                    Truyền dữ liệu 8 bit, 2 bit stop, 9200bps.

                    # include <iom16v.h>
                    void CPU_init(void)
                    {
                    asm("CLI");
                    MCUCR = 0x00;
                    GICR = 0x00;
                    TIMSK = 0x00;
                    asm("SEI");
                    }
                    void PORT_init(void)
                    {
                    DDRA=0x00;
                    DDRB=0xFF;
                    DDRC=0xFF;
                    //DDRD=0x00;
                    DDRD.0=0;
                    PORTD.0=1;
                    DDRD.1=1;

                    }
                    void usart_init()
                    {
                    UCSRA=0x00;
                    UCSRB=0x00;
                    UBRRH=0x00;
                    UBRRL=0x33;
                    UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
                    UCSRB=(1<<RXEN)|(1<<TXEN);
                    }
                    void USART_Transmit( unsigned char data )
                    {

                    while ( !( UCSRA & (1<<UDRE)))
                    {}
                    UDR = data;
                    }
                    void main(void)
                    {
                    CPU_init();
                    PORT_init();
                    usart_init();
                    while(1)
                    {
                    USART_Transmit(65);
                    }
                    }
                    Bạn thêm vào các dòng lênh này thử xem, mình tô đen ở trên rồi,
                    bạn thử truyền thử nha.

                    DDRD.0=0;
                    PORTD.0=1;
                    DDRD.1=1;
                    Phone: 0909319477
                    Email:

                    Comment


                    • #25
                      Nguyên văn bởi viewerbk Xem bài viết
                      putchar("Hello");//kiem tra xem cong com co hoat dong khong
                      trong C phải viết thế này mới đúng

                      Code:
                       putchar('Hello');//kiem tra xem cong com co hoat dong khong
                      Vì dấu (") là Flash string rồi.
                      Nói chung là thay dấu (") bằng (')

                      Comment


                      • #26
                        pan nao co so do nguyen li mach giao tiep may tinh hien thi nhiet do dung atmega 16 giup minh zoi

                        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