Vi xử lý và giao tiếp với mt
Trong lập trình nhúng, kiến trúc vi điều khiển là rất quan trọng. Nếu nói lập trình là tạo ra trí thông minh cho máy tính, thì việc hiểu rõ cấu trúc, cấu tạo của máy tính sẽ giúp chúng ta hiểu cách vận hành của chúng. Từ đó điều khiển chúng một cách dễ dàng và mượt mà hơn. Show
Đây là những kiến thức bắt buộc phải học đối với mỗi một kĩ sư nhúng. Vậy, cùng tìm hiểu nhé!
Vi điều khiển là một máy tính được tích hợp trên một chip, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các module vào/ra, các module biến đổi số sang tương tự và tương tự sang số,… Vi điều khiển thường được sử dụng để xây dựng các hệ thống nhúng. Nó cũng được sử dụng trong các thiết bị điện, điện tử như máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện hay dây chuyền sản xuất tự động,… Theo wikipedia. Các họ vi điều khiểnHọ vi điều khiển AtmelĐây là một dòng đã quá quen thuộc khi các bạn học vi điều khiển trên ghế nhà trường, điển hình của nó là họ 8051. Ngoài ra còn có các dòng như sau:
Họ vi điều khiển STMicroelectronicsĐây là dòng chip chủ đạo trong các bài học của mình, đại diện chính là dòng STM32 huyền thoại
Họ vi điều khiển MicrochipQuá quen thuộc với các dòng PIC huyền thoại. VD:
Các dòng vi điều khiển khácNgoài ra còn có các dòng ít gặp của các hãng khác như:
Phân loại vi điều khiểnPhân loại theo độ dài thanh ghiDựa vào độ dài của các thanh ghi và các lệnh của VĐK mà người ta chia ra các loại vi điều khiển 8 bit, 16 bit hay 32 bit … Các loại VĐK 16 bit do có độ dài lệnh lớn hơn nên các tập lệnh cũng nhiều hơn, phong phú hơn. Tuy nhiên bất cứ chương trình nào viết băng VĐK 16 bit chúng ta đều có thể viết trên vi điều khiển 8 bit với chương trình thích hợp. Phân loại theo kiến trúc CISC và RISCVi điều khiển CISC là vi điều khiển có tập lệnh phức tạp. Các VĐK này có một số lượng lớn các lệnh nên giúp cho người lập trình có thể linh hoạt và dễ dàng hơn khi viết chương trình. Vi điều khiển RISC là vi điều khiển có tập lệnh đơn gian. Chúng có một số lượng nhỏ các lệnh đơn giản. Do đó, chúng đòi hỏi phần cứng ít hơn, giá thành thấp hơn, và nhanh hơn so với CISC. Tuy nhiên nó đòi hỏi người lập trình phải viết các chương trình phức tạp hơn, nhiều lệnh hơn. Kiến trúc Harvard và kiến trúc Von-NeumannKiến trúc Harvard sử dụng bộ nhớ riêng biệt cho chương trình và dữ liệu. Bus địa chỉ và bus dữ liệu độc lập với nhau nên quá trình truyền nhận dữ liệu đơn giản hơn. Kiến trúc Von-Neumann sử dụng chung bộ nhớ cho chương trình và dữ liệu. Điều này làm cho VĐK gọn nhẹ hơn, giá thành rẻ hơn. Tại sao chúng ta hay nhầm lẫn giữa vi điều khiển và vi xử lýChúng ta thường bị nhầm giữa vi điều khiển và vi xử lý. Vậy rốt cuộc chúng giống và khác nhau gì Điểm giống nhauVi điều khiển và vi xử lý đều xử lý thông tin điều khiển sự hoạt động của máy tính hoặc mạch điện. Chúng có kịch thước và hình dáng khá giống nhau. Vì vậy nên sẽ rất dễ nhầm lẫn 2 khái niệm này với nhau. Vậy chúng khác nhau như thế nào? Điểm khác biệtNếu ví vi điều khiển như một con người thì vi xử lý chính là bộ não.
Cấu trúc tổng quan của vi điều khiểnCấu trúc vi điều khiểnCPU hay Vi xử lýCPU (Center Programing Unit) hay bộ xử lý trung tâm là bộ não của vi điều khiển. CPU chịu trách nhiệm nạp lệnh, giải mã và thực thi. Tất cả những hành vi của vi điều khiển đều là do CPU điều khiển. Chúng giao tiếp với các phần khác trong vi điều khiển thông qua hệ thống Bus. Ocscillator CircuitNếu CPU là bộ não thì Ocscillator Circuit hay còn gọi là Clock được coi là trái tim của vi điều khiển. Để mọi thứ có thể hoạt động, bắt buộc chúng ta phải cấp xung, trái tim hoạt động mới có thể bơm máu cho toàn bộ cơ thể hoạt động được. Chúng ta thường nghe quảng cáo dòng vi xư lý có tốc độ bao nhiêu Ghz gì gì đó, chính là tốc độ Clock mà vi xử lý đó có thể đáp ứng được, tốc độ xung càng cao thì tốc độ xử lý của CPU cũng tăng lên. Đương nhiên mọi thứ đều có giới hạn của nó. Memory – Bộ nhớBộ nhớ có thể coi là một phần không thể thiếu, chúng là nơi lưu trữ chương trình nạp lên hoặc dùng làm nơi chứa các thông tin tức thời mà CPU cần dùng tới. Có 2 kiểu bộ nhớ cơ bản:
Timer/counterMột vi điều khiển có thể có nhiều bộ đếm thời gian và bộ đếm. Bộ đếm thời gian và bộ đếm có chức năng đếm thời gian tạo ra các sự kiện để vi điều khiển hoạt động đúng thời điểm. Các ngoại vi của vi điều khiểnNgoại vi của vi điều khiểnI/O Ports – Input/ouputCó thể coi I/O Port là tay chân của vi điều khiển, chúng giúp cho vi điều khiển tương tác với các thành phần khác ngoài môi trường. Cổng đầu vào / đầu ra được sử dụng chủ yếu điều khiển hoặc giao tiếp các thiết bị như màn hình LCD, đèn LED, máy in, …cho vi điều khiển. Các chuẩn giao tiếpGiống như miệng và tai vậy. Vi điều khiển sẽ sử dụng các chuẩn giao tiếp khác nhau để liên lạc với nhau hoặc liên lạc với các phâng tử khác trên mạch. Có thể kể đến như I2C, SPI, UART, USB, …. Bộ chuyển đổi analog sang digital (ADC)Bộ chuyển đổi ADC được sử dụng để chuyển đổi tín hiệu analog sang dạng digital. Tín hiệu đầu vào trong bộ chuyển đổi này phải ở dạng analog (ví dụ: đầu ra cảm biến) và đầu ra từ thiết bị này ở dạng digital. Đầu ra digital có thể được sử dụng cho các ứng dụng kỹ thuật số (ví dụ: các thiết bị đo lường). Bộ chuyển đổi Digital sang Analog (DAC)Hoạt động của DAC là đảo ngược của ADC. DAC chuyển đổi tín hiệu digital thành định dạng analog. Nó thường được sử dụng để điều khiển các thiết bị analog như động cơ DC, các ổ đĩa… Interrupt control hay quản lý sự kiệnNgoài việc thực thi chương trình, vi điều khiển còn phải tương tác với các tác nhân bên trong và bên ngoài. Các tác nhân này sẽ tạo ra các sự kiện gọi là Ngắt, để quản lý nó cần có một khối quản lý ngắt ( Interrupt control) Special functioning blockMột số vi điều khiển chỉ được sử dụng cho một số ứng dụng đặc biệt (ví dụ: hệ thống không gian và rô bốt) các bộ điều khiển này có chứa các cổng bổ sung để thực hiện các hoạt động đặc biệt đó. Đây được coi là khối chức năng đặc biệt. Tiếp cận với vi điều khiển như thế nào?Vậy để bắt đầu lập trình vi điều khiển chúng ta cần làm những gì? Cùng tìm hiểu nhé! Chọn dòng vi điều khiển nào?Khi đặt câu hỏi này, chúng ta nghĩ ngay đến tính năng, số chân, và kích thước cần thiết của vi điều khiển. Và chúng ta phải lựa chọn được con vi điều khiển chúng ta cần dùng, tất nhiên kèm theo ngay sau đó là chúng ta có thể mua được nó nữa. Tùy theo ứng dụng, giá cả, chức năng, độ ổn định chúng ta cần chọn cho mình một hoặc 2 loại để bắt đầu.
Tham khảo: Học lập trình STM32 từ A tới Z
Tham khảo: Học lập trình ESP32 từ A tới Z
Lập trình cho dòng vi điều khiển đóNếu vi điều khiển chỉ là thân xác, thì việc lập trình chính là các bạn đang tạo ra linh hồn cho nó. Để lập trình vi điều khiển thì bắt buộc các bạn phải học ngôn ngữ C, vì ngôn ngữ C có thể can thiệp tới tầng thấp nhất của phần cứng, điều mà các ngôn ngữ khác không làm được. Tham khảo: Lập trình C từ A tới Z Bản chất của lập trình vi điều khiển chỉ là tạo ra các hành động cụ thể cho nó. Như việc con người chúng ta tương tác với thế giới xung quanh như thế nào vậy. Mọi thao tác đó được lập trình viên viết ra bằng ngôn ngữ lập trình C hoặc ngôn ngữ khác. Muốn làm được điều này, các bạn cần có một trình biên dịch, hoặc môi trường lập trình tích hợp (IDE). Có thể kể đến như KeilC, Arduino, VScode, …. Nạp chương trìnhBạn viết chương trình trên máy tính, bạn đã dịch ra được file thực thi .hex, để vi điều khiển có thể hiểu được bạn muốn làm gì. Vậy làm sao để đưa nội dung đó vào cho vi điều khiển? Các bạn cần có một mạch nạp và một chương trình nạp phù hợp với mạch nạp đó. Công việc nạp được cụ thể hoá bằng việc cắm mạch nạp vào máy tính, bật chương trình nạp, load file .HEX vào chương trình nạp, lựa chọn vi điều khiển cần nạp, cài đặt các thông số nạp, và nạp vào vi điều khiên đó Các mạch nạp có thể kể đến như: ST Link, JTAG, ISP, …. Debug chương trìnhCuối cùng là công đoạn gian nan mà mỗi lập trình viên đều phải làm, đó là Debug. Hay nói các khác là sửa những lỗi lập trình khiển code của bạn không hoạt động đúng. Một lập trình viên giỏi không phải là người viết code nhanh, viết đc nhiều code. Mà là người có thể fix đc hết Bug hoặc nhiều Bug nhất có thể. Tham khảo: Các công cụ Debug trên Keil C Ưu và nhược điểm của vi điều khiểnƯu điểm của vi điều khiển
Nhược điểm của vi điều khiển
Ưng dụng của vi điều khiểnVi điều khiển hiện hữu trên rất nhiều mặt của cuộc sống. Bạn có thể tìm thấy vi điều khiển trong tất cả các loại thiết bị điện tử hiện nay. Bất kỳ thiết bị nào liên quan đến đo lường, lưu trữ, điều khiển, tính toán hoặc hiển thị thông tin đều phải có chip vi điều khiển bên trong. Ứng dụng lớn nhất của vi điều khiển là trong ngành công nghiệp ô tô (vi điều khiển được sử dụng rộng rãi để kiểm soát động cơ và điều khiển công suất trong ô tô). Bạn cũng có thể tìm thấy vi điều khiển bên trong bàn phím, chuột, modem, máy in và các thiết bị ngoại vi khác. Trong thiết bị thử nghiệm, vi điều khiển giúp bạn dễ dàng thêm các tính năng như khả năng lưu trữ số đo, tạo và lưu trữ các thói quen của người dùng và hiển thị thông báo cũng như dạng sóng. Sản phẩm tiêu dùng sử dụng bộ vi điều khiển bao gồm máy quay kỹ thuật số, đầu phát quang, màn hình LCD / LED… Hay đến với thời đại 4.0 các bạn sẽ thấy vi điều khiển trong các thiết bị IOT, giúp con người kết nối mọi máy móc từ xa thông qua Internet KếtHiểu được cấu trúc của vi điều khiển là một phần tất yếu khi học lập trình nhúng. Nếu bạn vẫn đang mông lung khi gặp các khái niệm mình đã nêu trên thì nên tìm hiểu kĩ càng lại từ đầu. Bởi nếu không hiểu chúng ta đang làm việc với cái gì, thì rất khó để làm nó chạy một cách chính xác, rất khó tìm ra lỗi, nguyên nhân khiến code của bạn không chạy. Cám ơn bạn đã đón đọc, cùng vào hội Anh Em Nghiện Lập Trình để cùng trao đổi nhé |