Introdução à API Wokwi Custom Chips C
A API de chips está atualmente em versão beta. Por favor, compartilhe suas experiências e forneça feedback no canal #custom-chips
no chat do Discord.
Começando
Abra o Custom Chip Playground, vá para o editor de código, pressione F1
e selecione Create a custom C chip (alpha).
Isso criará um novo arquivo chamado i2c-counter.chip.c
. Este arquivo contém um exemplo de um dispositivo I2C simples com um contador de 8 bits que aumenta para cada byte que você lê. A gravação no dispositivo substituirá o valor.
O dispositivo também fornece um pino INT
que fica baixo quando o contador é maior que 127
. Caso contrário, o pino INT
está no estado de entrada (alta impedância).
Inicie a simulação para observar o comportamento do chip customizado: o código do Arduino deve ler o valor do contador, e o LED acenderá quando o contador ultrapassar 127
.
Adicionando seu chip personalizado à simulação
O Custom Chip Playground já tem o chip conectado, mas você pode seguir as instruções abaixo para conectar um chip personalizado a um projeto diferente.
Adicione o seguinte snippet ao seu diagram.json:
{ "type": "chip-i2c-counter", "id": "chip1", "top": 0, "left": 0, "attrs": {} },
O Wokwi gera automaticamente uma placa de expansão (breakout board) para o seu chip. Edite i2c-counter.chip.json
para definir os pinos para sua peça. O array pins
deve conter os nomes dos pinos do seu chip, começando pelo pino número 1
. Se você deseja pular alguns pinos (por exemplo, deseja que o quadro de acesso tenha apenas pinos no lado esquerdo), use uma string vazia (""
) para o nome do pino.
Usando a API
Primeiro, certifique-se de #include "wokwi-api.h"
.
O chip deve declarar um método chip_init
. Este método será chamado para cada nova instância do chip. Se o chip tiver algum estado interno, chip_init
deve alocar memória para o estado interno e salvar um ponteiro para esta memória no campo void *user_data
das estruturas de configuração do dispositivo (por exemplo, i2c_config_t
, timer_config_t
, etc .).
Aqui está um exemplo de um arquivo chip mínimo:
#include "wokwi-api.h"
void chip_init() {
/*
Este método é executado quando a simulação é iniciada. É chamado uma vez para cada instância do chip.
Você normalmente alocaria alguma memória para armazenar o estado do chip, inicializar um monte de pinos com pin_init(),
e configurar relógios de pinos, temporizadores e protocolos como UART, I2C e SPI.
*/
}
Depurando seu chip personalizado
Você pode imprimir mensagens de depuração usando a função padrão C printf()
. Certifique-se de também #include <stdio.h>
em seu programa. As mensagens de depuração aparecerão no console do desenvolvedor do navegador (para visualizar no Chrome: Ctrl
+Shift
+J
ou Option
+⌘
+J
).
As mensagens de depuração do seu chip serão impressas na cor verde:
Além disso, você pode usar o Analisador Lógico Wokwi para depurar a comunicação com seu chip personalizado.
Certifique-se de incluir uma nova linha ("\n") no final de suas mensagens printf()
. O simulador mostra as mensagens somente quando possuí um caractere de nova linha.
Referência da API dos chips 📖
- API de pinos GPIO
- API Analógica
- API de simulação de tempo
- API da UART
- API do dispositivo I2C
- API do dispositivo SPI
- Atributos
- API Framebuffer
Exemplos de Chip
- Digital Inverter
- XOR gate
- SPI Chip - Implementa uma cifra ROT13 básica
- I2C Chip - Saída simples de interrupção do contador
- UART Chip - Implementa uma cifra ROT13 básica
- Timer Chip - Mostrando como usar a API Timer
- LM75A Chip - Sensor digital de temperatura I2C
- Framebuffer Chip - Mostra como implementar um chip de driver de exibição personalizado
- IL9163 Display Driver - Chip de exibição LCD colorido de 128x128
- I2C Keypad Driver Example (por Yewolf)
- CD4051B Multiplexer Example (por Chris Schmidt)
- EEPROM Chip (por Benny Meisels)
- PCA9685 Chip (por Bonny Rais)
- DS18B20 Chip (por Bonny Rais) - Sensor de temperatura Dallas Semi DS18B20 através do OneWire