mikrocontroller.net

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


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer Unsinn (r-u)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß keiner ne Antwort?
mfg

Autor: Rainer Unsinn (r-u)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
poste doch mal das Datenblatt..

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: urlaub (Gast)
Datum:

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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles klar, das war den springende punkt, danke :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.