Segue abaixo as pesquisas e descobertas do Grande José gustavo, sobre conversores DA ( digital para analogico ) ao qual temos a honra de compartilhar.
Esse topico esta se referindo aos conversores DA que se comunicam via SPI, os que se comunicam por outros protocolos como I2C ficarão em aberto.
Tags:
ninguem?
Boa noite Weider , tenho os seguintes componentes, mas não os testei ainda.
MCP4922 12-Bit DAC with SPI
MCP3201 12bit ADC - SPI interface
MCP3204 4 CH 12bit ADC - SPI interface
MCP3551 22 bit Delta sigma ADC
ADS7822P 12 bits 200 KHz ADC
Seu DAC MCP4822: Dual 12-Bit Voltage Output DAC ( são dois DACs em um chip).
http://ww1.microchip.com/downloads/en/DeviceDoc/22249A.pdf
Esse usa a interface SPI.
Interessante que ele tem uma tensão de referencia interna de 2,048V.
Ele é um pouquinho mais rápido do que o outro - fast settling time 4,5us.
Achei alguma coisa para os dois :
https://github.com/mirdej/Arduino
O DAC MCP4725 é unico (12bits DAC) e usa a interface I2C.
http://ww1.microchip.com/downloads/en/DeviceDoc/22039d.pdf
Veja esse tutorial para o MCP4725 :
https://learn.adafruit.com/mcp4725-12-bit-dac-tutorial/using-with-a...
Esse tutorial é sobre DAC, se deseja consultar mais sobre ADC, favor abrir um novo tópico.
Você quer medir frequencia ou quer visualizar a forma de onda ?
Li numa referência da Tektronix sobre osciloscópio digitais que a frequencia de amostragem (sample rate) deve ser no mínimo 5 vezes a frequencia medida.
5 x 500 Khz = 2,5 Mhz
Você precisará de um ADC com no mínimo 2,5 Mega samples/seg.
Vamos por partes. Vou aproveitar e testar o meu DAC também.
A unica diferença do meu MCP4922 é que ele usa referência externa de tensão.
MCP4922 :
http://ww1.microchip.com/downloads/en/DeviceDoc/22250A.pdf
Vamos precisar de entender com funciona a interface SPI no Arduino.
Referencias sobre SPI :
http://labdegaragem.com/profiles/blogs/tutorial-comunica-o-spi-seri...
https://learn.sparkfun.com/tutorials/serial-peripheral-interface-sp...
Biblioteca SPI
https://www.arduino.cc/en/Reference/SPI
Pinos da Interface SPI ( que vamos usar)
Master(Mestre) é o Arduino e Slave (escravo) é o DAC.
Essa é a minha sugestão de montagem do DAC - para efeito de testes :
(usei o programa ExpressSCH para desenhar o diagrama - http://www.expresspcb.com/expresssch )
O Datasheet recomenda o uso desses capacitores C1 e C2 no pino VDD para eliminar ruidos da fonte.
O pino Latch DAC input (-LDAC) é usado para transferir os dados dos registradores internos para os dois DACs. Se esse pino for aterrado, os dados serão transferidos na borda de subida do pino -CS.
Alimente o DAC com +5V ( o máximo é 6V ! ) .
Conectei os resistores R1 e R2 nas saídas dos dois DACs, somente para efeito de teste. Qual será o uso dessas saídas ?
Estava pensando sobre o uso do pino LDAC.
Ele poder ser util se você precisar que os dois DACs liberem as tensões ao mesmo tempo. (sincronizados).
Pois se aterrar o pino LDAC, um DAC será carregado e depois no próximo ciclo de gravação, o outro DAC será carregado.
Informações importantes sobre o MCP4822 ( obtive no DataSheet)
O tempo para o DAC gerar a tensão de saída (settling time) é de 4,5us. Portanto é preciso um intervalo de tempo entre o envio de um valor e de outro. Minha sugestão é que tenha um delay de 5 us no mínimo.
Os amplificadores nas saídas dos DACs podem ter o ganho de 1X ou 2X - selecionável. Por isso a tensão de fundo de escala pode ser 2,048V ou 4,096V. Bem interessante isso ! Mas nunca igual a tensão de alimentação VDD (5V).
A Microchip afirma que esses DACs tem grande precisão e performance com baixo ruído.
Pelo que eu entendi os pinos de entrada são compatíveis com o Arduino Uno (5V) e com o Arduino Due ou Mega (3,3v).
Como o DAC tem 12 bits ( 2 elevado a 12 = 4096) :
Se o ganho for 1X - o bit LSB terá a tensão de 0,5 mV ( 2,048 V /4096 = 0,0005 V )
Se o ganho for 2X - o bit LSB terá a tensão de 1,0 mV ( 4,096 V /4096 = 0,001 V )
Zé gustavo,
Cara, você é incrivel, muito obrigado.
Curiosamente andei lendo sobre comunicação SPI vs I2C, elas são bem parecidas, tendo como diferença que na SPI a indicação do escravo a ser comunicado é dado via pino fisico, enquanto que na I2C é por codigo.
De inicio eu achava que SPI fosse mais facil , mas descobri que a bibliografia existente para biblioteca wire que já tem no arduino, a comunicação I2C é que é mais facil, já a SPI tudo que é exemplo que estou achando é muito direcionado.
Vou dar uma olhada em bibliotecas especificas para o MCP4822, até agora as coisas que vi utilizando SPI acabem sendo mais facil atraves de bibliotecas especificas, é o caso dos radios NRF24L01 que utilizam o SPI, e que podem ser programados na unha, porem, as bibliotecas implementaram recursos e facilidades que seria muito dificil conseguir via codigo puro, como por exemplo fazer o NRF24L01 transmitir audio (ainda não estudei, mas tá na pauta kkk )
Amanhã tem mais ....
Boa noite !
Zé uma duvida que coloquei no enunciado, mas que gostaria de aprofundar pra ver se voce consegue me ajudar.
Na page https://learn.adafruit.com/mcp4725-12-bit-dac-tutorial/using-with-a... se lê: First, be sure to call begin(addr) where addr is the i2c address (default is 0x62, if A0 is connected to VCC its 0x63)
Ou seja, esses modulos MCP4725 que são setados via software no padrão I2C, tem dois DAC em cada modulo, o primeiro para ser chamado usa-se o endereço 0x62 e o segundo 0x63.
Ai fica a duvida: E se eu quiser usar outros modulos MCP4725, como vou chamar eles ?
Não é bem assim. Como eu já havia dito, o MCP4725 possui somente um DAC.
Como ele tem um pino A0 de endereçamento, somente dois chips MCP4725 poderão ser conectados no mesmo barramento (BUS) da interface I2C.
Se o pino A0 for isolado = endereço será 0x62
Se o pino A0 for conectado no 5V = endereço será 0x63
O Datasheet especifica que internamente tem mais dois registradores de endereçamento.
Mas deve ser requisitada uma gravação diferente para a Microchip.
" The choice of A2 and A1 bits are provided by the customer as part of the ordering process. These bits are then programmed (hard-wired) during manufacturing"
Se precisar usar vários MCP725 com o seu Arduino, terá que usar um chip adicional para fazer o endereçamento dos mesmos. Ou criar outros barramentos I2C virtuais.
Informações importantes sobre a interface SPI do MCP4822 ( obtive no DataSheet)
Esse chip suporta SPI mode 0,0 e SPI mode 1,1.
Comandos e dados são enviados pelo pino SDI. Os dados são enviados na borda de subida do sinal SCK.
A comunicação é unidirecional, portanto o Arduino só poderá enviar os dados, não conseguirá ler os dados do DAC.
O pino -CS deve ser mantido no nível baixo ( zero volts) enquanto os dados são gravados no DAC.
O comando de Write(gravação) consiste de 16 bits, que são usados para configurar os registradores de dados e controle.
Registradores do MCP4822:
Bit 15 1 => grava DAC B
0 => grava DAC A
Bit 14 não é usado
Bit 13 ganho de saída (GA)
1 => ganho 1X (fundo de escala 2,048V)
0 => ganho 2X (fundo de escala 4,096V)
Bit 12 SHDN - controle de desativação de saída
1 => VOUT ativo
0 => VOUT desabilitado
Bits 11 até 0 => 12 bits do DAC ( mais significativo para o menos significativo)
Essa é a carta de tempo da comunicação SPI do MCP4822 :
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por