Forum: Mikrocontroller und Digitale Elektronik MCP4922 SPI Datenübertragung klappt nicht


von Jan (Gast)


Lesenswert?

Hallo zusammen,
ich weiß nicht mehr weiter, kann mir vllt jemand helfen? Versuch mit dem 
MCP4922 eine Analoge spannung auszugeben aber es scheitert an der SPI 
übertragung.

Programm bis jetzt:

Pinclock Alias Portb.7
Pin Alias Portb.5
Config Portd.7 = Output
Config Portb.6 = Output

CS Alias Portd.7
CS = 1
Ldac Alias Portb.6
LDAC = 1

Dim X As Byte
X = 255

Do
CS = 0
Shiftout Pin , Pinclock, X , 1
Ldac = 0
Ldac = 1
CS = 1
Waitms 10
loop

kann mir jemand sagen was ich falsch mache?
mfg

von Rainer U. (r-u)


Lesenswert?

Ldac zu kurz gesetzt?

Ansonsten guck mal ob Daten rauskommen - setz mal X=55(hex), laß die 
waitms 10 weg, miß die Spannung am Pin (ggf. mit Widerstand und 
Kondensator glätten) / sollte knapp die Hälfte der Betriebsspannung 
rauskommen. Oder einfacher mit dem Oszi gucken, ob Clock und Daten 
'rauskommen / sofern vorhanden.

von Jan (Gast)


Lesenswert?

Ok, hab jetzt

Do
CS = 0
Shiftout Pin , Pinclock, X , 1
Ldac = 0
Waitms 5
Ldac = 1
CS = 1
loop

Am Mosi messe ich 2,60V wenn ich 55Hex ausgeben, das sollte also 
hinkommen.
Trotzdem klappt es nicht,
Hab den Aref auf 5V gelegt, verdrahtung hab ich auch schon öfters 
überprüft...
mhh weiß sonst jemand ne fehler möglichkeit?

von Jan (Gast)


Lesenswert?

außerdem ist derm mcp4922 ja ein 12-bit dac, kann es daran liegen das 
nur 1 byte geschrieben wird? außerdem hat er ja 2 ausgänge, vllt sogar 4 
byte schreiben?

von Jan (Gast)


Lesenswert?

$regfile = "m32def.dat"                                     ' specify 
the used micro
$crystal = 8000000                                          ' used 
crystal frequency
$baud = 4800

Config Spi = Soft , Din = None , Dout = Portb.5 , Ss = None , Clock = 
Portb.7
Config Portd.7 = Output

Portd.7 = 1


Dim Var(4) As Byte

Var(1) = &B00001111
Var(2) = &B11111111
Var(3) = &B00001111
Var(4) = &B11111111
Spiinit

Do
Portd.7 = 0
Spiout Var(1) , 4
Portd.7 = 1                                                 'send 1 byte
Waitms 10


Jetziger Code
Loop

von Jan (Gast)


Lesenswert?

Weiß keiner ne Antwort?
mfg

von Rainer U. (r-u)


Lesenswert?

poste doch mal das Datenblatt..

von Jan (Gast)


Lesenswert?


von urlaub (Gast)


Lesenswert?

du mußt immer 2 byte senden. auf seite 18 steht,was Du dabei mit den 
oberen 4 bit machen sollst.

von Jan (Gast)


Lesenswert?

alles klar, das war den springende punkt, danke :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.