Thông báo

Collapse
No announcement yet.

hỏi về về truyền thông máy tính và ATmega8

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

  • hỏi về về truyền thông máy tính và ATmega8

    Chào anh em…
    Mình đang gặp 1 vấn đề “mệt mỏi” dám thỉnh ý của anh em đây. Trời ạ !!! anh em xem dùm mình xem mình bị sao nhé.
    Mình đang dùng cổng COM để thực hiện truyền thông nối tiếp với VĐK Atmega8, nhưng ko hiểu sao con Atmega mình bị “ma ám ” hay nào ý.
    Vấn đề như sau: Cổng com của mình thì ok, mình đã test thử, truyền nhận dữ liệu thì ngon. Còn VĐK thì mình cũng chưa chắc chắn có bị sao ko nhưng chắc cũng ko có vấn đề gì? Vậy mà khi thực hiện truyền thông thì chán quá, chẳng thấy con Atmega8 có động tĩnh gì cả? trước tiên mình truyền dữ liệu từ máy tính xuống và cho VĐk nhận và hiển thị bằng PORTC. Nhưng VĐK nhận dữ liệu rất lung tung và đương nhiên dẫn tới những ứng dụng điều khiển của mình đi theo “mây khói ” luôn.
    Đây là vấn đề rất quan trọng đối với mình nên mình rất mong tham khảo ý kiến của các bạn trên diễn đàn.
    À, đây là code của mình thực hiện việc nhận dữ liệu của VĐK và hiển thị bằng 8 đơn trên PORTC. Giả sử bạn đã có dữ liệu đưa xuống tù máy tính rùi nhé, các bạn thử xem

    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>


    void UART_Trans(unsigned char i) // ham truyen du lieu len may tinh
    {
    while (( UCSRA & 0x20 ) == 0)
    UDR = i;
    }


    unsigned char UART_Re() // ham nhan du lieu nhan ve
    {
    char data;
    while((UCSRA & 0x80)==0);
    data = UDR;
    return data;
    }



    void main(void)
    {
    unsigned char nhan;

    // Khoi tao PORTB
    PORTB=0x00;
    DDRB=0x00;

    // Khoi tao PORTC
    PORTC=0x00;
    DDRC=0x7F;

    // Khoi tao PORTD
    PORTD=0x00;
    DDRD=0xFE;

    // Khoi tao Timer 0
    TCCR0=0x00;
    TCNT0=0x00;

    // Khoi tao Timer 1
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Khoi tao Timer 2
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // Khoi tao ngat ngoai
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;

    // Khoi tao ngat Timer
    TIMSK=0x00;

    // Khoi tao USART khung truyen: 8 Data, 1 Stop, No Parity
    // su dung truyen nhan USART
    // toc do baud : 9600
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x4D;

    // khoi tao bo so sanh analog
    ACSR=0x80;
    SFIOR=0x00;

    while (1)
    {
    nhan=UART_Re(); // gia tri nhan dc luu vao bien nhan
    PORTC=nhan; // hien thi tren Led don cua PORTC
    delay_ms(50);
    };
    }

  • #2
    Mạch chạy được vậy là ổn rồi, vấn đề đáng chú ý ở đây chính là xung nhịp mà con mega8 đang chạy, khi mới mua, ATmega8 mặc định chạy ở 1 MHz vớ bộ tạo xung trong chip, bạn có gắn hay không gắn thạch anh thì không ảnh hưởng.

    Bây giờ bạn thử tính toán lại thông số của thanh ghi baurate ở 1 MHz thay vì là tần số của con thạch anh bạn đang dùng. Nếu thấy nó chạy đúng thì có nghĩa là con mega8 của bạn chưa set fuse để chạy với thạnh anh ngoài ! Set fuse lại là OK ngay.

    NVT2
    Tín đồ AVR giáo.

    Comment


    • #3
      con này mình dùng khá lâu rùi..
      thực hành trên các modul khác thì okie.
      ah trước đây(khoảng 1 tuần) thì mình truyền thông ngon lành nhưng vài ngày nay nó "dở chứng" thế đấy.

      Comment


      • #4
        Bạn dùng Thạch anh trong hay ngoài? Bao nhiêu MHz. Fuse set đúng chưa?
        Bạn thay con khác thử xem. Tôi đã từng gặp những con AVR bị chết đúng cổng COM còn các chức năng khác vẫn phình phường (nghĩ vẫn còn cay bọn Đội cấn vừa bán đắt vừa bán hàng lởm).
        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


        • #5
          chào bạn...
          mình dùng thạch anh ngoài 12MHz.
          mà bạn cho mình hỏi nhé Fuse set là gì vậy?
          có thể mình sẽ thay con khác nhưng giờ vẫn dùng nó, mình cũng nghi ngờ nhất là tại con Atmega của mình thôi.
          okie
          thanks

          Comment


          • #6
            bác ntv2 nói là con mega8 mới mua về chạy thạch anh trong 1M? em là người mới vào nghề nên không biết đặt fuse bit nên em không làm gì cả, có điều là em vẫn thấy nó chạy thạch anh ngoài. Bằng chứng là em gỡ bỏ thạch anh thì nó không chạy, còn nếu nối vào thì nó mới chạy bình thường. Thứ 2 là em nối thạch anh ngoài với tần số 8M, tính toán truyền thông với máy tính qua UART chạy ngon lành như thường. Vậy là sao, mới mua về làm sao biết con chip chạy thạch anh trong hay ngoài đây????
            Nếu tôi chết đi, hãy chôn tôi với R,L,C...

            Bùi Đức Thọ
            (ductho0409@gmail.com)

            Comment


            • #7
              Lấy oscillo soi thì mới biết được nó dùng thạch anh trong hay ngoài. Không có osc thì chịu
              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


              • #8
                Nếu chưa biết Fuse set thế nào thì thử lấy con mega8 khác cho chạy thử xem sao, NVT2 có thấy cái mạch của bạn đâu, chỉ đoán già đoán non thế thôi, có thể trúng, cũng có thể trật

                NVT2 đã từng bị tương tự vậy nên cũng chỉ là nói lại kinh nghiệm của mình thôi, còn tìm ra nguyên nhân tại sao thì cái này 99.9% công sức của bạn !

                Chúc thành công !

                NVT2
                Tín đồ AVR giáo.

                Comment


                • #9
                  Nguyên văn bởi atmega8 Xem bài viết
                  bác ntv2 nói là con mega8 mới mua về chạy thạch anh trong 1M? em là người mới vào nghề nên không biết đặt fuse bit nên em không làm gì cả, có điều là em vẫn thấy nó chạy thạch anh ngoài. Bằng chứng là em gỡ bỏ thạch anh thì nó không chạy, còn nếu nối vào thì nó mới chạy bình thường. Thứ 2 là em nối thạch anh ngoài với tần số 8M, tính toán truyền thông với máy tính qua UART chạy ngon lành như thường. Vậy là sao, mới mua về làm sao biết con chip chạy thạch anh trong hay ngoài đây????
                  Theo datasheet của AVR, tất của các chip được xuất xưởng đều được mặc định chạy với internal RC ở 1 MHz với mục đích cho nó nạp đươc với cả ISP và Parallel mà không cần thêm mạch dao động phụ trợ.

                  Atmel nói thế, mình tin vậy thôi, xài thì mình thấy nó đúng là như vậy, nhiều khi mấy bác bán hàng rãnh rổi set fuse dùm hoặc là trong quá trình nạp với mạch nạp qua cổng LPT bạn vô tình nhấn phải nút nào đó mà không để ý !

                  NVT2
                  Tín đồ AVR giáo.

                  Comment


                  • #10
                    Nguyên văn bởi gtvt45 Xem bài viết
                    con này mình dùng khá lâu rùi..
                    thực hành trên các modul khác thì okie.
                    ah trước đây(khoảng 1 tuần) thì mình truyền thông ngon lành nhưng vài ngày nay nó "dở chứng" thế đấy.
                    Bạn kiểm tra lại con MAX232 xem sao, nhiều khi phần cứng bị lỗi !

                    NVT2
                    Tín đồ AVR giáo.

                    Comment


                    • #11
                      ối chà...
                      anh em ơi. đúng là mạch của mình bị "ma ám" thật rồi.
                      hôm nay lại chạy ngon lành như trước.
                      các bạn có thể giải thích tại sao thế ko?
                      hi hi...

                      Comment


                      • #12
                        Có mấy vấn đề mà khi thực hiện truyền thông với chip mình hay gặp phải như sau:

                        1. MAX232 sơ đồ đấu nối yêu cầu rất tỉ mỉ. Tụ thường dùng (4 con) 10uF và cực(-,+) của tụ cũng phải tuân theo đúng sơ đồ nguyên lí. MAX232 có 2 kênh vì vậy cũng nên tỉnh tao kẻo nhầm lẫn các kênh. Tôi thường dùng kênh 1 bao gồm các chân 7,8,9,10 trong đó 7,8 đấu nối với máy tính còn 9,10 đấu nối với chip.
                        2. Ngoài việc đấu cáp chéo TxD->RxD, RxD->TxD thì việc đặc biệt lưu tâm là chân số 5 của COM máy tính phải được nối với mát của MAX và mạch.
                        3. Mạch thử nghiệm nên đi kèm với LCD vi như vậy chúng ta quan sát được dữ liệu nhận được. Tốc độ truyền lớn nhất phụ thuộc vào tần số thạch anh. Thường thạch anh 8Mb truyền tốt ở 9600 baud.
                        4. Nên thử nghiệm viết chương trình truyền từ CHIP nên máy tính trước. Sử dụng HyperTerminal để truyền nhận qua cổng COM1. Lưu ý tốc độ truyền của chip và của HyperTerminal phải đồng bộ.
                        5. Để nhận dữ liệu trên CHIP chúng ta thường dùng ngắt truyền thông. Với một dòng text thường kết thúc mỗi chuỗi dữ liệu có hai ký tự điều khiển CR/LF. Khi truyền nhận nhiều tham số bạn hãy thiết lập thành các khung-Frame dữ liệu trong đó thường gồm kí tự bắt đầu+mã dữ liệu+giá trị dữ liệu+ký tự kết thúc.
                        http://techpal.vn
                        Chia sẻ công nghệ, cùng thành công

                        Comment


                        • #13
                          đại ca gtvt ơi có thể gủi mạch cho em được không ? em đang rất cần

                          Comment


                          • #14
                            bạn thử xem lại giá trị của UBRRL, mọi khi mình làm với tần số 11.059200 mình set tần UBRRL=0X47; sao giá trị của bạn lại là 0x4D vậy??

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X