Làm thế nào và tại sao phải đọc bảng dữ liệu nếu bộ vi điều khiển là sở thích của bạn

Làm thế nào và tại sao phải đọc bảng dữ liệu nếu bộ vi điều khiển là sở thích của bạn

Vi điện tử là một sở thích thời thượng trong những năm gần đây nhờ Arduino thần kỳ. Nhưng đây là vấn đề: nếu có đủ sự quan tâm, bạn có thể nhanh chóng phát triển DigitalWrite(), nhưng việc cần làm tiếp theo thì không hoàn toàn rõ ràng. Các nhà phát triển Arduino đã nỗ lực rất nhiều trong việc hạ thấp rào cản gia nhập hệ sinh thái của họ, nhưng bên ngoài nó vẫn còn một khu rừng tối tăm với những mạch điện khắc nghiệt mà người nghiệp dư không thể tiếp cận được.

Ví dụ: bảng dữ liệu. Có vẻ như họ có tất cả mọi thứ, lấy nó và sử dụng nó. Nhưng các tác giả của chúng rõ ràng không đặt cho mình nhiệm vụ phổ biến bộ vi điều khiển; Thỉnh thoảng có vẻ nhưrằng họ cố tình lạm dụng những thuật ngữ và từ viết tắt khó hiểu khi mô tả những điều đơn giản nhằm gây nhầm lẫn nhiều nhất có thể cho những người chưa quen. Nhưng không phải mọi thứ đều tệ đến thế, nếu muốn, quan tài sẽ mở ra.

Trong bài viết này tôi sẽ chia sẻ kinh nghiệm của một chuyên gia nhân văn giao tiếp với các bảng dữ liệu vì mục đích sở thích. Văn bản dành cho những người nghiệp dư lớn lên từ quần Arduino, nó giả định một số hiểu biết về nguyên lý hoạt động của bộ vi điều khiển.

Tôi sẽ bắt đầu với truyền thống

Nhấp nháy đèn LED trên Arduino

Và ngay lập tức mã:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Cái này là cái gì? – Một độc giả tinh tế sẽ hỏi. – Tại sao bạn lại viết gì đó vào thanh ghi đầu vào PINB? Nó chỉ để đọc thôi!” Thật sự, Tài liệu Arduino, giống như hầu hết các bài viết giáo dục trên Internet, nói rằng thanh ghi này ở chế độ chỉ đọc. Bản thân tôi cũng nghĩ vậy cho đến khi đọc lại nó bảng dữliệu tới Atmega328p, chuẩn bị bài viết này. Với chỗ ấy:

Làm thế nào và tại sao phải đọc bảng dữ liệu nếu bộ vi điều khiển là sở thích của bạn

Đây là một chức năng tương đối mới, chưa có trên Atmega8, không phải ai cũng biết về nó hoặc không được nhắc đến vì lý do tương thích ngược. Nhưng nó khá phù hợp để chứng minh ý tưởng rằng các bảng dữ liệu đáng đọc để sử dụng tất cả các khả năng của chip, kể cả những khả năng ít được biết đến. Và đây không phải là lý do duy nhất.

Tại sao lại đọc bảng dữ liệu?

Thông thường, các kỹ sư Arduino, sau khi đã chơi đủ với đèn LED và AnalogWrites, bắt đầu kết nối tất cả các loại mô-đun và chip với bo mạch, nơi đã có sẵn các thư viện bằng văn bản. Sớm hay muộn, một thư viện sẽ xuất hiện không hoạt động như bình thường. Sau đó, người nghiệp dư bắt đầu nhặt nó lên để sửa nó, và sau đó...

Và điều gì đó hoàn toàn khó hiểu xảy ra ở đó, vì vậy bạn phải truy cập Google, đọc nhiều hướng dẫn, lấy ra các phần mã phù hợp của ai đó và cuối cùng đạt được mục tiêu của mình. Điều này mang lại cảm giác thành tựu mạnh mẽ, nhưng trên thực tế, quá trình này giống như việc phát minh lại bánh xe bằng cách chế tạo ngược một chiếc mô tô. Hơn nữa, sự hiểu biết về cách thức hoạt động của chiếc xe đạp này không tăng lên. Tôi biết, vì tôi đã làm việc này khá lâu rồi.

Nếu thay vì hoạt động thú vị này, tôi dành vài ngày để nghiên cứu tài liệu về Atmega328 thì tôi đã tiết kiệm được rất nhiều thời gian. Xét cho cùng, đây là một bộ vi điều khiển khá đơn giản.

Vì vậy, ít nhất bạn cần phải đọc bảng dữ liệu để hình dung cách thức hoạt động chung của bộ vi điều khiển và những gì nó có thể làm. Và xa hơn:

  • để kiểm tra và tối ưu hóa thư viện của người khác. Chúng thường được viết bởi chính những người nghiệp dư đã phát minh lại bánh xe; hoặc ngược lại, các tác giả cố tình làm cho chúng trở nên dễ hiểu quá mức. Hãy để nó lớn hơn gấp ba lần và chậm hơn, nhưng nó chắc chắn sẽ hoạt động;

  • có thể sử dụng chip trong một dự án mà chưa có ai viết thư viện cho nó;

  • để giúp bạn di chuyển từ dòng MK này sang dòng MK khác dễ dàng hơn;

  • cuối cùng là tối ưu hóa mã cũ không phù hợp với Arduino của bạn;

  • để tìm hiểu cách điều khiển bất kỳ con chip nào trực tiếp thông qua các thanh ghi của nó mà không cần bận tâm đến việc nghiên cứu cấu trúc thư viện của nó, nếu có.

Tại sao ghi trực tiếp vào sổ đăng ký khi có HAL và LL?

Từ điển
HAL, Lớp trừu tượng cao – một thư viện để điều khiển vi điều khiển với mức độ trừu tượng cao. Nếu cần sử dụng giao diện SPI1, bạn chỉ cần cấu hình và kích hoạt SPI1 mà không cần suy nghĩ xem thanh ghi nào chịu trách nhiệm cho việc gì.
LL, API cấp thấp – một thư viện chứa macro hoặc cấu trúc có địa chỉ đăng ký, cho phép bạn truy cập chúng theo tên. DDRx, PORTx, PINx trên Atmega là LL.

Tranh chấp về chủ đề “HAL, LL hay đăng ký” thường xuyên xảy ra trong các bình luận trên Habré. Không đòi hỏi quyền tiếp cận kiến ​​thức về cõi trung giới, tôi sẽ chỉ chia sẻ kinh nghiệm và suy nghĩ nghiệp dư của mình.

Ít nhiều đã tìm ra Atmega và đọc các bài viết về sự tuyệt vời của STM32, tôi đã mua nửa tá bảng mạch khác nhau - Discovery, Blue Pills, và thậm chí chỉ là chip cho các sản phẩm tự chế của tôi. Tất cả đều thu thập bụi trong một chiếc hộp trong hai năm. Đôi khi tôi tự nhủ: “thế là xong, bắt đầu từ cuối tuần này, tôi sẽ thành thạo STM,” khởi chạy CubeMX, tạo một thiết lập cho SPI, nhìn vào bức tường văn bản kết quả, có thêm hương vị bản quyền STM và quyết định rằng điều này cũng giống như vậy nhiều.

Làm thế nào và tại sao phải đọc bảng dữ liệu nếu bộ vi điều khiển là sở thích của bạn

Tất nhiên, bạn có thể hiểu CubeMX đã viết gì ở đây. Nhưng đồng thời, rõ ràng rằng việc ghi nhớ tất cả các từ ngữ rồi viết chúng bằng tay là không thực tế. Và để gỡ lỗi này, nếu tôi vô tình quên chọn một ô trong Cube thì điều đó hoàn toàn không sao cả.

Hai năm trôi qua tôi vẫn liếm môi Công cụ tìm kiếm ST MCU cho tất cả các loại ngon, nhưng ngoài tầm hiểu biết của tôi, khoai tây chiên, và vô tình bắt gặp bài viết tuyệt vời, mặc dù về STM8. VÀ đột ngột Tôi nhận ra rằng suốt thời gian qua tôi đã gõ cửa: các thanh ghi của STM được sắp xếp giống như của bất kỳ MK nào khác và Cube không cần thiết phải làm việc với chúng. Liệu nó có thể thực hiện được không?..

HAL và cụ thể là STM32CubeMX là công cụ dành cho các kỹ sư chuyên nghiệp làm việc chặt chẽ với chip STM32. Tính năng chính là mức độ trừu tượng cao, khả năng di chuyển nhanh chóng từ MCU này sang MCU khác và thậm chí từ lõi này sang lõi khác, trong khi vẫn nằm trong dòng STM32. Những người có sở thích hiếm khi gặp phải những vấn đề như vậy - theo quy định, sự lựa chọn bộ vi điều khiển của chúng tôi bị giới hạn trong loại AliExpress và chúng tôi thường di chuyển giữa các chip hoàn toàn khác nhau - chúng tôi chuyển từ Atmega sang STM, từ STM sang ESP hoặc bất kỳ điều gì mới mà những người bạn Trung Quốc của chúng tôi ném vào chúng tôi. HAL sẽ không giúp ích được gì ở đây và việc nghiên cứu nó sẽ ngốn rất nhiều thời gian.

LL vẫn còn - nhưng từ nó đến sổ đăng ký có nửa bước. Cá nhân tôi thấy việc viết macro với địa chỉ đăng ký là hữu ích: Tôi nghiên cứu bảng dữ liệu cẩn thận hơn, tôi nghĩ về những gì tôi sẽ cần trong tương lai và những gì tôi chắc chắn sẽ không cần, tôi cấu trúc chương trình của mình tốt hơn và nói chung, việc khắc phục sẽ giúp ghi nhớ .

Ngoài ra, có một sắc thái với STM32F103 phổ biến - có hai phiên bản LL không tương thích với nó, một phiên bản chính thức từ STM, phiên bản thứ hai từ Leaf Labs, được sử dụng trong dự án STM32duino. Nếu bạn viết một thư viện nguồn mở (và tôi đã có chính xác một nhiệm vụ như vậy), bạn phải tạo hai phiên bản hoặc truy cập trực tiếp vào các thanh ghi.

Cuối cùng, theo tôi, việc loại bỏ LL sẽ giúp đơn giản hóa việc di chuyển, đặc biệt nếu bạn lên kế hoạch thực hiện nó ngay từ đầu dự án. Ví dụ phóng đại: hãy viết Arduino flash trong Atmel Studio mà không cần LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Để mã này nhấp nháy đèn LED trên bảng Trung Quốc với STM8 (từ ST Visual Desktop), chỉ cần thay đổi hai địa chỉ trong đó là đủ:

#define DDR_B 0x5007
#define OUT_B 0x5005

Có, tôi sử dụng tính năng kết nối đèn LED trên một bảng cụ thể, nó sẽ nhấp nháy rất chậm, nhưng điều đó sẽ xảy ra!

Có những loại bảng dữ liệu nào?

Trong các bài báo và trên các diễn đàn, cả tiếng Nga và tiếng Anh, “bảng dữ liệu” có nghĩa là bất kỳ tài liệu kỹ thuật nào về chip và tôi cũng làm như vậy trong văn bản này. Về mặt hình thức, chúng chỉ là một loại tài liệu như vậy:

Bảng dữliệu – Đặc điểm hiệu suất, đặc điểm chiến thuật và kỹ thuật. Bắt buộc đối với bất kỳ thành phần điện tử nào. Thông tin cơ bản rất hữu ích để bạn nắm bắt nhưng không có nhiều điều để đọc kỹ trong đó. Tuy nhiên, những con chip đơn giản hơn thường bị giới hạn trong một biểu dữ liệu để không tạo ra những tài liệu không cần thiết; trong trường hợp này Hướng dẫn tham khảo được bao gồm ở đây.

Hướng dẫn tham khảo – bản thân các hướng dẫn, một cuốn sách lành mạnh hơn 1000 trang. Công việc của mọi thứ được nhồi nhét vào chip đều được mô tả chi tiết. Tài liệu chính để làm chủ vi điều khiển. không giống bảng dữliệu, hướng dẫn được viết cho nhiều loại MK; chúng chứa nhiều thông tin về các thiết bị ngoại vi không có sẵn trong kiểu máy cụ thể của bạn.

Hướng dẫn lập trình hoặc Hướng dẫn sử dụng bộ hướng dẫn – hướng dẫn cho các lệnh vi điều khiển duy nhất. Được thiết kế cho những người lập trình bằng ngôn ngữ hội. Các tác giả trình biên dịch tích cực sử dụng nó để tối ưu hóa mã, vì vậy trong trường hợp chung chúng ta sẽ không cần đến nó. Nhưng việc xem xét ở đây rất hữu ích để hiểu tổng quát, đối với một số lệnh cụ thể như thoát khỏi ngắt, cũng như để chủ động sử dụng trình gỡ lỗi.

Lưu ý áp dụng – các mẹo hữu ích để giải quyết các vấn đề cụ thể, thường có các ví dụ về mã.

Bảng lỗi – mô tả các trường hợp hoạt động của chip không chuẩn cùng với các phương án giải quyết, nếu có.

Có gì trong bảng dữ liệu

Trực tiếp đến Bảng dữliệu chúng tôi có thể cần các phần sau:

Tóm tắt thiết bị – trang đầu tiên của bảng dữ liệu mô tả ngắn gọn về thiết bị. Rất hữu ích trong những tình huống khi bạn tìm thấy một con chip ở đâu đó (nhìn thấy nó trong cửa hàng, hàn nó, tình cờ thấy một đề cập đến) và muốn hiểu nó là gì.

Mô tả chung – mô tả chi tiết hơn về khả năng của các chip trong dây chuyền.

Sơ đồ chân – sơ đồ chân của tất cả các gói chip có thể có (chân nào nằm ở chân nào).

Ghim Mô tả – mô tả mục đích và khả năng của từng chân.

Memory Map – chúng ta có thể không cần bản đồ địa chỉ trong bộ nhớ, nhưng đôi khi nó cũng bao gồm một bảng địa chỉ khối đăng ký.

Đăng ký bản đồ – bảng địa chỉ của các khối thanh ghi, theo quy định, nằm trong biểu dữ liệu và trong Hướng dẫn tham khảo – chỉ dịch chuyển (bù đắp địa chỉ).

Điện Đặc điểm – trong phần này chúng tôi chủ yếu quan tâm đến xếp hạng tối đa tuyệt đối, liệt kê các tải tối đa trên mỗi chip. Không giống như Atmega328p không thể phá hủy, hầu hết các MK không cho phép bạn kết nối các tải nghiêm trọng với các chân, điều này trở thành một bất ngờ khó chịu đối với những người theo chủ nghĩa Arduin.

Thông tin gói – bản vẽ các trường hợp có sẵn, hữu ích khi thiết kế bảng của bạn.

Hướng dẫn tham khảo về mặt cấu trúc bao gồm các phần dành cho các thiết bị ngoại vi cụ thể được nêu trong tiêu đề của chúng. Mỗi chương có thể được chia thành ba phần:

Giới thiệu chung, Giới thiệu, Tính năng – tổng quan về khả năng ngoại vi;

Mô tả chức năng, Hướng dẫn sử dụng hoặc đơn giản là khối chính của phần - văn bản mô tả chi tiết về nguyên lý hoạt động của thiết bị ngoại vi và cách sử dụng nó;

Đăng ký – mô tả các thanh ghi điều khiển. Trong những trường hợp đơn giản như GPIO hoặc SPI, điều này có thể khá đủ để bắt đầu sử dụng các thiết bị ngoại vi, nhưng thường bạn vẫn phải đọc các phần trước.

Cách đọc bảng dữ liệu

Các bảng dữ liệu, theo thói quen, sẽ khiến bạn sợ hãi vì khối lượng và vô số từ khó hiểu của chúng. Trên thực tế, mọi thứ sẽ không đáng sợ đến thế nếu bạn biết một vài thủ thuật cuộc sống.

Tải về trình đọc PDF tốt. Các bảng dữ liệu được viết theo truyền thống vẻ vang của các hướng dẫn trên giấy; chúng rất tuyệt vời để in ra, chèn bằng dấu trang nhựa và khâu. Siêu văn bản trong chúng được quan sát thấy với số lượng dấu vết. May mắn thay, ít nhất cấu trúc của tài liệu được thiết kế bằng dấu trang, vì vậy một trình đọc phù hợp với khả năng điều hướng dễ dàng là rất cần thiết.

Bảng dữ liệu không phải là sách giáo khoa của Stroustrup; nó chứa không cần phải đọc mọi thứ. Nếu bạn đã sử dụng lời khuyên trước đó, chỉ cần tìm phần mong muốn trong thanh dấu trang.

Các bảng dữ liệu, đặc biệt là Tài liệu tham khảo, có thể mô tả khả năng của không phải một con chip cụ thể, nhưng toàn bộ dòng. Điều này có nghĩa là một nửa, thậm chí 7/XNUMX thông tin không liên quan đến chip của bạn. Trước khi nghiên cứu các thanh ghi TIMXNUMX, hãy kiểm tra Mô tả chung, bạn có không?

Biết rôi английский đủ cho cấp độ cơ bản. Bảng dữ liệu bao gồm một nửa các thuật ngữ xa lạ với người bản xứ bình thường và một nửa là các cấu trúc kết nối đơn giản. Ngoài ra còn có các bảng dữ liệu tiếng Trung tuyệt vời bằng tiếng Anh Trung Quốc, trong đó một nửa là các thuật ngữ và nửa còn lại là một tập hợp các từ ngẫu nhiên.

Nếu bạn gặp từ xa lạ, đừng cố dịch nó bằng từ điển Anh-Nga. Nếu bạn bối rối trễ, thì bản dịch “trễ” sẽ không làm bạn ấm hơn. Sử dụng Google, Stack Overflow, Wikipedia, diễn đàn, nơi sẽ có khái niệm bắt buộc giải thích bằng những từ đơn giản với các ví dụ.

Cách tốt nhất để hiểu những gì bạn đọc là kiểm tra hành động. Do đó, hãy giữ sẵn bảng gỡ lỗi mà bạn đang làm quen, hoặc tốt hơn là hai bảng, đề phòng trường hợp bạn vẫn hiểu nhầm điều gì đó và nhìn thấy một làn khói ma thuật.

Đó là một thói quen tốt để giữ bảng dữ liệu của bạn sẵn sàng khi bạn đọc hướng dẫn của ai đó hoặc nghiên cứu thư viện của người khác. Rất có thể bạn sẽ tìm được giải pháp tối ưu hơn cho vấn đề của mình trong đó. Và ngược lại - nếu bạn không thể hiểu cách thức hoạt động thực sự của thanh ghi từ biểu dữ liệu, hãy google nó: rất có thể ai đó đã mô tả mọi thứ bằng những từ đơn giản hoặc để lại mã rõ ràng trên GitHub.

Từ điển

Một số từ và ký hiệu hữu ích giúp bạn nhanh chóng làm quen với datasheets. Những gì tôi nhớ được trong vài ngày qua, đều hoan nghênh những bổ sung và chỉnh sửa.

điện
VDC, Thật – “cộng”, thức ăn
đấu với, Vee – “trừ”, trái đất
hiện hành - hiện hành
Vôn - Vôn
làm chìm dòng điện – làm việc như “mặt đất” cho tải bên ngoài
để nguồn hiện tại – nguồn điện tải bên ngoài
chân nguồn/sink cao – chốt có “khả năng chịu tải” tăng lên

IO
H, Cao – trên chân Vcc
L,Thấp – trên chân Vss
Trở kháng cao, Hi-Z, nổi – không có gì trên chốt, “điện trở cao”, nó hầu như vô hình với thế giới bên ngoài.
kéo lên yếu, kéo xuống yếu – điện trở kéo lên/kéo xuống tích hợp, xấp xỉ tương đương 50 kOhm (xem bảng dữ liệu). Ví dụ, nó được sử dụng để ngăn chân đầu vào lơ lửng trong không khí, gây ra cảnh báo sai. Yếu - bởi vì rất dễ “ngắt lời” anh ấy.
đẩy kéo – chế độ đầu ra chân, trong đó nó chuyển đổi giữa Cao и Thấp – ĐẦU RA thường xuyên từ Arduino.
cống mở – chỉ định chế độ đầu ra trong đó chân có thể là ThấpHoặc Trở kháng cao/Nổi. Hơn nữa, hầu như đây không phải là một cống mở "thực sự", có điốt bảo vệ, điện trở, và những thứ tương tự. Đây chỉ đơn giản là một chỉ định cho chế độ mặt đất/không có.
cống mở thực sự - nhưng đây là một cái cống hở thực sự: chốt dẫn thẳng xuống đất nếu nó mở, hoặc vẫn ở trạng thái lấp lửng nếu nó đóng lại. Điều này có nghĩa là, nếu cần, điện áp lớn hơn Vcc có thể được truyền qua nó, nhưng mức tối đa vẫn được chỉ định trong biểu dữ liệu ở phần Xếp hạng/Điện áp tối đa tuyệt đối.

Giao diện
trong loạt - mắc nối tiếp
cho chuỗi – lắp ráp các chip thành chuỗi sử dụng kết nối nối tiếp, tăng số lượng đầu ra.
thay đổi – shift, thường biểu thị một chút dịch chuyển. Tương ứng, chuyển vào и chuyển ra ngoài – nhận và truyền dữ liệu từng bit.
cái chốt – một chốt bao phủ bộ đệm trong khi các bit được dịch chuyển qua nó. Khi quá trình truyền hoàn tất, van sẽ mở và các bit bắt đầu hoạt động.
Đến đồng hồ trong – thực hiện truyền từng bit, dịch chuyển tất cả các bit đến đúng vị trí.
đệm kép, đăng ký bóng, đăng ký tải trước – chỉ định lịch sử, khi thanh ghi phải có khả năng chấp nhận dữ liệu mới, nhưng giữ nó cho đến một thời điểm nào đó. Ví dụ: đểPWM hoạt động chính xác, các tham số của nó (chu kỳ nhiệm vụ, tần số) không được thay đổi cho đến khi chu kỳ hiện tại kết thúc, nhưng các tham số mới đã có thể được chuyển. Theo đó, những cái hiện tại được giữ ở đăng ký bóng, và những cái mới rơi vào đăng ký tải trước, được ghi vào thanh ghi chip tương ứng.

Đủ mọi thứ
bộ đếm trước – Bộ đếm tần số
để thiết lập một chút – đặt bit thành 1
để xóa/đặt lại một chút – đặt lại bit về 0 (thiết lập lại – Tính năng bảng dữ liệu STM)

những gì tiếp theo

Nhìn chung, phần thực tế đã được lên kế hoạch ở đây với phần trình diễn ba dự án trên STM32 và STM8, được thực hiện riêng cho bài viết này bằng cách sử dụng bảng dữ liệu, với bóng đèn, SPI, bộ hẹn giờ, điều khiển xung và ngắt:

Làm thế nào và tại sao phải đọc bảng dữ liệu nếu bộ vi điều khiển là sở thích của bạn

Nhưng văn bản nhiều nên các dự án đều được gửi sang phần thứ hai.

Kỹ năng đọc bảng dữ liệu sẽ giúp ích cho sở thích của bạn, nhưng nó khó có thể thay thế việc giao tiếp trực tiếp với những người cùng sở thích trên các diễn đàn và cuộc trò chuyện. Để làm được điều này, trước hết bạn vẫn cần phải cải thiện tiếng Anh của mình. Vì vậy, những ai đọc xong sẽ nhận được giải thưởng đặc biệt: hai bài học miễn phí trên Skyeng với lần thanh toán đầu tiên bằng mã HABR2.

Nguồn: www.habr.com

Thêm một lời nhận xét