ESP32-C6+74HC165_TEST — Esp32 C6 simulation

An interactive Esp32 C6 circuit simulation you can run free in your browser on Velxio, by kshyhoo.

Components

Sketch code

#include <Arduino.h>
// Definicje pinów (zgodnie z Twoim ustaleniem)
#define PIN_PL    3     // Pin 1 układu (PL)
#define PIN_CP    2     // Pin 2 układu (CP)
#define PIN_D4    11    // Pin 3 układu (D4)
#define PIN_D5    10    // Pin 4 układu (D5)
#define PIN_D6    1     // Pin 5 układu (D6)
#define PIN_D7    0     // Pin 6 układu (D7)
#define PIN_Q7_N  7     // Pin 7 układu (Q7_N)

#define PIN_Q7    21    // Pin 9 układu (Q7)
#define PIN_DS    20    // Pin 10 układu (DS)
#define PIN_D0    19    // Pin 11 układu (D0)
#define PIN_D1    18    // Pin 12 układu (D1)
#define PIN_D2    9     // Pin 13 układu (D2)
#define PIN_D3    13    // Pin 14 układu (D3)
#define PIN_CE    12    // Pin 15 układu (CE)

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("\n74HC165 - Test wszystkich 256 kombinacji (Tabela wynikow)\n");
  // Konfiguracja pinów sterujących jako wyjścia z perspektywy ESP32
  pinMode(PIN_PL, OUTPUT);
  pinMode(PIN_CP, OUTPUT);
  pinMode(PIN_CE, OUTPUT);
  pinMode(PIN_DS, OUTPUT);
  // Piny D0-D7 jako wyjścia do sterowania stanami wejściowymi
  pinMode(PIN_D0, OUTPUT);
  pinMode(PIN_D1, OUTPUT);
  pinMode(PIN_D2, OUTPUT);
  pinMode(PIN_D3, OUTPUT);
  pinMode(PIN_D4, OUTPUT);
  pinMode(PIN_D5, OUTPUT);
  pinMode(PIN_D6, OUTPUT);
  pinMode(PIN_D7, OUTPUT);
  // Odczyt szeregowy
  pinMode(PIN_Q7, INPUT);
  pinMode(PIN_Q7_N, INPUT);
  // Aktywacja zegara
  digitalWrite(PIN_CE, LOW);
  // Idealnie dopasowany nagłówek tabeli
  Serial.println("+-----+------+----------+--------+");
  Serial.println("| Dec | Hex  | Binarny  | Status |");
  Serial.println("+-----+------+----------+--------+");

  bool all_passed = true;

  for (int i = 0; i < 256; i++) {
    uint8_t test_val = (uint8_t)i;
    // Wystawiamy kombinację na piny D0-D7
    digitalWrite(PIN_D0, (test_val & 0x01) ? HIGH : LOW);
    digitalWrite(PIN_D1, (test_val & 0x02) ? HIGH : LOW);
    digitalWrite(PIN_D2, (test_val & 0x04) ? HIGH : LOW);
    digitalWrite(PIN_D3, (test_val & 0x08) ? HIGH : LOW);
    digitalWrite(PIN_D4, (test_val & 0x10) ? HIGH : LOW);
    digitalWrite(PIN_D5, (test_val & 0x20) ? HIGH : LOW);
    digitalWrite(PIN_D6, (test_val & 0x40) ? HIGH : LOW);
    digitalWrite(PIN_D7, (test_val & 0x80) ? HIGH : LOW);
    delayMicroseconds(10);
    // Odczytujemy stan z rejestru
    uint8_t read_val = 0;
    digitalWrite(PIN_PL, LOW);
    delayMicroseconds(5);
    digitalWrite(PIN_PL, HIGH);
    delayMicroseconds(5);
    for (int b = 0; b < 8; b++) {
      if (digitalRead(PIN_Q7) == HIGH) {
        read_val |= (1 << (7 - b));
      }
      digitalWrite(PIN_CP, HIGH);
      delayMicroseconds(5);
      digitalWrite(PIN_CP, LOW);
      delayMicroseconds(5);
    }
    // Formatowanie wyświetlania bitów binarnie (zawsze równe 8 znaków)
    char bin_str[9];
    for (int b = 7; b >= 0; b--) {
      bin_str[7 - b] = (test_val & (1 << b)) ? '1' : '0';
    }
    bin_str[8] = '\0';
    const char* status = (read_val == test_val) ? "  OK  " : " BLAD ";
    if (read_val != t

More projects by kshyhoo