12/16/18-Bit AD-Wandlung mit MCP3424
Wem die 10Bit-Auflösung der in ATMEGA-Prozessoren integrierten AD-Wandler nicht genügt, der findet vielleicht in dem via I2C ansprechbaren MCP3424 von Fa. MICROCHIP den richtigen Baustein. Seine 4 Eingangskanäle verarbeiten Spannungen im Bereich von -2.048V bis +2.048V, wobei aber über zusätzliche Spannungsteiler natürlich auch eine Anpassung an beliebige größere Werte möglich ist.
DATENBLATT: http://ww1.microchip.com/downloads/en/De...22088c.pdf
Für erste Versuche ist z.B. der Baustein "AP2" ( Analog Plug2 ) von Fa. Jeelabs in den Niederlanden geeignet. Hier befindet sich der MCP3424 auf einer kleinen Zusatzplatine und lässt sich somit sehr einfach einsetzen.

Baustein "Analog Plug2" bzw. "AP2"
Je nach Beschaltung der sechs unteren Lötpins ( Ports A0 und A1 ) lassen sich verschiedene Chipadressen anwählen. Bei Verwendung der im unten folgenden Programmbeispiel benutzten Adresse ist hier KEINE Beschaltung erforderlich.
Mehr zu diesem Baustein und seinem Bezug findet man hier:
http://news.jeelabs.org/docs/ap2.html
http://news.jeelabs.org/2009/11/25/meet-...alog-plug/
http://shop.jeelabs.com/products/analog-plug
Für erste Tests habe ich das unten stehende kleine BASCOM-Programm geschrieben. Dabei wird zur Zeit allerdings nur der Kanal 1 mit 16Bit-Auflösung ausgewertet. Als Ergebnis stehen Spannungswerte in Volt zur Verfügung. Über den seriellen UART-Ausgang werden sie im Sekundentakt mit 9600bit/s ausgegeben. Eine Anpassung bzw. Erweiterung des Programmschnipsels an eigene Bedürfnisse ist natürlich jederzeit leicht möglich.

Beschaltung des Analog Plugs "AP2"
Klaus
Anhang:
'MCP3424_AT8_1 getestet am 5.2.2010
'###############################################
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
Dim Msb As Integer
Dim Lsb As Integer
Dim Value As Integer
Dim Volt As Single
Dim Volt_str As String * 6
Config Scl = Portb.0
Config Sda = Portb.1
I2cinit
Const Addressw = &B11010000 '0xD0 slave write address
Const Addressr = &B11010001 '0xD1 slave read address
Do
'config AD-Wandler Ch.1; cont; 16bit; gain=1
'-------------------------------------------------------------------
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte &H18 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds
'read data
'-------------------------------------------------------------------
I2cstart 'generate start
I2cwbyte Addressw 'slave address
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Msb , Ack 'read byte
I2crbyte Lsb , Nack 'read byte
I2cstop 'generate stop
Waitms 10
'Print Msb ; " " ; Lsb
Msb = Msb * 256
Value = Lsb + Msb
'Print Value
Volt = Value * 62.5
Volt = Volt / 1000000
Volt_str = Str(volt)
Volt_str = Left(volt_str , 6)
Print Volt_str ; "V"
Wait 1
Loop
End