Como projetar uma biblioteca Arduino para uma porta IO de 8 bits

Como projetar uma biblioteca Arduino para uma porta IO de 8 bits

Neste projeto, criaremos uma biblioteca Arduino de porta IO de 8 bits que lê e grava todos os oito bits em um único comando combinando os pinos do Arduino. Isso significa que enviar e receber dados de 8 bits de um único pino será possível.

O Arduino fornece saída digital usando a função digitalWrite e recebe entrada digital por meio da função digitalRead . Ao usar essas duas funções, o Arduino pode fornecer saída ou entrada de qualquer pino único. No entanto, o Arduino normalmente fornece apenas entrada ou saída de um pino por vez.

Portanto, para fazer a interface do Arduino com um dispositivo IO de 8 bits – como um display de 7 segmentos, chaves DIP ou DAC (conversor digital para analógico), geralmente são necessários oito pinos diferentes. O padrão de bytes de dados (8 bits) é enviado para pinos diferentes como '1s' e '0s'. Por exemplo, se um byte de dados for 37h (0011 0111), é necessário enviar o padrão '0' e '1' para oito pinos diferentes usando a função digitalWrite .

Para resolver esta situação, criamos uma biblioteca de portas IO (porta de entrada-saída) de 8 bits que combina os pinos do Arduino. Funciona como uma porta IO de 8 bits para Arduino e configura a direção dos dados como entrada ou saída. A direção dos dados é definida pelo caractere 'O' para a saída e 'I' para a entrada.

Esta biblioteca possui cinco funções. Dois “construtores” criam o(s) objeto(s) de porta, incluindo uma função que envia a saída digital de 8 bits para os pinos da porta e outra que recebe a entrada digital de 8 bits dos pinos da porta. Uma terceira função altera e define a direção de E/S da porta. Todas as cinco funções são explicadas a seguir.

As cinco funções

1. IO_Port_8bit(int pino1,int pino2,int pino3,int pino4,int pino5,int pino6,int pino7,int pino8,char diretório)
Este construtor cria objeto(s) desta classe. Ele pode criar uma ou várias portas de 8 bits combinando pinos específicos do Arduino. É importante especificar quais oito pinos do Arduino combinar, juntamente com a direção dos dados de cada porta (entrada ou saída). O último argumento, dir, define se uma porta funciona como entrada ou saída.

  • Se dir='O' = a porta funciona como saída
  • Se dir='I' = a porta funciona como entrada

A mesma porta não pode funcionar como entrada e saída simultaneamente ou alternativamente. A direção da porta deve ser selecionada ou resultará em erro.

2. IO_Port_8bit(int pin1,int pin2,int pin3,int pin4,int pin5,int pin6,int pin7,int pin8)
Este é outro construtor, que cria objeto(s) desta classe. Ele pode criar uma ou várias portas de 8 bits combinando pinos específicos do Arduino. É importante especificar quais oito pinos do Arduino combinar para cada porta. No entanto, incluir a direção dos dados como entrada ou saída é desnecessário.

Em vez disso, após criar um objeto de porta usando este construtor, defina a direção da porta usando a função set_IO_direction. Este construtor permite que o programador altere a direção dos dados da porta em tempo de execução. Então, uma porta pode funcionar como entrada ou saída alternativamente (mas não simultaneamente).

3. set_IO_direction(char diretório)
Esta função especifica a direção de entrada e saída de uma porta. Ela tem um argumento de caractere, que é 'I' para uma porta que é entrada e 'O' para uma porta que é saída. Um erro será exibido no monitor serial do Arduino se a direção dos dados não for selecionada.

4. enviar_dados_de_8_bits(int byt)
Esta função envia dados de 8 bits para pinos especificados. Ele fornece os dados 'int' (deve ser <255) como argumento, que é enviado diretamente para oito pinos diferentes. Se os dados forem >255, um erro será exibido no monitor serial do Arduino.

5. get_8bit_data(vazio)
Esta função recebe dados de 8 bits de pinos especificados. Ele retorna os dados 'int' de 8 bits lendo o status dos oito pinos diferentes.

Exemplo 1: Pisque oito LEDs alternadamente a uma taxa de 1 Hz

#incluir

IO_Port_8bit minhaport(2,3,4,5,6,7,8,9,'O'); //cria porta de saída
void setup // nada é necessário na configuração
{
}
loop vazio
{
myport.send_8bit_data(85); // envia dados para piscar todos os LEDs ímpares
atraso(500);
minhaporta.send_8bit_data(170); envia dados para piscar todos os LEDs pares
atraso(500);
}

Diagrama de circuito

Exemplo 2: Exiba um padrão de contagem binária nos LEDs, de 0 a F

#incluir
IO_Port_8bit my8bitport(2,3,4,5,6,7,8,9);//criar objeto de porta
configuração nula
{
my8bitport.set_IO_direction('O');// define a direção da porta
}

loop vazio
{
int eu;
for(i=0;i<16;i++) //envia dados de 0 a 15 para exibição
{ // padrão binário
minhaporta.send_8bit_data(i);
atraso(200);
}
}

Exemplo 3: Indicar o nível de tensão de entrada analógica em um display gráfico de barras LED de 8 bits

#incluir

IO_Port_8bit minhaport(2,3,4,5,6,7,8,9,'O'); //cria objeto de porta de saída
configuração nula
{
minhaporta.send_8bit_data(255); //pisca todos os LEDs do gráfico de barras uma vez
atraso(500);
minhaporta.send_8bit_data(0);
}

loop vazio
{
nível int;
level = analogRead(A0); //ler tensão de entrada analógica
level = map(level,0,1023,0,80);// limita a voltagem de 0 a 80
//aumenta ou diminui o nível do gráfico de barras conforme a entrada
if((nível<80) && (nível>70)) myport.send_8bit_data(255);
senão se((nível<=70) && (nível>60)) myport.send_8bit_data(127);
senão if((nível<=60) && (nível>50)) myport.send_8bit_data(63);
senão if((nível<=50) && (nível>40)) myport.send_8bit_data(31);
senão if((nível<=40) && (nível>30)) myport.send_8bit_data(15);
senão if((nível<=30) && (nível>20)) myport.send_8bit_data(7);
senão if((nível<=20) && (nível>10))myport.send_8bit_data(3);
senão if((nível<=10) && (nível>0)) myport.send_8bit_data(1);
senão if(level==0) myport.send_8bit_data(0);

}

Diagrama de circuito

Exemplo 4: Receba uma entrada digital de 8 bits de interruptores DIP e exiba o valor no monitor serial

#incluir

IO_Port_8bit minhaport(2,3,4,5,6,7,8,9); //cria objeto porta
configuração nula
{
Serial.begin(9600); // inicializa comunicação serial.
myport.set_IO_direction('I'); // define a direção da porta
Serial.println(“teste de porta de entrada de 8 bits”);
}

loop vazio
{
int entrada_byt;
input_byt = myport.get_8bit_data ; // leia o status do interruptor DIP
Serial.print(“entrada recebida = “); // e
Serial.println(input_byt); //mostra seu valor
atraso(1000);
}

Diagrama de circuito

Conteúdo Relacionado

ESP32-CAM é um módulo de câmera compacto que combina...
Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Você provavelmente já viu permanecer um isolante sente-se em...
Você provavelmente já viu Isoladores de manilha entronizados em...
Você provavelmente já passou por situações em que o...
Zurück zum Blog

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.