Cổng logic và IC 74HC: bảng sự thật, đại số Boole, thử IC bằng ESP32

Cổng logic NOT, AND, OR, NAND, NOR, XOR và bảng sự thật, mức điện áp logic của 74HC, đại số Boole, định luật De Morgan, cổng NAND vạn năng, IC 74HC và thí nghiệm ESP32 tự đoán loại cổng.

Mọi máy tính, kể cả con chip ESP32, cuối cùng đều được ghép từ những mạch rất đơn giản chỉ hiểu hai trạng thái 0 và 1: các cổng logic. Bài viết giải thích các cổng NOT, AND, OR, NAND, NOR, XOR qua ký hiệu và bảng sự thật, mức điện áp nào được hiểu là 0 hay 1, vài quy tắc của đại số Boole (gồm định luật De Morgan), vì sao chỉ cần cổng NAND là ghép được mọi cổng khác, các IC họ 74HC thường gặp, rồi làm thí nghiệm: ESP32 cấp đủ bốn tổ hợp vào một cổng, lập bảng sự thật và tự đoán đó là cổng gì.

1. Cổng logic và bảng sự thật

Ảnh chụp cận cảnh IC 7400 vỏ DIP 14 chân màu xám đen hàn trên mạch in màu xanh vàng, trên thân in chữ F 9N00/7400 và dòng U9A 7137, khấc đánh dấu ở đầu bên trái
IC 7400 chứa bốn cổng NAND, một trong những IC logic đầu tiên và phổ biến nhất. Ảnh: Mister rf, CC BY-SA 4.0, Wikimedia Commons, đã thu nhỏ.

Cổng logic là mạch có một hoặc vài đầu vào và một đầu ra, mỗi chân chỉ ở một trong hai trạng thái: 0 (mức thấp, gần 0 V) hoặc 1 (mức cao, gần VCC). Cách cổng biến đổi đầu vào thành đầu ra được ghi trọn trong một bảng sự thật: mỗi dòng là một tổ hợp đầu vào, cột cuối là đầu ra. Cổng hai đầu vào có 2 × 2 = 4 dòng.

Bảy ô, mỗi ô một ký hiệu cổng kiểu ANSI kèm bảng sự thật: NOT tam giác có vòng tròn, Y bằng NOT A; AND hình chữ D, Y bằng 1 khi cả hai là 1; OR hình cong, Y bằng 1 khi có ít nhất một 1; NAND là AND rồi đảo; NOR là OR rồi đảo; XOR có thêm vạch cong ở đầu vào, Y bằng 1 khi hai đầu khác nhau; XNOR bằng 1 khi hai đầu giống nhau; ô cuối giải thích cách đọc bảng sự thật
Ký hiệu và bảng sự thật các cổng logic (hình tự vẽ).
  • NOT (cổng đảo): một đầu vào, ra ngược lại.
  • AND: ra 1 chỉ khi tất cả đầu vào là 1. Giống hai công tắc mắc nối tiếp: đèn chỉ sáng khi cả hai cùng đóng.
  • OR: ra 1 khi có ít nhất một đầu vào là 1. Giống hai công tắc mắc song song (cách mắc nối tiếp, song song ở bài 4).
  • NAND, NOR: AND, OR rồi đảo. Vòng tròn nhỏ ở ngõ ra ký hiệu cho phép đảo.
  • XOR (hoặc loại trừ): ra 1 khi hai đầu vào khác nhau. Dùng để so sánh hai bit, làm phép cộng nhị phân, đảo bit có điều kiện. XNOR thì ngược lại: ra 1 khi giống nhau.

Bên trong, mỗi cổng CMOS là vài transistor MOSFET (bài 20) làm công tắc: cổng NOT chỉ cần một MOSFET kênh P và một MOSFET kênh N, cổng NAND cần bốn.

2. Mức logic là các dải điện áp

Hai cột điện áp từ 0 đến 3,3 V: đầu vào 74HC hiểu mức 1 từ 2,31 V (0,7 VCC) trở lên, mức 0 từ 0,99 V (0,3 VCC) trở xuống, vùng giữa không xác định; ngõ ra 74HC tải nhẹ ở mức 1 gần 3,3 V, mức 0 gần 0 V, không dừng ở giữa; ghi chú đầu vào CMOS để hở sẽ trôi, 74HCT có ngưỡng TTL 2,0 V và 0,8 V
Mức logic của 74HC khi nuôi 3,3 V (hình tự vẽ, theo datasheet thường gặp).
  • Đầu vào không cần đúng 0 V hay 3,3 V: với 74HC nuôi 3,3 V, từ khoảng 2,31 V trở lên được hiểu là 1, từ khoảng 0,99 V trở xuống là 0. Giữa hai mức là vùng không xác định: cổng có thể hiểu sai, và cả hai transistor bên trong cùng dẫn một phần làm IC tốn điện, nóng.
  • Ngõ ra luôn đẩy hẳn về gần 0 V hoặc gần VCC. Nhờ vậy tín hiệu đi qua nhiều cổng vẫn "sạch", nhiễu nhỏ trên đường đi bị loại bỏ ở mỗi tầng.
  • Đầu vào CMOS để hở không phải mức 0: nó trôi theo nhiễu, có thể nằm trong vùng không xác định. Luôn nối đầu vào không dùng xuống GND hoặc lên VCC, hoặc qua điện trở kéo lên, kéo xuống (giống nút nhấn ở bài 14).
  • Cùng một ý: chân GPIO của ESP32 cũng có ngưỡng như vậy; đó là lý do tín hiệu 5 V không được đưa thẳng vào ESP32, còn tín hiệu 3,3 V của ESP32 đưa vào IC 5 V có thể không đủ mức 1. Họ 74HCT nuôi 5 V nhưng nhận mức 1 từ 2,0 V, hay dùng làm mạch chuyển mức từ 3,3 V lên 5 V (ví dụ cho dải LED WS2812).

3. Đại số Boole và định luật De Morgan

Hộp công thức: A nhân 0 bằng 0, A nhân 1 bằng A, A nhân NOT A bằng 0, A cộng 0 bằng A, A cộng 1 bằng 1, A cộng NOT A bằng 1, De Morgan NOT của A nhân B bằng NOT A cộng NOT B, NOT của A cộng B bằng NOT A nhân NOT B; ba sơ đồ ghép cổng NAND: NOT bằng NAND nối chung hai đầu vào, AND bằng NAND rồi NOT, OR bằng NOT từng đầu vào rồi NAND
Đại số Boole và cổng NAND vạn năng (hình tự vẽ).

Đại số Boole là phép tính chỉ có hai giá trị 0 và 1, dùng dấu · cho AND, dấu + cho OR. Vài quy tắc nhìn là thấy đúng nếu thử với bảng sự thật: A · 0 = 0, A · 1 = A, A + 1 = 1, A + 0 = A. Quan trọng nhất là định luật De Morgan:

  • NOT (A · B) = (NOT A) + (NOT B): "không phải cả hai đều đúng" nghĩa là "ít nhất một cái sai".
  • NOT (A + B) = (NOT A) · (NOT B): "không có cái nào đúng" nghĩa là "cả hai đều sai".

Hệ quả: chỉ cần cổng NAND là ghép được mọi cổng khác. Nối chung hai đầu vào của NAND được cổng NOT; NAND rồi NOT được AND; đảo từng đầu vào rồi đưa vào NAND, theo De Morgan, được OR. Cổng NOR cũng có tính chất vạn năng như vậy. Trong thực tế, đây là cách tận dụng cổng thừa trong một IC: mạch cần một cổng NOT mà IC 74HC00 còn dư một cổng NAND thì dùng luôn, không phải thêm IC.

Đại số Boole cũng dùng thẳng trong chương trình: biểu thức !(a && b) trong C viết lại được thành !a || !b, giúp điều kiện if dễ đọc hơn.

4. IC họ 74HC

IC 74HC00 vỏ DIP-14 nhìn từ trên với bốn cổng NAND vẽ bên trong: chân 1A, 1B, 1Y, 2A, 2B, 2Y, GND ở hàng dưới, VCC, 4B, 4A, 4Y, 3B, 3A, 3Y ở hàng trên; bảng các IC: 74HC00 bốn cổng NAND, 74HC02 bốn cổng NOR có ngõ ra ở chân 1, 4, 10, 13, 74HC04 sáu cổng NOT, 74HC08 bốn cổng AND, 74HC14 sáu cổng NOT có trễ, 74HC32 bốn cổng OR, 74HC86 bốn cổng XOR
IC 74HC00 và các IC cổng logic thường gặp (hình tự vẽ).
  • 74HC là họ IC logic CMOS phổ biến nhất hiện nay: nguồn 2–6 V, chạy tốt ở 3,3 V cùng ESP32, tốc độ đổi mức vài chục nano giây, gần như không tốn điện khi đứng yên. Họ 74LS cũ hơn (TTL lưỡng cực) cần đúng 5 V và tốn điện hơn.
  • Hai số cuối là chức năng, giống nhau giữa các họ: 7400, 74LS00, 74HC00 đều là bốn cổng NAND (cách đọc mã IC ở bài 23).
  • 74HC00, 08, 32, 86 cùng sơ đồ chân: cổng 1 vào chân 1, 2, ra chân 3. 74HC02 khác: ngõ ra ở chân 1, đầu vào ở chân 2, 3.
  • 74HC14 là cổng NOT có trễ (Schmitt trigger): đầu vào thay đổi chậm hoặc có nhiễu, ngõ ra vẫn lật dứt khoát. Hay dùng để làm sạch tín hiệu nút nhấn, cảm biến.

5. Thí nghiệm: ESP32 lập bảng sự thật và đoán loại cổng

ESP32 đóng vai bộ thử IC: lần lượt đặt bốn tổ hợp (A, B) = 00, 01, 10, 11 vào cổng 1 của IC, đọc ngõ ra, ghép thành bảng sự thật rồi so với bảng của sáu loại cổng hai đầu vào.

Chuẩn bị

Sơ đồ nối

Sơ đồ: 3V3 của ESP32 nối chân 14 của IC 74HC00, GND nối chân 7; GPIO26 nối chân 1 (1A), GPIO27 nối chân 2 (1B), GPIO32 nối chân 3 (1Y); ghi chú tụ 100 nF giữa chân 14 và 7, đầu vào cổng 2, 3, 4 nối GND
Sơ đồ thí nghiệm thử cổng logic với ESP32 (hình tự vẽ).
  • IC cắm vắt qua rãnh giữa breadboard, khấc sang trái. Nuôi IC bằng 3,3 V của ESP32 để mức ra của IC vừa với chân GPIO.
  • Sáu đầu vào của ba cổng còn lại (chân 4, 5, 9, 10, 12, 13) nối GND. Ngõ ra của chúng (chân 6, 8, 11) để trống.
  • Muốn thử 74HC02 thì đổi dây: GPIO26 vào chân 2, GPIO27 vào chân 3, chân 1 về GPIO32.

Chương trình

/*
  PYWORLD.VN - Thử cổng logic 74HC bằng ESP32: lập bảng sự thật của một cổng hai đầu vào và tự đoán loại cổng
  IC 74HC00/08/32/86 nuôi 3,3 V: GPIO26 vào chân 1 (A), GPIO27 vào chân 2 (B), chân 3 (Y) về GPIO32
  Các đầu vào của ba cổng còn lại nối GND; tụ 100 nF giữa chân 14 (VCC) và chân 7 (GND)
*/

#define CHAN_A 26
#define CHAN_B 27
#define CHAN_Y 32

// Bảng sự thật viết thành 4 bit: bit i là Y khi (A, B) = (i / 2, i % 2)
const char *TEN_CONG[] = {"AND", "OR", "NAND", "NOR", "XOR", "XNOR"};
const char *VI_DU_IC[] = {"74HC08", "74HC32", "74HC00", "74HC02", "74HC86", "74HC7266"};
const uint8_t BANG_CONG[] = {0b1000, 0b1110, 0b0111, 0b0001, 0b0110, 0b1001};

// Đọc chân Y hai lần, lần lượt với điện trở kéo xuống và kéo lên bên trong (khoảng 45 kΩ).
// Ngõ ra 74HC mạnh hơn nhiều nên hai lần phải giống nhau; khác nhau nghĩa là chân Y đang hở mạch.
int docY() {
  pinMode(CHAN_Y, INPUT_PULLDOWN);
  delayMicroseconds(50);
  int y1 = digitalRead(CHAN_Y);
  pinMode(CHAN_Y, INPUT_PULLUP);
  delayMicroseconds(50);
  int y2 = digitalRead(CHAN_Y);
  return (y1 == y2) ? y1 : -1;
}

void setup() {
  Serial.begin(115200);
  pinMode(CHAN_A, OUTPUT);
  pinMode(CHAN_B, OUTPUT);
  delay(300);
  Serial.println("Thu cong logic hai dau vao: A = GPIO26, B = GPIO27, Y = GPIO32");
}

void loop() {
  uint8_t bang = 0;
  bool hoMach = false;
  Serial.println(" A B | Y");
  for (int i = 0; i < 4; i++) {
    int a = i / 2, b = i % 2;
    digitalWrite(CHAN_A, a);
    digitalWrite(CHAN_B, b);
    delay(5);                          // Cổng 74HC đổi mức trong vài chục ns; chờ dư để dây dài cũng ổn định
    int y = docY();
    if (y < 0) {
      hoMach = true;
      Serial.printf(" %d %d | ? (ho mach)\n", a, b);
    } else {
      bang |= y << i;
      Serial.printf(" %d %d | %d\n", a, b, y);
    }
  }
  if (hoMach) {
    Serial.println("=> Chan Y khong duoc dieu khien: kiem tra day Y, nguon chan 14, GND chan 7");
  } else {
    int k = -1;
    for (int j = 0; j < 6; j++) {
      if (BANG_CONG[j] == bang) k = j;
    }
    if (k >= 0) Serial.printf("=> Cong %s (vi du IC %s)\n", TEN_CONG[k], VI_DU_IC[k]);
    else if (bang == 0) Serial.println("=> Y luon 0: kiem tra nguon, so do chan (74HC02 khac so do)");
    else if (bang == 0b1111) Serial.println("=> Y luon 1: kiem tra GND, so do chan");
    else Serial.println("=> Khong khop cong hai dau vao nao: kiem tra day A, B");
  }
  Serial.println();
  delay(3000);
}
  • Mỗi bảng sự thật được ghép thành một số 4 bit: bit thứ i là ngõ ra khi (A, B) = (i / 2, i % 2). Ví dụ cổng AND chỉ ra 1 ở tổ hợp 11 (i = 3) nên bảng là 0b1000. So bảng đo được với sáu số trong BANG_CONG là biết loại cổng.
  • docY() đọc chân Y hai lần, lần lượt bật điện trở kéo xuống và kéo lên bên trong ESP32. Ngõ ra 74HC mạnh hơn nhiều nên hai lần phải giống nhau; nếu khác, chân Y đang hở mạch (dây lỏng, IC chưa có nguồn). Đây là mẹo hay khi kiểm tra một chân có được điều khiển hay không.
  • Chân GPIO32 được chọn vì có điện trở kéo lên, kéo xuống bên trong; các chân GPIO34–39 của ESP32 không có.

Kết quả mong đợi

Hình minh họa Serial Monitor ba lần chạy: lần đầu bảng 0 0 ra 1, 0 1 ra 1, 1 0 ra 1, 1 1 ra 0 và kết luận cổng NAND ví dụ IC 74HC00; lần hai 0 0 ra 0, 0 1 ra 1, 1 0 ra 1, 1 1 ra 0 và kết luận cổng XOR ví dụ IC 74HC86; lần ba cả bốn dòng ra dấu hỏi hở mạch và lời nhắc kiểm tra dây Y, nguồn chân 14, GND chân 7
Kết quả mong đợi trên Serial Monitor (hình minh họa theo cách chương trình so khớp bảng).

Cắm 74HC00 thì chương trình báo cổng NAND; tắt nguồn, thay bằng 74HC86 rồi cấp lại thì báo cổng XOR. Thử rút dây ở chân 3: bốn dòng báo hở mạch. Thử dời ba dây sang cổng 2 (chân 4, 5, 6) để kiểm tra từng cổng trong IC: cách này dùng được để tìm cổng hỏng trong một IC cũ.

6. Xử lý lỗi thường gặp

Hiện tượngNguyên nhân thường gặpCách xử lý
Báo hở mạch cả bốn dòngDây chân 3 lỏng, IC chưa có nguồn chân 14 hoặc GND chân 7Đo 3,3 V giữa chân 14 và 7; kiểm tra dây Y
Y luôn 0 hoặc luôn 1Cắm 74HC02 với dây theo sơ đồ 74HC00, hoặc IC cắm ngượcKiểm tra mã IC và khấc; đổi dây theo sơ đồ chân đúng
Báo "không khớp cổng nào"Dây A hoặc B cắm nhầm hàng, một đầu vào bị hởKiểm tra chân 1, 2 của IC
Kết quả lúc đúng lúc saiĐầu vào các cổng khác để hở gây nhiễu, thiếu tụ 100 nFNối mọi đầu vào không dùng xuống GND; thêm tụ nguồn
IC ấm lên dù không có tảiĐầu vào nằm trong vùng không xác định (để hở hoặc điện áp lưng chừng)Nối đầu vào về mức rõ ràng

7. Xem thêm

  • Các bài liên quan trong loạt điện tử căn bản: MOSFET (bài 20), IC là gì và cách đọc mã (bài 23).
  • Bài tiếp theo của loạt: flip-flop, bộ đếm và thanh ghi dịch 74HC595 để mở rộng chân ra cho ESP32.

Tin tức liên quan

Cảm biến quang: thu phát, phản xạ gương, khuếch tán, triệt nền – cấu tạo, nguyên lý và chế tạo
Cảm biến quang: thu phát, phản xạ gương, khuếch tán, triệt nền – cấu tạo, nguyên lý và chế tạo

Cảm biến quang hoạt động thế nào: bốn kiểu thu phát, phản xạ gương, khuếch tán, triệt nền; điều chế ánh sáng chống nhiễu, cấu tạo, cách chế tạo và làm cảm biến phản xạ có điều chế với ESP32.

Sơ đồ chân USB Type-C (pinout): cổng 24 chân, 16 chân, 6 chân
Sơ đồ chân USB Type-C (pinout): cổng 24 chân, 16 chân, 6 chân

Sơ đồ chân (pinout) cổng USB Type-C loại 24 chân, 16 chân và 6 chân: bảng tra VBUS, GND, CC1, CC2, D+, D−, SBU, TX RX, lý do cắm được hai chiều và cách các chân gom thành jack 2, 4, 6 dây.

Cấu tạo máy CNC mini và máy khắc laser: khung, ray trượt, truyền động, đầu công cụ, bộ điều khiển
Cấu tạo máy CNC mini và máy khắc laser: khung, ray trượt, truyền động, đầu công cụ, bộ điều khiển

Cấu tạo máy CNC kiểu cổng và máy khắc laser khung hở: khung nhôm định hình, ray dẫn hướng, vít me và dây đai, động cơ bước, spindle, module laser, phần điện và ba kiểu kết cấu.

Vẽ đa giác và hoa văn bằng lập trình: học góc trong môn Toán với Scratch
Vẽ đa giác và hoa văn bằng lập trình: học góc trong môn Toán với Scratch

Dùng nhóm lệnh Bút vẽ của Scratch để vẽ đa giác đều, ngôi sao, hoa văn, xoắn ốc; hiểu vì sao xoay góc ngoài 360 : n, góc trong, và liên hệ với môn Toán ở tiểu học.

Diode: tiếp giáp p-n, chỉnh lưu, chống cắm ngược nguồn và diode bảo vệ
Diode: tiếp giáp p-n, chỉnh lưu, chống cắm ngược nguồn và diode bảo vệ

Diode là gì: chất bán dẫn và tiếp giáp p-n, đặc tuyến diode silic và Schottky, thông số 1N4148, 1N4007, 1N5819, ứng dụng chỉnh lưu, chống cắm ngược, chọn nguồn, kẹp bảo vệ, cách kiểm tra.

Vòng dòng 4-20 mA là gì và cách đọc cảm biến 4-20 mA bằng ESP32
Vòng dòng 4-20 mA là gì và cách đọc cảm biến 4-20 mA bằng ESP32

Giải thích vòng dòng 4-20 mA: vì sao dùng dòng điện, vì sao bắt đầu từ 4 mA, cách đổi ra giá trị đo và ngưỡng báo lỗi. Hướng dẫn đọc bằng ESP32 qua điện trở shunt 120 Ω, với ADC có sẵn và với ADS1115.

Cảm biến biến dạng (strain gauge): cấu tạo, nguyên lý, các loại, chế tạo và đo bằng ADS1115, ESP32
Cảm biến biến dạng (strain gauge): cấu tạo, nguyên lý, các loại, chế tạo và đo bằng ADS1115, ESP32

Cảm biến biến dạng hoạt động thế nào: vì sao điện trở đổi khi bị kéo, gauge factor, strain gauge lá kim loại, bán dẫn, dây rung, sợi quang, bù nhiệt, cách chế tạo và đo µε bằng ADS1115, ESP32.

Mạch RC: tụ nạp xả, hằng số thời gian và đo điện dung bằng ESP32
Mạch RC: tụ nạp xả, hằng số thời gian và đo điện dung bằng ESP32

Tụ nạp và xả qua điện trở, hằng số thời gian τ = R × C, các mốc 63,2 % và 5τ, ứng dụng lọc thông thấp, lọc PWM, chống dội nút nhấn, thí nghiệm đo τ và điện dung tụ bằng ESP32.


Bình luận
Đã thêm vào giỏ hàng