The Electronics Project
Revisitando conceitos de eletrônica e tentando construir um processador. Um repositório de estudos. O objetivo é aprender a projetar placas de circuito impresso (PCB) e circuitos digitais. Verilog, Arduino, ESP32 e Raspberry Pi.
O Projeto de Eletrônica
Um repositório de estudos. O objetivo é aprender design de PCB e circuitos digitais. Verilog, Arduino, ESP32 e Raspberry Pi. Vou postar meu progresso aqui à medida que for avançando.
O objetivo final é imprimir um circuito real ou uma placa de circuito impresso (PCB).
Para chegar lá, estou começando pelos fundamentos. Os esboços do Arduino servem para me familiarizar com os componentes físicos: botões, LEDs, leitura de sinais, esse tipo de coisa. A parte do Verilog serve para compreender a lógica digital mais profundamente — como blocos básicos como registros, contadores e memória realmente funcionam juntos.
O processador está sendo construído para que eu possa aprender da maneira mais dolorosa possível como a eletrônica funciona no nível mais básico.
Porque, aparentemente, sofrer faz bem.
SAP-1 — Simple as Possible Computer (referência): https://karenok.github.io/SAP-1-Computer/
Estrutura
arduino/ Experimentos com hardware físico no Arduino
processor/ Módulos Verilog — experimentos de lógica digital
Processador (Verilog)
Construído e simulado usando Digital. O esquema completo está em main.dig.
| Módulo | Arquivo | Descrição |
|---|---|---|
| Somador de 8 bits | adder_8bit.v |
Soma dois valores de 8 bits com carry de entrada/saída |
| Registro de 8 bits | register_8bit.v |
Registro sincronizado com habilitação de gravação e reinicialização síncrona |
| Contador de programa | program_counter.v |
Incrementa a cada ciclo de clock, suporta parada e reinicialização |
| Memória | memory_256x8.v |
RAM síncrona de 256 bytes |
| Multiplexador 8-para-1 | mux_8_to_1.v |
Seleciona uma das 8 linhas de dados |
| Contador de 8 bits | counter_8bit.v |
Conta a cada ciclo de clock, com carga e reinicialização |
| Do Once | do_once.v |
Latch de disparo único — permite a passagem de um sinal exatamente uma vez |
Esboços do Arduino
1. O dispositivo liga-desliga (completamente inútil)
Descrição:
Um dispositivo de alternância básico com um botão físico e dois LEDs (vermelho e azul).
Comportamento:
- Quando ligado, o LED vermelho acende.
- Pressionar o botão desliga o LED vermelho e acende o LED azul.
- Soltar o botão reverte o estado.
Circuito: botão no pino 9 (INPUT_PULLUP), LED azul no pino 2, LED vermelho no pino 7.
Meus ancestrais esperaram pelo momento em que este dispositivo fosse inventado. E aqui estamos nós, finalmente.
2. Teste do botão
Define um pino como HIGH. É isso.
3. Teste de leitura
Lê um pino e imprime o valor na porta serial. Introdução básica.
4. Controle de tráfego
Descrição:
Um semáforo automático de 3 estados. Ciclos verde → amarelo → vermelho por temporizador. O botão interrompe e força o vermelho imediatamente (travessia de pedestres).
Comportamento:
- Verde (estado 0): LED verde aceso por 5 s, executa 2 ciclos (10 s no total), depois avança para amarelo.
- Amarelo (estado 1): LEDs vermelho + verde acesos (misturando-se em amarelo), o alarme soa por 2 s, depois avança para o vermelho.
- Vermelho (estado 2): LED vermelho aceso por 5 s, executa 2 ciclos (10 s no total), depois volta para o verde.
- Pressionar o botão a qualquer momento: salta diretamente para o vermelho com 500 ms de debounce.
- As pressões do botão são verificadas no meio do atraso (
responsiveDelay) para que o sinal seja sempre interrompível.
Circuito: botão no pino 9 (INPUT_PULLUP), LED vermelho no pino 2, LED verde no pino 3, LED azul no pino 4, buzzer no pino 7.
