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

  • Giao tiep ATmega16 với PC bằng Max232

    Chào các bác trên diễn đàn

    Lần đầu tiên em vào diễn đàn này, thấy hay quá. Em đăng ký luôn và cũng tại vì có một thắc mắc nhỏ mong các bác xử lý hộ em.

    Em cho con ATmega16 đọc nhiệt đô từ LM35 được rồi. Nhưng bây giờ em muốn nối với máy tính. Em đã đọc cái datasheet của ATmega16 và làm theo cái code cua nó mà không được :

    USART_Transmit:
    ; Wait for empty transmit buffer
    sbis UCSRA,UDRE
    rjmp USART_Transmit
    ; Copy 9th bit from r17 to TXB8
    cbi UCSRB,TXB8
    sbrc r17,0
    sbi UCSRB,TXB8
    ; Put LSB data (r16) into buffer, sends the data
    out UDR,r16
    ret

    Trong máy tính em dùng phần mềm Hyper Teminal để nhận qua COM1. chẳng thấy nó nhận được cái gì cả. Trắng tinh.

    Mong các bác có đoạn code nào tốt hơn thì cho em xin với. Nhưng đừng khuyên em thay đổi VXL nhé vì ở các vùng núi của em thì mua được VXL mất công lắm.

    À, tí nữa thì quên mất. Các bác có cái sơ đồ bàn phím 12 số :

    9 Enter
    6 7 8
    3 4 5
    0 1 2

    hoặc đại loại như vậy cho em xem với.

    Cảm ơn các bác
    Last edited by chi_co_nui; 22-07-2006, 13:56.
    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.

  • #2
    Chào bác
    Code asm vậy là chuẩn nhất rồi còn gì. Theo em bác thử xem lại phần thiết lập hoạt động (init) cho UART xem có chuẩn chưa, baudrate thế nào. Ngoài ra bác có thể xem xét phần cứng xem liệu có hỏng hóc gì không.
    Còn mạch bàn phím chỉ là 1 ma trận nối vào 1 port thôi mà. Bác tìm trên diễn đàn là có đấy.

    Chúc thành công!
    chunhanhoabattu :rose:

    Comment


    • #3
      Cảm ơn bác RedRose.

      Em làm được cái bàn phím rồi, nhưng mà mới được có 4 phím vì không có phím. Chắc phải chờ 10 ngày nữa về Hà Nội chắc mới mua được.

      Em chưa rõ lắm ý của của bác. Bác nói là thiết lập hoạt động ( Init của UART ). Em tưởng mình chỉ viết đoạn code như hướng dẫn là nó chạy chứ. Vậy thì còn phải thiết đặt gì nữa hả bác. Mong bác chỉ dẫn chi tiết cho em với. Thông cảm đi bác, ở đây chẳng biết hỏi ai cả.
      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


      • #4
        Đây là đoạn code init, bác phải có đoạn này trước khi truyền/nhận chứ
        Code:
        USART_Init:
             ; Set baud rate
             out UBRRH, r17
             out UBRRL, r16
             ; Enable receiver and transmitter
             ldi r16, (1<<RXEN)|(1<<TXEN)
             out UCSRB,r16
             ; Set frame format: 8data, 2stop bit
             ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)
             out UCSRC,r16
        ret
        Công việc bao gồm:
        - Thiết lập tốc độ truyền nhận: ví dụ 9600bps, 14,4k; 19,2k; 28,8k ...........
        Bác tính số chia để nạp vào thanh ghi UBRR (gồm 2 thanh ghi UBRRH, UBRRL với những chip tốc độ cao như dòng ATmega)
        Công thức tính là:
        UBRR = Fosc/16*BAUDRATE-1 (với U2X=0)
        Các giá trị UBRR này đã được tính ở mục Examples of Baudrate setting ở trong Datasheet rồi. Bác xem ở đó nhé, chú ý chọn theo tần số thạch anh sao cho sai số là bé nhất nhé.

        - Cho phép bộ truyền/nhận hoạt động bằng cách set bit TXEN và RXEN, ở trên là thiết lập đọc/ghi bằng cách polling chứ ko dùng ngắt. Nếu dùng ngắt bác thiết lập các bit RXCIE và TXCIE.

        - Thiết lập khuôn dạng dữ liệu truyền/nhận: số bit dữ liệu, số bit stop.

        Ở phía máy tính bác cũng phải thiết lập khuôn dạng đúng như thế thì quá trình truyền nhận mới thực hiện được.

        Hí hí mà bác post bài ở đây mà nói ko ai giúp cả là thế nào , box AVR có vẻ hơi vắng nhỉ, có tui thất nghiệp đang rảnh rỗi thui . Tuy nhiên bác yên tâm là sẽ có người giúp
        Chúc vui!
        chunhanhoabattu :rose:

        Comment


        • #5
          phan mem Hyperterminal hoat dong nhu the nao vay?bac co the post len mang cho anh em dung voi duoc khong.tui cung dang may mo ve AVR phan giao tiep may tinh.tui co mot doan ma viet nhu sau khong biet co chay duoc khong,cac bac chi voi.
          void main(void){
          //sau khi khai bao day du ve USART
          unsigned char du_lieu;
          while (1)
          {
          putchar("Hello");//kiem tra xem cong com co hoat dong khong
          du_lieu=getchar();//nhan du lieu tu may tinh
          putchar(du_lieu);//gui du lieu ve may tinh
          delay_ms(200);//tre 200ms
          }
          //hai ham getchar va putchar co trong thu vien <stdio.h>
          //mong cac cac giup do
          //chuong trinh cua toi chua co giao dien

          }

          Comment


          • #6
            Tui chưa sử dụng Hyper Terminal, ko biết nó hoạt động ra sao cả

            CT của bác viewerbk chắc là hoạt động tốt rồi, tui mới chỉ hay viết về ASM thôi . Bác thử xem sao.

            Tui có chương trình này các bác có thể sử dụng cho mục đích thử nghiệm của mình. Có yêu cầu chỉnh sửa gì bảo tui nếu có thời gian và ko có gì đặc biệt của yêu cầu thì tui viết lại cho
            Attached Files
            Last edited by RedRose; 26-07-2006, 18:47.
            chunhanhoabattu :rose:

            Comment


            • #7
              tui cung da viet mot chuong trinh bang VC++ ve truyen nhan du lieu bang cach noi 2 chan TXD,RXD lai voi nhau.va khi truyen thi nhan dc luon.
              Van de cua tui o cho khong lam cach nao cho VDK giao tiep dc voi may tinh mac du da thao khao nhieu tai lieu va kiem tra phan cung rat ky.

              Comment


              • #8
                rat cam on chuong trinh cua bac REDROSE,tui se thu xem sao.

                Comment


                • #9
                  xem chung bac rat gioi ve ASM thi phai ,bac co the gui code bang ASM len duoc khong, tui se dịch sang C xem sao.

                  Comment


                  • #10
                    Van de cua tui o cho khong lam cach nao cho VDK giao tiep dc voi may tinh mac du da thao khao nhieu tai lieu va kiem tra phan cung rat ky
                    Bác thử post code bác làm lên đây xem sao.
                    Nếu phần cứng tốt thì tui nghĩ chỉ do phần init thôi. Bác chú ý từ tần số thạch anh mà chọn tốc độ baudrate phù hợp.
                    Code C phần init ở trong datasheet như này là ổn rồi:
                    Code:
                    void USART_Init( unsigned int baud )
                    {
                    /* Set baud rate */
                       UBRRH = (unsigned char)(baud>>8);
                       UBRRL = (unsigned char)baud;
                    /* Enable receiver and transmitter */
                       UCSRB = (1<<RXEN)|(1<<TXEN);
                    /* Set frame format: 8data, 2stop bit */
                       UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
                    }
                    Dĩ nhiên cần nhắc lại là phía máy tính cũng phải thiết lập giống phía MCU
                    chunhanhoabattu :rose:

                    Comment


                    • #11
                      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é.
                      Nỏ biết chữ mần răng ký được??!! Thôi nhé.

                      Comment


                      • #12
                        Truyền dữ liệu từ AVR sang PC

                        Các bác ơi

                        Em cho truyền số liệu từ AVR sang PC được rồi. Nhưng bây giờ có một vấn đề này :

                        Em muốn truyền 2 loại số liệu sang, ngày tháng năm và giá trị nhiệt độ. Em thử cho truyền nhưng nó nhận linh tinh. Vậy làm sao để tách bạch được hai số liệu này các bác nhỉ. Giúp em với
                        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


                        • #13
                          Oài cái này bác phải tự quy định chứ.
                          Chẳng hạn như bắt đầu bằng ký tự # - sau đó là 1 byte nhiệt độ - sau là 1 byte giá trị ngày - sau nữa là 1byte giá trị tháng - cuối là 1byte giá trị năm (hoặc 2byte)
                          chunhanhoabattu :rose:

                          Comment


                          • #14
                            Ok, roi bac. em phat hien thay no gui ra mot chuoi ky tu. em cho xu ly theo chuoi ky tu cung tam duoc bac a. Nhung cach bac noi chu dong hon. em lam ca 2 cach thay ok. Thich qua bac oi
                            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


                            • #15
                              khó thế bạn làm được chưa,post sản phẩm lên cho cbà con chiêm ngưởng nào

                              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