Professional Documents
Culture Documents
UBERLÂNDIA
FACULDADE DE ENGENHARIA
ELÉTRICA - FEELT
LASEC
CONVERSOR A/D
FEELT
Sumário
BeagleBone Black
No início do processo de conversão o shift register e o holding register são zerados. Na primeira
etapa de conversão o MSB do holding register é colocado em nível alto ( 1 ) e os demais
mantidos em nível baixo ( 0 ). Na sequência, o resultado de saída do conversor DAC (VAX) é
comparado com o sinal de entrada (VA). Se VAX < VA, o nível “1” é mantido para o MSB, caso
contrário é substituído por ( 0 ). A etapa seguinte repete o mesmo processo para o próximo bit
menos significativo. A decisão de manter o nível lógico ( 1 ) ou substituir por ( 0 ) é realizada
pelo comparador e pela lógica de controle até que todos os N bits tenham sido verificados.
Vx Conversão
concluída
12
11
10
9
8
Volts
0
t0 t1 t2 t3 t4 t5 t6 Tempo
INÍCIO
Faz bit = 1
Não Todos os
Vá para o próximo bits foram
bit menos significativo verificados?
Sim
A conversão
está completa
e o resultado está
no REGISTRADOR
FIM
Criar uma conexão utilizando o PuTTY ou com o comando ssh, como mostrado a seguir:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
45:79:10:4a:2c:3c:ff:be:92:d5:18:f7:e2:41:80:8e.
Please contact your system administrator.
Add correct host key in /home/ufu/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/ufu/.ssh/known_hosts:1
remove with: ssh-keygen -f "/home/ufu/.ssh/known_hosts" -R 192.168.7.2
RSA host key for 192.168.7.2 has changed and you have requested strict checking.
Host key verification failed.
Execute o comando proposto:
Este exemplo tem como objetivo mostrar como configurar e utilizar o conversor analógico
digital do microprocessador am3359. Um potenciômetro de 4k7 foi ligado nos pinos P9.32
(VDD_ADC de 1.8V), P9.34 (GNDA_ADC) e P9.39 (AIN0) para que a tensão no pino P9_39
possa variar de 0 a 1,8V.
5V
1 2 1 2
P9 P8
eMMC
am3359
5k
P9 .3 2
P9 .3 4
HDMI
A IN0
P9 .3 9
45 46
USB 45 46
OBS: Na distribuição do Debian para BeagleBone Black, o editor gedit não vem instalado.
Sendo assim, utilize o editor nano ou tea
Execute o editor gedit, copie (Ctrl + C) o código do arquivo AD.c e cole-o no editor. Em
seguida, salve-o e saia do editor. Se preferir, copie o código a partir do arquivo AD.c
disponibilizado junto com esta apostila em:
https://mega.nz/#F!44kgjIgR!ivdR7Yta0sSRxZolNAeoMA
AD.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int fd;
char buf[MAX_BUF];
char ch0[5];
while(1)
{
snprintf(buf, sizeof(buf), SYSFS_ADC_DIR "/in_voltage%d_raw", 0);
fd = open(buf, O_RDONLY);
read(fd, ch0, 4);
printf("Valor do AD é: %d\n", atoi(ch0));
close(fd);
usleep(1000000);
}
return 0;
}
Execute o editor gedit, copie (Ctrl + C) o código do arquivo Makefile e cole-o no editor. Em
seguida, salve-o e saia do editor. Se preferir, copie o código a partir do arquivo Makefile.txt
disponibilizado junto com esta apostila.
Makefile
comp:
gcc AD.c -o AD
clean:
rm -rf AD
run:
./AD
Para que o pino P9_39 possa ser utilizado como entrada analógica AIN0, é necessário carregar
o Device Tree com as devidas configurações. Para que estas configurações sejam carregadas
durante a inicialização, localize a pasta BEAGLEBONE, edite o arquivo uEnv.txt (para editar
dê um duplo clique sobre o arquivo) e acrescente os seguintes comandos:
Na sequência, salve o arquivo e ejete a BeagleBone Black, como mostrado na figura abaixo:
OBS: Quando a BeagleBone não é ejetada as modificações salvas poderão ser perdidas...
Neste exemplo, o conversor analógico digital é lido por meio de uma função denominada
Execute o editor gedit, copie (Ctrl + C) o código do arquivo AD2.c e cole-o no editor. Em
seguida, salve-o e saia do editor. Se preferir, copie o código a partir do arquivo AD2.c
disponibilizado junto com esta apostila em:
https://mega.nz/#F!44kgjIgR!ivdR7Yta0sSRxZolNAeoMA
AD2.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
close(fd);
return atoi(ch);
}
//--------------------------------------------------------------------------
int main()
{
int valorAD=0;
while (1)
{
valorAD = adc_read(0);
printf("Valor do AD é: %d\n", valorAD);
usleep(1000000);
}
return 0;
Execute o editor gedit, copie (Ctrl + C) o código do arquivo Makefile e cole-o no editor. Em
seguida, salve-o e saia do editor. Se preferir, copie o código a partir do arquivo Makefile.txt
disponibilizado junto com esta apostila.
Makefile
comp:
gcc AD2.c -o AD2
clean:
rm -rf AD2
run:
./AD2
Assim, o valor da entrada analógica AIN0 pode ser obtida utilizando-se o comando cat, como
indicado a seguir:
Arduíno
O diagrama de blocos do conversor A/D é exibido pode ser encontrado na página 238 do manual
disponibilizado junto com as apostilas.
OBS: De acordo com o manual do fabricante, o registrador ADCL deve ser lido primeiro, para
que o acesso aos registradores de dados do ADC não seja bloqueado antes da leitura do
registrador ADCH.
Bit 4 – ADIF: ADC Interrupt Flag: Este bit assume nível lógico 1 quando a conversão termina
e o registrador de dados é atualizado.
Quando os bits deste registrador são colocados em nível lógico 1, o buffer digital de entrada
correspondente a um determinado pino do A/D é desabilitado.
A/D
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
int ad = 0;
int temp = 0;
char snum[10];
void ad_init(void)
{
// The recommended clock for the Atmega328 10 bits A/D converter is between 50KHz and 200 KHz.
// So, the only possible value is 128.
// 16 MHz / 2 = 8 MHz
// 16 MHz / 4 = 4 MHz
// 16 MHz / 8 = 2 MHz
// 16 MHz / 16 = 1 MHz
// 16 MHz / 32 = 500 kHz
// 16 MHz / 64 = 250 kHz
// 16 MHz / 128 = 125 kHz
int main(void)
{
while (1)
{
ad = ADCL; // ADCL must be read first, then ADCH
ad = (ADCH << 8) + ad;
printf("O valor do A/D %c: %d\r\n", 233, ad);
_delay_ms(1000);
}
return 0;
}
Com o kit Arduíno conectado ao Notebook ou PC, verifique se em Ferramentas -> Placa: o
kit adequado está selecionado.
Em Ferramentas -> Porta: verifique se a porta adequada está selecionada, como mostrado
abaixo:
Para salvar, compilar e realizar o upload do código para o kit Arduíno, clique em
Apostilas: https://mega.nz/#F!44kgjIgR!ivdR7Yta0sSRxZolNAeoMA
ufu@SE:~$ cd Arduino/
ufu@SE:~/Arduino$ cd AD
ufu@SE:~/Arduino/AD$ ino build
ufu@SE:~/Arduino/AD$ ino upload
Em seguida, abra outro terminal e execute o comando arduino, como mostrado a seguir:
ufu@SE:~$ arduino
Para abrir a janela do Serial Monitor, pressione (Ctrl + Shift + M) ou utilize o menu, como
indicado a seguir:
O resultado esperado é:
Programa Exemplo do AD
AD.c
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include "uart.h"
int ad = 0;
int temp = 0;
char snum[10];
void ad_init(void) {
// The recommended clock for the Atmega328 10 bits A/D converter is between 50KHz and 200 KHz.
// So, the only possible value is 128.
// 16 MHz / 2 = 8 MHz
// 16 MHz / 4 = 4 MHz
// 16 MHz / 8 = 2 MHz
// 16 MHz / 16 = 1 MHz
// 16 MHz / 32 = 500 kHz
// 16 MHz / 64 = 250 kHz
// 16 MHz / 128 = 125 kHz
int main(void) {
while(1) {
ad = ADCL; // ADCL must be read first, then ADCH
ad = (ADCH << 8) + ad;
printf("O valor do A/D %c: %d\r\n", 233, ad);
_delay_ms(1000);
}
return 0;
}
www.omegaflix.com