Burga
13.11.2011, 17:38
Hallo,
ich habe leider ein kleines Problem mit meinem MCP4922.
Die Ansteuerung per SPI funktioniert, aber aus irgendeinem Grund ergeben die Daten die ich dem DAC sende nicht die richtigen Spannungen.
Hier mein Bascom-Code
$regfile = "m32def.dat"
$framesize = 40
$swstack = 32
$hwstack = 32
$crystal = 8000000
$baud = 19200
Enable Interrupts
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 ' zum debuggen
Config Portd.7 = Output
Dim Spioutput As Word
Dim Dacdata As Word
Dim I As Word
I = 0
Portd.7 = 0
Spioutput = 0
Dacdata = 0
'Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 64 , Noss = 0
'testweise auf Softspi umgestellt, kein Unterschied
Config Spi = Soft , Din = Pinb.6 , Dout = Portb.5 , Ss = Portb.2 , Clock = Portb.7 , Mode = 3 , Ss = None
Spiinit
Do 'Main
For I = 0 To 4095 ' entspricht &B0000_0000_0000_0000-0000_1111_1111_1111
Dacdata = I
Spioutput = 12288 + Dacdata ' 12288 entspricht &B0011_0000_0000_0000
' also GN=1(Vref*1) und SHDN auf 1 (disabled)
Waitms 200 ' damit man die Änderungen auch sehen kann
Portd.7 = 0
Waitus 20
Spiout Spioutput , 2
Waitus 20
Portd.7 = 1
Waitus 20
Next I
Loop
'erwartet wird eine Sägezahnkurve von GND-5V
Hier das genaue Problem :
An den VoutA ist eine LED mit Vorwiderstand angeschlossen. Diese fadet zwar, allerdings viel zu schnell und mit grossen Helligkeitssprüngen. Gebe ich "Spioutput" auf der seriellen Schnittstelle aus, so fällt auf das die LED noch innerhalb der FOR schleife aus und angeht, wobei die Intervalle unterschiedlich lange sind.
Ich werde das Gefühl nicht los das mein Datenformat für den DAC nicht stimmen (also die 12 Bit).
Vielleicht seht ihr ja mehr als ich.
MfG
Burga
ich habe leider ein kleines Problem mit meinem MCP4922.
Die Ansteuerung per SPI funktioniert, aber aus irgendeinem Grund ergeben die Daten die ich dem DAC sende nicht die richtigen Spannungen.
Hier mein Bascom-Code
$regfile = "m32def.dat"
$framesize = 40
$swstack = 32
$hwstack = 32
$crystal = 8000000
$baud = 19200
Enable Interrupts
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 ' zum debuggen
Config Portd.7 = Output
Dim Spioutput As Word
Dim Dacdata As Word
Dim I As Word
I = 0
Portd.7 = 0
Spioutput = 0
Dacdata = 0
'Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 64 , Noss = 0
'testweise auf Softspi umgestellt, kein Unterschied
Config Spi = Soft , Din = Pinb.6 , Dout = Portb.5 , Ss = Portb.2 , Clock = Portb.7 , Mode = 3 , Ss = None
Spiinit
Do 'Main
For I = 0 To 4095 ' entspricht &B0000_0000_0000_0000-0000_1111_1111_1111
Dacdata = I
Spioutput = 12288 + Dacdata ' 12288 entspricht &B0011_0000_0000_0000
' also GN=1(Vref*1) und SHDN auf 1 (disabled)
Waitms 200 ' damit man die Änderungen auch sehen kann
Portd.7 = 0
Waitus 20
Spiout Spioutput , 2
Waitus 20
Portd.7 = 1
Waitus 20
Next I
Loop
'erwartet wird eine Sägezahnkurve von GND-5V
Hier das genaue Problem :
An den VoutA ist eine LED mit Vorwiderstand angeschlossen. Diese fadet zwar, allerdings viel zu schnell und mit grossen Helligkeitssprüngen. Gebe ich "Spioutput" auf der seriellen Schnittstelle aus, so fällt auf das die LED noch innerhalb der FOR schleife aus und angeht, wobei die Intervalle unterschiedlich lange sind.
Ich werde das Gefühl nicht los das mein Datenformat für den DAC nicht stimmen (also die 12 Bit).
Vielleicht seht ihr ja mehr als ich.
MfG
Burga