Thông báo

Collapse
No announcement yet.

Đọc dữ liệu từ chân AVR

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

  • Đọc dữ liệu từ chân AVR

    AVR đọc chuỗi bản tin từ 1 port có dạng đây là bản tin đầu ra của module GPS )

    $GPVTG,,T,,M,,N,,K
    $GPZDA,154852,07,02,2007,-7,0
    $GPRMC,154852,V,2102.6103,N,10551.0025,E,0.0,0.0,0 70207,1,W*63
    $GPGLL,2102.6103,N,10551.0025,E,154853,V
    $GPGGA,154853,2102.6103,N,10551.0025,E,0,0,,35,M,-23

    câu hỏi của mình là :
    1> Hàm nào cho phép đọc liên tục từng bit ký tự nhận được từ chân của AVR

    ---> mình muốn đọc liên tục cho đến khi nhận được 1 ký tự mong muốn thì dừng lại

    2> Hàm nào cho phép lấy các ký tự đọc được từ chân đó ghép thành 1 chuỗi

    ---> mình muốn lưu các ký tự liên tiếp ( khoảng 30 ký tự ) ngay sau ký tự mình tìm thấy ở trên

    Mình dùng CodevisionC để viết code.


    Ai bít về vấn đề này chỉ bảo mình nhé.. thank mọi người
    |

  • #2
    Bạn hãy cho biết rõ chuẩn giao tiếp ở Module GPS là gì, serial hay parallel..? Giao thức truyền, nhận dữ liệu của GPS? Nếu có sơ đồ mạch cho phần giao tiếp này càng tốt. Khi đó mình hoặc các bạn khác mới có thể giúp bạn một cách chi tiết được.
    Câu hỏi thứ 1 của bạn chưa trả lời được vì thông tin ko đầy đủ (nếu là dữ liệu serial thì theo chuẩn nào UART, I2C, SPI..hay cái nào khác???)
    2. Để ghép các ký tự vào 1 chuỗi 30 ký tự thì bạn sử dụng biến con trỏ để lưu từng ký tự vào các ô nhớ liên tiếp nhau. Ký tự cuối cùng bạn thêm vào là '\n' là ký tự nhận diện kết thúc chuỗi. Nếu bạn lưu trong SRAM thì ví dụ muốn xuất ra màn hình LCD thi dùng lệnh lcd_puts(char *str);

    Mến!
    Last edited by zinix; 29-04-2009, 09:14.

    Comment


    • #3
      AVR đọc chuỗi bản tin từ 1 port có dạng đây là bản tin đầu ra của module GPS )

      $GPVTG,,T,,M,,N,,K
      $GPZDA,154852,07,02,2007,-7,0
      $GPRMC,154852,V,2102.6103,N,10551.0025,E,0.0,0.0,0 70207,1,W*63
      $GPGLL,2102.6103,N,10551.0025,E,154853,V
      $GPGGA,154853,2102.6103,N,10551.0025,E,0,0,,35,M,-23
      Bản tin ở đầu ra của module GPS thì chắc là chuẩn RS232 của cổng COM rồi, nhưng mà không biết giao thức truyền (cách quy định frame truyền dữ liệu) thì không biết được ý nghĩa các byte nó gửi về. Muốn biết thì phải có tài liệu của module GPS mới được.
      1> Hàm nào cho phép đọc liên tục từng bit ký tự nhận được từ chân của AVR

      ---> mình muốn đọc liên tục cho đến khi nhận được 1 ký tự mong muốn thì dừng lại
      Mỗi ký tự trong bảng mã ACSII được quy định bởi một byte, như vậy nếu bạn nhận và kiểm tra từng bít trên chân của VĐK thì bạn không thể kiểm tra được đúng kí tự mong muốn đâu. Có hai trường hợp:
      - Nếu bạn nhận dữ liệu nối tiếp từ một chân của VDK thì mỗi lần bạn nhận được 1 bit, vậy cứ sau 8 bit liên tiếp (1 byte) bạn lại kiểm tra một lần xem có phải ký tự mong muốn không, cho đến khi nhận được đúng thì thôi
      - Nếu bạn nhận dữ liệu song song từ một cổng, thì mỗi lần bạn nhận được 1 byte, vậy mỗi lần nhận một byte nào đó bạn sẽ kiểm tra xem nó có phải là ký tự mong muốn hay không, cho đến khi bạn nhận được đúng ký tự mong muốn thì thôi.
      2> Hàm nào cho phép lấy các ký tự đọc được từ chân đó ghép thành 1 chuỗi

      ---> mình muốn lưu các ký tự liên tiếp ( khoảng 30 ký tự ) ngay sau ký tự mình tìm thấy ở trên

      Mình dùng CodevisionC để viết code.
      Khi bạn kiểm tra thấy nhận đúng ký tự mong muốn rồi, thì bạn bắt đầu nhận các ký tự đó lưu vào bộ nhớ. Nếu dữ liệu bạn nhận từ cổng COM thì bắt đầu từ ký tự mong muốn, các lần ngắt nhận sau bạn copy byte nhận được vào một vùng nhớ liên tiếp cho đến hết 30 byte là xong.

      Một vài lời góp ý, mong các cao thủ chỉ giáo thêm cho

      Thân mến,
      For a better world

      Comment


      • #4
        thank mọi người nhé.thank Zinix và Toan.lv . Mình làm được rùi.
        |

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X