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:
MCP4822 - Formatando os bits
Exemplos de bits e bytes para o uso com o DAC:
========================================================
Gravando DAC A com o valor de saida 0V ( fundo de escala 2,048V) :
0011 0000 0000 0000 = hexa 30 00
Gravando DAC A com o valor de saida 1,024V ( fundo de escala 2,048V) :
0011 0011 1111 1111 = hexa 33 FF
Gravando DAC A com o valor de saida 2,048V ( fundo de escala 2,048V) :
0011 1111 1111 1111 = hexa 3F FF
=========================================================
Gravando DAC B com o valor de saida 0V ( fundo de escala 4,096V) :
1001 0000 0000 0000 = hexa 90 00
Gravando DAC B com o valor de saida 2,048V ( fundo de escala 4,096V) :
1001 0011 1111 1111 = hexa 93 FF
Gravando DAC B com o valor de saida 4,096V ( fundo de escala 4,096V) :
1001 1111 1111 1111 = hexa 9F FF
MCP4822 - usando com o Arduino UNO:
Veja a biblioteca mcp48X2.h. Ela será usada para configurar o chip.
SPI_mode, velocidade da transmissão, DAC A ou B, ganho, etc.
https://github.com/mirdej/Arduino/blob/master/libraries/DAC_MCP48X2...
Esse é o Sketch para uso do MCP4822. Temos que testa-lo:
https://github.com/mirdej/Arduino/blob/master/MCP4822/MCP4822.ino
Interessante verificar a Biblioteca spi.h :
https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr...
Weider no meu caso, o DAC que tenho é o MCP4922.
A única diferença é que ele usa tensão de referência externa.
Eu encontrei esses Sketches bem interessantes. Talvez com algumas adaptações, você poderá usar com o MCP4822.
https://github.com/chipaudette/ArduinoWaveTableSynth/blob/master/wa...
https://github.com/wigman27/Tutorial-Using-Arduino-SPI/blob/master/...
Essa é a montagem de teste que farei para o meu DAC MCP4922.
Ele usa as tensões de referências externas tanto para o DAC A quanto para o DAC B.
O chip MCP1541 fornecerá a tensão de referência de 4,096V.
MCP4922 - registradores
O MCP4922 tem alguns pinos e registradores a mais.
O pino - SHDN é usado para desabilitar todos os DACs
( se -SDHN = 5V , eles poderão ser desativados seletivamente através do registrador)
-SHDN = 0V => DACs desabilitados
-SHDN = 5V => DACs Ativos
O registrador BUF é usado para habilitar um buffer na entrada da Tensão de Referência.
Se o BUF for ativado, existirá uma grande impedância nas entradas dos pinos VREF.
Bit 15 1 => grava DAC B
0 => grava DAC A
Bit 14 Entrada VREF com buffer (BUF)
1 => com buffer
0 => sem buffer
Bit 13 ganho de saída (GA)
1 => ganho 1X (VOUT = VREF * D/4096)
0 => ganho 2X (VOUT = 2 * VREF * D/4096)
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)
Zé gustavo,
Como sempre muito obrigado pela ajuda.
Comecemos pelo mcp4725, você tá certo, cada modulo tem somente um conversor DAC, e que tem que setar o pino A0 em high ou low pra poder colocar até 2 por barramento I2C.
Porem, descobri que dá pra meter na verdade até 4 e não 2, desde que se use dois da Adafruit e 2 da Sparkfun, a razão é que os da sparkfun são setados nos endereços 0x60 e 0x61 e os da adafuit nos endereços 0x62 e 0x63.
Mas mesmo assim estou achando isso muito limitativo, acho que vou apostar mais fortemente no estudo do 4822, ao qual não vi limitações ainda.
Bem, com relação ao MCP4822 eu dei uma busca usando uns truquezinhos do google em toda github e encontrei diversas bibliotecas pra ele, vou começar a testar e comento os resultados.
Só mais uma duvida: você cita vários outros modelos de conversores DAC, qual foi a diferença que você percebeu entre eles?
Boas notícias !
Já testei o meu MCP4922 com sucesso !
https://github.com/wigman27/Tutorial-Using-Arduino-SPI/blob/master/...
Usei esse programa, fiz pequenas alterações e traduzi os comentários.
Anexei o arquivo alterado e funcionando OK ! MCP4922WigA.ino
Pode usar esse mesmo programa alterado por mim no seu MCP4822. Deve funcionar.
Se não funcionar me avise, que a gente faz as correções.
Só um pequeno detalhe - o meu DAC esta apresentando um erro de 2 mV (isso é muito pouco).
Creio que deve ser devido à linearidade da curva do DAC.
Mas dá para corrigir a tensão de saída enviando um valor menor ou maior de 2 mV.
Bom demais !
Seria interessante (se você concordar) alterar o nome do tópico para
Tutorial Arduino - uso de conversores DAC 12 bits - interface SPI
adicione por favor as tags - mcp4922, mcp4822, conversor, dac, spi, 12 bits
Obrigado e abraços !
MCP4922 - Integral non Linearity
Veja a tabela do MCP4922. O Datasheet mostra que essa variação de +- 2 bits LSB é normal !
No meu caso corresponde aos 2 mV.
Para eu conseguir 500 mV eu enviei o valor de 498. E para conseguir 1500 mV eu enviei 1502.
Veja que na curva pode-se aumentar ou diminuir 2 mV.
Matei a cobra e mostrei o pau ! KKKKKK
Parabens grande Zé gustavo, só tô vendo agora e noite e todo meu material tá la no trabalho, amanha mesmo eu vou montar e testar.
Fiz as mudanças no topico como você pediu, infelizmente como o forum do Lab de garagem é rotativo, logo, logo, ele sai das primeiras paginas e ai só na busca, mas coloquei as tags e tudo que você sugeriu.
Outra coisa, como estava sem meu material(Cis), hoje eu aproveitei pra fazer o teste da conversão PWM com filtro RC, porem, alterando a frequência do PWM do arduino.
Primeiramente fiz um teste com componentes normais e sem mexer em nada de configuração do arduino, o resultado foi sofrível, oscilou bastante, e não apresentou muita precisão.
Porem, quando fiz o teste usando um resistor de precisão de 10k e um capacitor de 10uF, e utilizando o pino 5 do arduino com a frequencia de PWM alterada para 65Khz (ao inves dos tradicionais menos de 900hz), rapaz, o resultado foi de impressionar, baita estabilidade, precisão incrível, ainda que obviamente com uma perda mínima, mas o resultado foi de cair o queixo.
Mas te fiz uma pergunta e você não respondeu: entre os modelos de DAC que você testou, você percebeu alguma diferença entre eles?
Amanhã, vou colocar o MCP4822 pra funcionar e comparar os métodos.
Boa noite, Weider.
Obrigado por ter alterado o título. Vamos ver se o Marcelo acrescenta esse tópico na lista de Tutoriais.
Eu ainda não testei os outros DACs.
Mas quanto maior o numero de bits, maior será a precisão da tensão de saída.
Luis Farias, uma matriz R2R tem baixa precisão.
A precisão vai depender dos valores dos resistores. E outra desvantagem, cada bit usará um pino do Arduino.
Não dá para fazer um DAC de 12Bits com Arduino. Somente se usar um outro chip adicional como registrador.
Não aprecio esse tido de DAC.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por