Conversão de um caractere para frases binária, hexadecimal e Decimal
O objetivo desse desafio é construir um circuito responsável pela leitura de um caractere e imprimir o valor em Decimal, Hexadecimal , Binário e Octal com base nos valores da tabela ASCII.
Resumo teórico
Para fazer a conversão de um caractere em valores decimais, hexadecimais e binários é utilizada a tabela ASCII (American Standard Code for Information Interchange) como referência já que ela é responsável pela codificação de 127 sinais utilizando 7 bits para representar todos os símbolos.
Antes de passarmos para a próxima etapa precisamos entender duas coisas. O que é o código ASCII e o que é um conversor Analógico-Digital.
O código ASCII é usado para unificar a representação de caracteres que podem ser impressos em computadores, portanto quando é digitado algum caractere o computador realiza a leitura segundo a tabela ASCII, por exemplo, quando é digitada a letra "a" o computador lê em valores binários o valor referente a tabela, que por sua vez ficara nesta forma: 0110 0001.
O conversor Analógico-Digital (A/D) é responsável pela reprodução digital a partir de um um sinal analógico. Na placa arduino uno o pino analógico tem resolução máxima de 10 bits, onde as leituras são realizadas de 0(00000000000) a 1024(11111111111). Para realizar a conversão de vales de sinais analógico (bits) para sinais digitais (binário), realizamos a seguinte operação:
Suponhamos que o conversor apresente 3 bits, então iremos ter o valor de 23 em frases binárias, ou seja, serão 8 linhas com 3 colunas variando com valores de 0 ou 1. Para fazer o preenchimento de cada linha com seu respectivo valor devemos realizar a seguinte conta.
Conta para Conversão Resultado
de bits para binário em Binário
0x 2^2+ 0x 2^1+ 0x 2^0 0 0 0
0x 2^2+ 0x 2^1+ 1x 2^0 0 0 1
0x 2^2+ 1x 2^1+ 0x 2^0 0 1 0
0x 2^2+ 1x 2^1+ 1x 2^0 0 1 1
1x 2^2+ 0x 2^1+ 0x 2^0 1 0 0
1x 2^2+ 0x 2^1+ 1x 2^0 1 0 1
1x 2^2+ 1x 2^1+ 0x 2^0 1 1 0
1x 2^2+ 1x 2^1+ 1x 2^0 1 1 0
Portanto percebe-se que um conversor igual ao do arduino uno que apresenta um conversor de 10 bits logo tal conversor apresentará 1024 frases binárias.
A conversão dos caracteres é feita diretamente pelo próprio arduino, entretanto quando se trata de números também é possível realizar a conversão facilmente para valores hexadecimais (base 16) e binários(base 2). Por exemplo, se quisermos passar o número para um valor binário, devemos fazer sucessivas divisões até que o quociente chegue a um valor indivisível, e após chegar a um valor não divisível deve-se selecionar os valores do resto das divisões. Se quisermos passar um número decimal para Hexadecimal, deve-se seguir os mesmos passos de como foi feito em binário, entretanto deve-se fazer a divisão por 16. Os cálculos para o valor octal segue a mesma base, apenas mudando o divisor por 8
Base Binária |
Base Hexadecimal |
Base Octal |
Descrição do procedimento utilizado
Para a construção do circuito que será responsável pela leitura de um caractere a partir do monitor serial, iremos utilizar os seguintes componentes:
1 Potenciômetro 10KΩ;
1 Protoboard;
1 Arduino UNO;
1. Primeiramente devemos ligar a entrada GND no polo negativo da protoboard e a entrada de 5V no polo positivo da proboboard:
2. Após ter feito isso devemos posicionar o Potenciômetro na protoboard e ligar o terminal 2 no polo negativo e o terminal 1 no polo positivo:
3. Logo em seguida, para finalizar o circuito devemos ligar o terminal restante (meio) em uma entrada analógica (A escolhida foi A0):
Agora devemos partir para a programação responsável pela leitura do caractere e por sua conversão em seus valores correspondentes com base na tabela ASCII.
Primeiro devemos declarar a variável responsável por iniciar a porta serial
void setup() {
Serial.begin(9600);
}
Em seguida dentro do void loop iremos declarar algumas variáveis de leitura e conversão do valor lido.
void loop() {
char leitura = Serial.read(); //Leitura a partir do teclado
int sensorValue = analogRead(A0); //Leitura da porta analógica
int con = map(sensorValue,0,1023,0,255);//Conversão para 8 bits
float potenciometro = (5.0 * sensorValue)/1023;//Converte para volts o valor lido pelo potenciômetro
A variável leitura será a responsável pela leitura do caractere a partir do monitor serial.
A variável sensorValue sensor será responsável por ler a porta analógica A0.
A variável con será a responsável por converter para 8 bits (0 a 255)os valores lidos originalmente em 10 bits (0 a 1023).
A variável potenciometro será responsável pela conversão para volts do valor lido pela porta A0. Portanto a tensão pode ser variada pelo potenciômetro.
Ainda dentro do loop, iremos fazer a parte de impressão e conversão para Decimal, Hexadecimal, Binário e Octal do caractere lido.
//Imprime os caracteres lidos pelo teclado
Serial.print (leitura,DEC);//Imprime o valor Decimal do caractere de acordo com a tabela ASCII
Serial.print (" ");
Serial.print (leitura,HEX);//Imprime o valor Hexadecimal do caractere de acordo com a tabela ASCII
Serial.print (" ");
Serial.print (leitura,OCT);//Imprime o valor Octal do caractere de acordo com a tabela ASCII
Serial.print (" ");
Serial.print (leitura,BIN);//Imprime o valor Binário do caractere de acordo com a tabela ASCII
Perceba que no final da variável leitura (responsável pela leitura do caractere) utilizou-se as abreviações DEC para decimal, HEX para Hexadecimal, OCT para octal e BIN para binário. Fazendo isso na linguagem do arduino, o valor é automaticamente convertido a partir da tabela ASCII, sem que precisemos realizar contas.
E por fim, iremos imprimir (também convertidos para DEC e BIN) os valores da tensão do potenciômetro
//Imprime o valor da ddp convertida
Serial.print (" || ");
Serial.print (con);//Imprime o valor convertido para 8 bits a partir da tensão do potenciômetro
Serial.print (" ");
Serial.print (con,DEC);//Imprime o valor Decimal da tensão do potenciometro
Serial.print (" ");
Serial.println (con,BIN);//Imprime o valor Binário da tensão do potenciometro
delay (1000);
Link Tinkercad:
https://www.tinkercad.com/things/8exiZgffTh3
Com relação a conversores, há muito mais para se falar. Acerca de resoluções, por exemplo. Desenvolvemos em sala de aula a visualização de resoluções para diferentes conversores variando de 3 a 5 bits. Este é um conceito importante e que deve ser abordado.Mostrar estas resoluções e os seus significados. Neste resumo ficou um pouco confuso o que é um conversor AD e o significado de código ASCII . Façam uma separação destas informações. Elas tem significado distintos . Questões do tipo.. O que é um conversor AD e como varia sua resolução. A partir da conversão AD como podemos representar este decimal em diferentes bases . O que é um sistema de numeração e as suas bases? Como transitar entre estas bases? etc
ResponderExcluirPostagens paralisadas... Isso compromete a nota de P2. E preciso ter uma dedicação continua. Uma divisao de trabalhos na equipe de modo que as postagens nao fiquem defasadas
ResponderExcluirA semana passada inteira foi para arrumar os pontos dos quais a senhora mencionou que precisavam de ajustes, isso nos consumiu muito tempo e agora estamos focados para finalizarmos o relatório.
ExcluirVocê poderá notar que em todas as postagens na semana passada foram adicionados novos estudos e vídeos dos experimentos.
para 10 bits 2^10 frases binarias = 1024 , decimal varia de 0 a 1024
ResponderExcluir