Mục lục:

Hướng dẫn lắp ráp AVR 9: 7 bước
Hướng dẫn lắp ráp AVR 9: 7 bước

Video: Hướng dẫn lắp ráp AVR 9: 7 bước

Video: Hướng dẫn lắp ráp AVR 9: 7 bước
Video: cách lắp bo avr ổn định điện áp máy phát lh 0982871662 2024, Tháng bảy
Anonim
Hướng dẫn lắp ráp AVR 9
Hướng dẫn lắp ráp AVR 9

Chào mừng đến với Hướng dẫn 9.

Hôm nay chúng tôi sẽ hướng dẫn cách điều khiển cả màn hình 7 đoạn và màn hình 4 chữ số bằng cách sử dụng mã hợp ngữ ATmega328P và AVR của chúng tôi. Trong quá trình làm việc này, chúng ta sẽ phải chuyển hướng sang cách sử dụng ngăn xếp để giảm số lượng thanh ghi mà chúng ta cần phải kết nối. Chúng tôi sẽ thêm một vài tụ điện (bộ lọc thông thấp) để cố gắng giảm tiếng ồn trên bàn phím của chúng tôi. Chúng tôi sẽ tạo một bộ khuếch đại điện áp từ một vài bóng bán dẫn để công tắc ngắt INT0 của chúng tôi hoạt động tốt hơn cho các nút điện áp thấp hơn trên hàng dưới cùng của bàn phím. Và chúng tôi sẽ đập đầu vào tường một chút để cố gắng lấy đúng điện trở để nó hoạt động bình thường.

Chúng tôi sẽ sử dụng bàn phím của chúng tôi từ Hướng dẫn 7

Để thực hiện hướng dẫn này, ngoài những thứ tiêu chuẩn, bạn sẽ cần:

  1. Màn hình 7 đoạn

    www.sparkfun.com/products/8546

  2. Màn hình 4 chữ số

    www.sparkfun.com/products/11407

  3. Một nút bấm

    www.sparkfun.com/products/97

  4. Các biểu dữ liệu cho màn hình có thể được tải xuống từ các trang tương ứng của chúng được liên kết đến ở trên.
  5. Một tụ gốm 68 pf, một vài tụ điện 104, một tụ điện trở, hai tranzito NPN 2N3904.

Đây là liên kết đến bộ sưu tập đầy đủ các hướng dẫn về trình biên dịch AVR của tôi:

Bước 1: Đấu dây cho Màn hình 7 seg

Đấu dây cho Màn hình 7-seg
Đấu dây cho Màn hình 7-seg
Đấu dây cho Màn hình 7-seg
Đấu dây cho Màn hình 7-seg
Đấu dây cho Màn hình 7-seg
Đấu dây cho Màn hình 7-seg

Chúng tôi sẽ sử dụng cùng một mã mà chúng tôi đã sử dụng trong Hướng dẫn 7 cho bàn phím để điều khiển màn hình 7 đoạn. Vì vậy, bạn sẽ cần tạo một bản sao của nó và chúng tôi sẽ sửa đổi nó.

Chúng tôi sẽ ánh xạ các phân đoạn tới các chân của bộ vi điều khiển của chúng tôi như sau:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

trong đó các chữ cái của các đoạn được hiển thị trong hình cùng với sơ đồ chân tương ứng với 5V chung và mỗi đoạn LED bao gồm dấu thập phân (dp) ở phía dưới bên phải của màn hình. Lý do cho điều này là để chúng ta có thể nhập toàn bộ số vào một thanh ghi duy nhất và đầu ra thanh ghi tới các cổng B và D để làm sáng các phân đoạn. Như bạn có thể thấy, các bit được đánh số tuần tự từ 0 đến 7 và do đó chúng sẽ ánh xạ đến các chân chính xác mà không cần phải thiết lập và xóa các bit riêng lẻ.

Như bạn có thể thấy bằng mã chúng tôi đã đính kèm trong bước tiếp theo, chúng tôi đã chuyển quy trình hiển thị của mình sang macro và chúng tôi đã giải phóng các chân SDA và SCL để sử dụng trong tương lai trong Hướng dẫn tiếp theo.

Tôi nên nói thêm rằng bạn cần đặt một điện trở giữa cực dương chung của màn hình và đường ray 5V. Tôi đã chọn một điện trở 330 ohm như bình thường nhưng nếu bạn muốn, bạn có thể tính toán điện trở tối thiểu cần thiết để có được độ sáng tối đa của màn hình mà không cần chiên nó. Đây là cách để làm điều đó:

Đầu tiên, hãy nhìn vào bảng dữ liệu và nhận thấy rằng trên trang đầu tiên, nó cung cấp các thuộc tính khác nhau của màn hình. Các đại lượng quan trọng là "Dòng chuyển tiếp" (I_f = 20mA) và "Điện áp chuyển tiếp" (V_f = 2,2V). Những điều này cho bạn biết muốn điện áp giảm trên màn hình sẽ là nếu dòng điện bằng dòng chuyển tiếp. Đây là dòng điện tối đa mà màn hình sẽ nhận khi không chiên. Do đó, đây cũng là độ sáng tối đa mà bạn có thể nhận được từ các phân đoạn.

Vì vậy, hãy sử dụng định luật Ohm và quy tắc vòng lặp Kirchoff để tìm ra điện trở tối thiểu mà chúng ta cần đặt trong chuỗi với màn hình để có được độ sáng tối đa. Quy tắc Kirchoff nói rằng tổng của điện áp thay đổi xung quanh một vòng kín trong mạch bằng 0 và định luật Ohm nói rằng điện áp rơi trên một điện trở có điện trở R là: V = I R trong đó I là cường độ dòng điện chạy qua điện trở.

Vì vậy, cho một điện áp nguồn là V và đi quanh mạch của chúng ta, chúng ta có:

V - V_f - I R = 0

có nghĩa là (V - V_f) / I = R. Vì vậy, điện trở cần thiết để có được độ sáng tối đa (và có thể là chiên các phân đoạn) sẽ là:

R = (V - V_f) / I_f = (5.0V - 2.2V) /0.02A = 140 ohms

Vì vậy, nếu bạn muốn, bạn có thể vui vẻ sử dụng 150 ohms mà không cần lo lắng. Tuy nhiên, tôi nghĩ rằng 140 ohms làm cho nó quá sáng so với ý thích của tôi và vì vậy tôi sử dụng 330 ohms (đây là loại điện trở Goldilocks cá nhân của tôi cho đèn LED)

Bước 2: Mã hội và video

Tôi đã đính kèm mã lắp ráp và video hiển thị hoạt động của bàn phím với màn hình. Như bạn có thể thấy, chúng tôi chỉ cần ánh xạ phím Quay số lại thành "r", phím flash thành "F", dấu hoa thị thành "A" và dấu thăng thành "H". Chúng có thể được ánh xạ tới các thao tác khác nhau như xóa lùi, nhập, và những gì không xảy ra nếu bạn muốn tiếp tục sử dụng bàn phím để nhập số trên màn hình LCD hoặc màn hình 4 chữ số. Tôi sẽ không trình bày từng dòng mã lần này vì nó rất giống với những gì chúng ta đã làm trong các bài hướng dẫn trước. Sự khác biệt chủ yếu chỉ là những thứ giống nhau mà chúng ta đã biết cách làm như ngắt và tra cứu bảng. Bạn chỉ nên xem qua mã và xem những thứ mới mà chúng tôi đã thêm và những thứ chúng tôi đã thay đổi và tìm ra từ đó. Chúng tôi sẽ quay lại phân tích từng dòng trong hướng dẫn tiếp theo khi chúng tôi giới thiệu các khía cạnh mới của mã hóa hợp ngữ trên vi điều khiển AVR.

Bây giờ chúng ta hãy nhìn vào màn hình 4 chữ số.

Bước 3: Đấu dây cho Màn hình 4 chữ số

Đấu dây cho Màn hình 4 chữ số
Đấu dây cho Màn hình 4 chữ số
Đấu dây cho Màn hình 4 chữ số
Đấu dây cho Màn hình 4 chữ số

Theo biểu dữ liệu, màn hình 4 chữ số có Dòng chuyển tiếp là 60 mA và điện áp chuyển tiếp là 2,2 vôn. Vì vậy, bằng cách tính toán tương tự như trước đây, tôi có thể sử dụng một điện trở 47 ohm nếu tôi muốn. Thay vào đó, tôi sẽ sử dụng một… hrm.. để tôi xem… khoảng 330 ohms thì sao.

Cách mà màn hình 4 chữ số được nối dây là có 4 cực dương, một cực dương cho mỗi chữ số và các chân còn lại điều khiển phân đoạn nào đi vào mỗi chữ số. Bạn có thể hiển thị 4 chữ số đồng thời vì chúng được ghép với nhau. Nói cách khác, giống như chúng ta đã làm đối với cặp xúc xắc, chúng ta chỉ cần chuyển dòng điện lần lượt qua từng cực dương và nó sẽ nhấp nháy lần lượt chúng. Nó sẽ làm điều này nhanh đến mức mắt của chúng ta sẽ không nhìn thấy nhấp nháy và nó sẽ trông giống như tất cả bốn chữ số đều được bật. Tuy nhiên, để chắc chắn, cách chúng ta sẽ viết mã là đặt tất cả bốn chữ số, sau đó xoay vòng các cực dương, thay vì đặt, di chuyển, đặt, di chuyển, v.v. Bằng cách đó, chúng ta có thể có được thời gian chính xác giữa việc thắp sáng từng chữ số.

Bây giờ, hãy kiểm tra xem tất cả các phân đoạn đều hoạt động.

Đặt điện trở 330 ohm của bạn giữa thanh dương của bảng mạch và cực dương đầu tiên trên màn hình. Biểu dữ liệu cho chúng ta biết rằng các chân được đánh số từ 1 đến 16 ngược chiều kim đồng hồ bắt đầu từ phía dưới bên trái (khi bạn đang nhìn vào màn hình bình thường.. với các dấu thập phân dọc theo phía dưới) và nó nói rằng các cực dương là chân số 6, 8, 9 và 12.

Vì vậy, chúng tôi kết nối chân 6 với 5V và sau đó lấy một dây dẫn âm từ thanh GND của bạn và chọc nó vào tất cả các chân khác và thấy rằng tất cả các đoạn sáng lên trên chữ số mà nó tương ứng (thực sự là chữ số thứ hai từ bên phải). Đảm bảo rằng bạn nhận được tất cả 7 phân đoạn và dấu thập phân sáng lên.

Bây giờ, dán dây GND của bạn vào một trong các chân để làm sáng một trong các phân đoạn và lần này di chuyển điện trở xung quanh 3 cực dương còn lại và thấy rằng cùng một đoạn sáng lên ở mỗi chữ số khác.

Bất cứ điều gì bất thường?

Nó chỉ ra rằng sơ đồ chân trên biểu dữ liệu là sai. Điều này là do nó là biểu dữ liệu và sơ đồ chân cho màn hình 12 chân, 4 chữ số. I E. một không có dấu hai chấm hoặc dấu thập phân trên. Màn hình mà tôi nhận được khi đặt hàng là màn hình 16 chân, 4 chữ số. Trên thực tế, theo tôi, các cực dương phân đoạn nằm ở chân 1, 2, 6 và 8. Cực dương ruột là chân 4 (chân cực âm 12) và cực dương dp trên là chân 10 (cực âm là chân 9)

Bài tập 1: Sử dụng điện trở và dây nối đất của bạn để tìm ra chân nào tương ứng với đoạn nào và dấu thập phân trên màn hình để chúng ta có được các đoạn chính xác sáng lên khi chúng ta mã hóa nó.

Cách mà chúng tôi muốn viết mã bản đồ phân đoạn giống hệt như chúng tôi đã làm với màn hình 7 đoạn một chữ số ở trên - chúng tôi không phải thay đổi bất kỳ thứ gì trong mã, điều duy nhất chúng tôi thay đổi là cách các dây được kết nối trên bảng. Chỉ cần cắm đúng chân cổng trên bộ vi điều khiển vào chân tương ứng trên màn hình 4 chữ số để ví dụ: PB0 vẫn đi đến chân tương ứng với phân đoạn a, PB1 chuyển đến phân đoạn B, v.v.

Sự khác biệt duy nhất là bây giờ chúng ta cần thêm 4 chân cho các cực dương vì chúng ta không thể đơn giản đi đến đường ray 5V nữa. Chúng ta cần bộ vi điều khiển để quyết định chữ số nào nhận được nước ép.

Vì vậy, chúng tôi sẽ sử dụng PC1, PC2, PC3 và PD4 để điều khiển cực dương của 4 chữ số.

Bạn cũng có thể tiếp tục và cắm dây. (đừng quên các điện trở 330 ohm trên dây cực dương!)

Bước 4: Mã hóa Màn hình 4 chữ số

Mã hóa màn hình 4 chữ số
Mã hóa màn hình 4 chữ số

Hãy nghĩ về cách chúng ta muốn viết mã màn hình này.

Chúng tôi muốn người dùng nhấn các nút trên bàn phím và để các số xuất hiện tuần tự trên màn hình khi họ nhấn từng nút. Vì vậy, nếu tôi nhấn 1 theo sau là 2, nó sẽ hiển thị trên màn hình là 12. Tôi cũng muốn lưu trữ giá trị đó, 12, để sử dụng nội bộ nhưng chúng ta sẽ đến điều đó sau một chút. Hiện tại, tôi chỉ muốn viết một macro mới sử dụng các lần nhấn phím của bạn và hiển thị chúng. Tuy nhiên, vì chúng tôi chỉ có 4 chữ số nên tôi muốn đảm bảo rằng nó chỉ cho phép bạn nhập bốn số.

Một vấn đề khác là cách thức hoạt động của màn hình 4 chữ số ghép kênh là xoay vòng các cực dương để mỗi chữ số chỉ bật trong tích tắc trước khi hiển thị chữ số tiếp theo rồi đến chữ số tiếp theo và cuối cùng trở lại chữ số đầu tiên, v.v. Vì vậy, chúng tôi cần một cách để viết mã này.

Chúng tôi cũng muốn nó di chuyển "con trỏ" sang bên phải một khoảng trắng khi chúng tôi gõ chữ số tiếp theo. Vì vậy, nếu tôi muốn nhập 1234 chẳng hạn, sau khi tôi nhập số 1, con trỏ sẽ di chuyển qua để chữ số tiếp theo tôi nhập sẽ xuất hiện trên màn hình 7 đoạn tiếp theo, v.v. Tất cả trong khi điều này đang xảy ra, tôi vẫn muốn có thể xem những gì tôi đã nhập vì vậy nó vẫn phải chạy qua các chữ số và hiển thị chúng.

Nghe có vẻ giống như một mệnh lệnh cao?

Mọi thứ thậm chí còn tồi tệ hơn. Chúng ta cần 4 thanh ghi mục đích chung khác mà chúng ta có thể sử dụng để lưu trữ các giá trị hiện tại của 4 chữ số mà chúng ta muốn hiển thị (nếu chúng ta định quay vòng qua chúng, chúng ta phải giữ chúng được lưu trữ ở đâu đó) và vấn đề với điều này là chúng ta có đã sử dụng hết các thanh ghi mục đích chung như điên và nếu chúng ta không coi chừng, chúng ta sẽ không còn lại bất kỳ thứ gì. Vì vậy, có lẽ nên giải quyết vấn đề đó sớm hơn là muộn hơn và chỉ cho bạn cách giải phóng các thanh ghi bằng cách sử dụng ngăn xếp.

Vì vậy, hãy bắt đầu bằng cách đơn giản hóa mọi thứ một chút, sử dụng ngăn xếp và giải phóng một số thanh ghi và sau đó chúng tôi sẽ cố gắng hoàn thành nhiệm vụ đọc và hiển thị các số của chúng tôi trên màn hình 4 chữ số.

Bước 5: Đẩy 'n Pop

Đẩy 'n Pop
Đẩy 'n Pop

Chỉ có một số "Sổ đăng ký Mục đích Chung" mà chúng tôi sử dụng và một khi chúng được sử dụng thì không còn nữa. Vì vậy, thực hành lập trình tốt là chỉ sử dụng chúng cho một vài biến được sử dụng làm nơi lưu trữ tạm thời mà bạn cần để đọc và ghi vào, các cổng và SRAM với hoặc những biến khác mà bạn sẽ cần trong các chương trình con ở mọi nơi và vì vậy bạn Hãy gọi tên của chúng. Vì vậy, những gì tôi đã làm, bây giờ chúng tôi đã khởi tạo và đang học cách sử dụng Ngăn xếp, là xem qua mã và tìm các thanh ghi mục đích chung đã đặt tên chỉ được sử dụng bên trong một chương trình con hoặc ngắt và không có nơi nào khác trong mã và thay thế chúng bằng một trong các thanh ghi tạm thời của chúng tôi và đẩy và bật vào ngăn xếp. Trên thực tế, nếu bạn nhìn vào mã được viết cho các bộ vi điều khiển nhỏ hơn hoặc nếu bạn quay ngược thời gian về khi tất cả các chip nhỏ hơn, bạn sẽ chỉ thấy một vài thanh ghi mục đích chung phải được sử dụng cho mọi thứ, vì vậy bạn không thể chỉ cần lưu trữ một giá trị trong đó và để nó một mình vì bạn chắc chắn cần đăng ký đó cho những thứ khác. Vì vậy, bạn sẽ nhìn thấy tiếng pô-li 'và một cái ghim' ở khắp nơi trong mã. Có lẽ tôi nên đặt tên cho các sổ đăng ký mục đích chung tạm thời của chúng tôi là AX và BX như một sự tôn trọng đối với những ngày đã qua.

Một ví dụ sẽ giúp làm rõ hơn điều này.

Lưu ý rằng trong quá trình chuyển đổi Analog sang Digital ngắt hoàn thành ADC_int, chúng tôi sử dụng thanh ghi mục đích chung mà chúng tôi đặt tên là buttonH mà chúng tôi đã sử dụng để tải giá trị của ADCH và so sánh nó với bảng tra cứu của chúng tôi về chuyển đổi từ analog sang nút nhấn. Chúng tôi chỉ sử dụng thanh ghi buttonH này trong chương trình con ADC_int và không ở đâu khác. Vì vậy, thay vào đó, chúng tôi sẽ sử dụng biến temp2 mà chúng tôi sử dụng làm biến tạm thời mà chúng tôi có thể sử dụng trong bất kỳ chương trình con nhất định nào và giá trị của nó sẽ không ảnh hưởng đến bất kỳ điều gì bên ngoài chương trình con đó (nghĩa là giá trị chúng tôi cung cấp cho nó trong ADC_int sẽ không được sử dụng ở bất kỳ đâu khác).

Một ví dụ khác là trong macro trì hoãn của chúng tôi. Chúng tôi có một sổ đăng ký mà chúng tôi đặt tên là "mili giây" chứa thời gian trễ của chúng tôi tính bằng mili giây. Trong trường hợp này, nó nằm trong macro và chúng ta nhớ lại rằng cách thức hoạt động của macro là trình hợp dịch đặt toàn bộ mã macro vào vị trí của chương trình nơi nó được gọi. Trong trường hợp này, chúng tôi muốn loại bỏ biến "mili giây" và thay thế nó bằng một trong các biến tạm thời của chúng tôi. Trong trường hợp này, tôi sẽ làm khác đi một chút để cho bạn thấy cách ngay cả khi giá trị của biến sẽ cần thiết ở nơi khác, chúng ta vẫn có thể sử dụng nó bằng cách sử dụng ngăn xếp. Vì vậy, thay vì mili giây, chúng tôi sử dụng "tạm thời" và để không làm hỏng những thứ khác cũng sử dụng giá trị của nhiệt độ, chúng tôi chỉ cần bắt đầu macro "trì hoãn" bằng cách "đẩy" tạm thời vào ngăn xếp, sau đó chúng tôi sử dụng nó thay vì mili giây, và sau đó ở cuối macro, chúng tôi "bật" giá trị trước đó của nó trở lại từ ngăn xếp.

Kết quả thực là chúng ta đã "mượn" temp và temp2 để sử dụng tạm thời và sau đó khôi phục chúng về các giá trị trước đó khi chúng ta hoàn thành.

Đây là quy trình ngắt ADC_int sau khi thực hiện thay đổi này:

ADC_int:

đẩy nhiệt độ; lưu tạm thời vì chúng tôi sửa đổi nó ở đây push temp2; lưu temp2 lds temp2, ADCH; tải phím bấm ldi ZH, cao (2 * số) ldi ZL, thấp (2 * số) cpi temp2, 0 breq return; nếu bộ kích hoạt tiếng ồn không thay đổi phím setkey 7segnumber: lpm temp, Z +; tải từ bảng và bài viết tăng dần clc cp temp2, temp; so sánh phím bấm với bảng brlo PC + 4; nếu ADCH thấp hơn, hãy thử lại lpm 7segnumber, Z; nếu không thì tải bảng keyvalue inc chữ số; tăng số chữ số rjmp return; và trả về adiw ZH: ZL, 1; tăng dần Z rjmp setkey; và quay trở lại top return: pop temp2; khôi phục nhiệt độ pop temp2; khôi phục tạm thời nghỉ hưu

Lưu ý rằng cách thức hoạt động của ngăn xếp là lần bật đầu tiên là lần tắt cuối cùng. Cũng giống như một xấp giấy tờ. Bạn thấy rằng trong hai dòng đầu tiên của chúng tôi, chúng tôi đẩy giá trị của temp vào ngăn xếp, sau đó chúng tôi đẩy temp2 vào ngăn xếp, sau đó chúng tôi sử dụng chúng trong chương trình con cho những việc khác và cuối cùng chúng tôi khôi phục chúng về giá trị trước đó một lần nữa bằng cách đầu tiên popping temp2 tắt (vì nó là cái cuối cùng được đẩy lên nó nằm ở trên cùng của ngăn xếp và sẽ là cái đầu tiên chúng ta bật lại) và sau đó là popping temp.

Vì vậy, từ bây giờ chúng tôi sẽ luôn sử dụng phương pháp này. Lần duy nhất chúng ta thực sự chỉ định một thanh ghi cho một cái gì đó không phải là một biến tạm thời là khi chúng ta cần nó ở mọi nơi. Ví dụ: thanh ghi được gọi là "tràn" là thanh ghi mà chúng tôi sử dụng ở một số vị trí khác nhau trong chương trình và vì vậy chúng tôi muốn đặt tên cho nó. Tất nhiên, chúng tôi vẫn có thể sử dụng nó theo cách chúng tôi đã làm với temp và temp2 vì chúng tôi sẽ khôi phục lại giá trị của nó sau khi chúng tôi hoàn thành. Nhưng điều đó sẽ làm sai lệch mọi thứ quá nhiều. Chúng được đặt tên vì một lý do và chúng tôi đã chỉ định tạm thời và tạm thời cho công việc đó.

Bước 6: Bộ lọc thông thấp và Bộ khuếch đại điện áp

Bộ lọc thông thấp và Bộ khuếch đại điện áp
Bộ lọc thông thấp và Bộ khuếch đại điện áp
Bộ lọc thông thấp và Bộ khuếch đại điện áp
Bộ lọc thông thấp và Bộ khuếch đại điện áp

Để làm sạch tiếng ồn một chút và làm cho bàn phím của chúng tôi hoạt động tốt hơn, chúng tôi muốn thêm một vài bộ lọc thông thấp. Các bộ lọc này lọc bỏ tiếng ồn tần số cao và cho phép tín hiệu tần số thấp đi qua. Về cơ bản, cách thực hiện điều này chỉ đơn giản là thêm một tụ điện 68 pf giữa đầu vào tương tự và mặt đất của chúng tôi và cũng là một tụ điện 0,1 microfarad (tức là 104) giữa ngắt PD4 (INT0) và mặt đất của chúng tôi. Nếu bạn nghịch những cái này trong khi nhấn các nút trên bàn phím, bạn sẽ có thể xem chúng làm gì.

Tiếp theo, chúng tôi muốn tạo một bộ khuếch đại điện áp. Hóa ra là hàng phím dưới cùng trên bàn phím (cũng như phím quay số lại) đang đặt điện áp quá thấp để ngắt INT0. Cổng tương tự đủ nhạy để đọc điện áp thấp từ các phím này nhưng chân ngắt của chúng ta không nhận được cạnh tăng đủ tốt để ngắt khi chúng ta nhấn các phím đó. Do đó, chúng tôi muốn một số cách để đảm bảo rằng một cạnh tăng điện áp đẹp chạm vào PD4 nhưng điện áp thấp tương tự chạm vào ADC0. Đây là một thứ tự khá cao vì cả hai tín hiệu đều đến từ cùng một dây đầu ra của bàn phím của chúng tôi. Có một số cách phức tạp để làm điều này, nhưng chúng tôi sẽ không sử dụng bàn phím của mình nữa sau hướng dẫn này vì vậy chúng ta hãy chỉ kết hợp với nhau một phương pháp hoạt động (hầu như không).

Trước tiên, bạn nên kết nối một nút bên ngoài để thay thế ngắt INT0 và điều khiển màn hình bằng cách giữ một phím trên bàn phím và nhấp vào nút. Điều này có ít sự cố bàn phím hơn và sẽ cho phép bạn tự tin rằng điện áp của bạn được đặt chính xác trên bảng tra cứu bàn phím. Khi bạn biết bàn phím được nối dây chính xác, hãy loại bỏ nút và đặt lại ngắt INT0. Có một số vấn đề về tiếng ồn và điện áp nghiêm trọng khi điều khiển bàn phím theo cách này, vì vậy bạn nên biết rằng mọi thứ đều hoạt động để các vấn đề trong tương lai có thể được cách ly với phím INT0.

Khi bạn nối bàn phím và bộ khuếch đại điện áp, rất có thể các giá trị điện trở giống nhau mà tôi đã sử dụng sẽ không hoạt động. Vì vậy, bạn sẽ phải thực hiện một số thử nghiệm để có được các giá trị phù hợp với bạn.

Nếu bạn nhìn vào sơ đồ tôi đã đính kèm ở bước này, bạn sẽ thấy bộ khuếch đại điện áp sẽ hoạt động như thế nào. Chúng tôi sử dụng một số điện trở và hai bóng bán dẫn. Cách thức hoạt động của bóng bán dẫn (xem bảng dữ liệu!) Là có một điện áp tối thiểu mà bạn cần phải nhập vào chân cơ sở trên transister (chân giữa) sẽ bão hòa nó và cho phép dòng điện chạy giữa chân thu và bộ phát ghim. Trong trường hợp của bóng bán dẫn 2N3904 mà chúng tôi đang sử dụng ở đây, điện áp là 0,65V. Bây giờ chúng tôi đang lấy điện áp đó từ đầu ra của chúng tôi từ bàn phím và chúng tôi không muốn thay đổi đầu ra đó vì vậy chúng tôi sẽ đặt một điện trở lớn giữa đầu ra từ bàn phím và đế của bóng bán dẫn đầu tiên (tôi đã sử dụng 1Mohm). Tôi đã gắn nhãn này là R_1 trong sơ đồ. Sau đó, chúng tôi muốn thiết lập một bộ chia điện áp để đế của bóng bán dẫn "gần như" ở 0,65 volt và chỉ một chút nữa thôi sẽ đẩy nó lên trên và bão hòa nó. Bit weeny nhỏ bé đó sẽ đến từ đầu ra của bàn phím khi chúng ta nhấn một nút. Vì các phím thấp hơn trên bàn phím chỉ tạo ra một điện áp rất nhỏ nên chúng ta cần phải ở rất gần với độ bão hòa để chúng đủ. Các điện trở phân áp được ghi nhãn R_a và R_b trên sơ đồ. Tôi đã sử dụng R_a = 1Mohm và R_b = 560Kohm nhưng gần như chắc chắn rằng bạn sẽ phải thử với những con số này để có được nó phù hợp với thiết lập của bạn. Bạn có thể muốn có một bức tường gần đó để đập đầu vào và hai hoặc ba ly scotch trên tay (Tôi muốn giới thiệu Laphroaig - đắt tiền, nhưng xứng đáng nếu bạn thích khói. Nếu mọi thứ trở nên thực sự điên rồ, thì chỉ cần lấy một cái bình của BV và giải quyết trong đêm)

Bây giờ chúng ta hãy xem xét cách các bóng bán dẫn sẽ giúp chúng ta có được một cạnh tăng đẹp đi vào phím INT0 và tạo ra ngắt khi nhấn phím của chúng ta. Trước tiên, hãy xem điều gì sẽ xảy ra khi tôi không nhấn phím. Trong trường hợp đó, bóng bán dẫn đầu tiên (có nhãn T1 trong sơ đồ) bị tắt. Vì vậy, không có dòng điện chạy giữa chân thu và chân phát. Do đó, chân đế của bóng bán dẫn khác (có nhãn T2) sẽ được kéo lên cao và do đó nó sẽ bão hòa cho phép dòng điện chạy giữa các chân của nó. Điều này có nghĩa là bộ phát của T2 sẽ được kéo xuống thấp vì nó được kết nối với bộ thu mà bản thân nó được kết nối với đất. Do đó, đầu ra đi đến chân ngắt nhấn phím INT0 (PD4) của chúng ta sẽ ở mức thấp và sẽ không có ngắt.

Bây giờ điều gì sẽ xảy ra khi tôi nhấn một phím? Sau đó, cơ sở của T1 đi trên 0,65V (trong trường hợp của các phím thấp hơn, nó chỉ gần như đi lên phía trên!) Và khi đó dòng điện sẽ được phép chạy qua đó sẽ kéo chân đế của T2 xuống điện áp thấp và điều này sẽ tắt T2. Nhưng chúng ta thấy rằng khi T2 tắt, thì đầu ra được kéo lên cao và do đó chúng ta sẽ nhận được tín hiệu 5V đi đến chân INT0 của chúng ta và nó sẽ gây ra ngắt.

Chú ý kết quả ròng ở đây là gì. Nếu chúng ta nhấn phím 1, chúng ta nhận được 5V đến PD4 mà không thay đổi đáng kể đầu ra đến ADC0 và quan trọng hơn, ngay cả khi chúng ta nhấn Asterisk, 0, Hash hoặc Redial, chúng ta cũng nhận được tín hiệu 5V đi đến INT0 và cũng gây gián đoạn! Điều này rất quan trọng vì nếu chúng ta chỉ đi trực tiếp từ đầu ra bàn phím đến chân INT0, các phím đó hầu như không tạo ra điện áp và chúng sẽ không đủ để kích hoạt chân ngắt đó. Bộ khuếch đại điện áp của chúng tôi đã giải quyết vấn đề này.

Bước 7: Mã hiển thị 4 chữ số và video

Đó là tất cả cho hướng dẫn 9! Tôi đã đính kèm mã và video hiển thị hoạt động.

Đây sẽ là lần cuối cùng chúng tôi sử dụng bàn phím analog (cảm ơn chúa). Nó rất khó sử dụng, nhưng nó cũng rất hữu ích khi giúp chúng ta tìm hiểu về chuyển đổi tương tự sang kỹ thuật số, cổng tương tự, ngắt, ghép kênh, bộ lọc nhiễu, bộ khuếch đại điện áp và nhiều khía cạnh của mã hóa lắp ráp từ bảng tra cứu đến bộ đếm thời gian / bộ đếm, v.v … Đó là lý do tại sao chúng tôi quyết định sử dụng nó. (cộng với việc nhặt rác rất thú vị).

Bây giờ chúng ta sẽ xem xét lại giao tiếp và sử dụng màn hình 7 phân đoạn và 4 chữ số của chúng ta để đọc các cuộn xúc xắc của chúng ta từ con lăn xúc xắc giống như cách chúng ta đã làm với máy phân tích đăng ký. Lần này, chúng tôi sẽ sử dụng giao diện hai dây thay vì phương pháp mã morse được tấn công cùng nhau.

Một khi chúng tôi có các thông tin liên lạc hoạt động và các cuộn hiển thị trên màn hình, cuối cùng chúng tôi có thể tạo ra phần đầu tiên của sản phẩm cuối cùng của chúng tôi. Bạn sẽ nhận thấy rằng nếu không có tất cả các cổng tương tự, mã của chúng ta sẽ ngắn hơn đáng kể và có lẽ dễ đọc hơn.

Dành cho những bạn có nhiều tham vọng. Đây là một "dự án" mà bạn có thể thử mà bạn chắc chắn có đủ kiến thức để thực hiện vào thời điểm này nếu bạn đã xem qua tất cả các hướng dẫn này cho đến thời điểm này:

Dự án: Làm một chiếc máy tính bỏ túi! Sử dụng màn hình 4 chữ số và bàn phím của chúng tôi và thêm một nút nhấn bên ngoài sẽ hoạt động giống như phím "enter". Ánh xạ dấu hoa thị thành "lần", dấu thăng để "chia" số quay lại thành "cộng" và đèn nháy thành "trừ" và viết một quy trình máy tính hoạt động giống như một trong những máy tính "đánh bóng ngược" HP cũ mà tất cả các kỹ sư đã có trở lại trong ngày. I E. cách chúng hoạt động là bạn nhập một số và nhấn "enter". Thao tác này sẽ đẩy số đó vào ngăn xếp, sau đó bạn nhập số thứ hai và nhấn "enter", sẽ đẩy số thứ hai vào ngăn xếp. Cuối cùng, bạn nhấn một trong các thao tác như X, /, + hoặc - và nó sẽ áp dụng thao tác đó cho hai số trên cùng trên ngăn xếp, hiển thị kết quả và đẩy kết quả vào ngăn xếp để bạn có thể sử dụng lại nếu bạn như. Ví dụ: để thêm 2 + 3, bạn sẽ thực hiện: 2, "enter", 3, "enter", "+" và màn hình sau đó sẽ đọc 5. Bạn biết cách sử dụng ngăn xếp, màn hình, bàn phím và bạn có hầu hết mã nền đã được viết. Chỉ cần thêm phím enter và các chương trình con cần thiết cho máy tính. Nó phức tạp hơn một chút so với những gì bạn nghĩ lúc đầu, nhưng nó rất thú vị và có thể làm được.

Hẹn gặp lại các bạn trong lần sau!

Đề xuất: