Forum: Mikrocontroller und Digitale Elektronik SPI Anschluss von zwei MCP4922 an einen Mega32


von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

Hallo zusammen,

befasse mich erstmalig mit der SPI Schnttstelle. Ich möchte drei 
sinusförmige Spannungen mit einer Frequenz vom 45 Hz ausgeben.

Hierzu will ich zwei MCP4922 per SPI Anschluss von an einen Mega32 
anschließen. Ist die nachfolgende Verbindung so OK?


Mega 32         1. MCP4922         2. MCP4922

PB4   (SS)
PB5  (MOSI)
PB6  (MISO)     (PIN 5) SDI       (PIN 5) SDI
PB7  (SCK)      (PIN 4) SCK       (PIN 4) SCK

PB0             (PIN 8) LDAC      (PIN 8) LDAC
PB1             (PIN 3) CS
PB2                                (PIN 3) CS

Wie unterscheide ich zwischen den zwei Ausgängen des MCP4922? immer 4 
Byte für beide Ausgänge senden?

Danke
Axel

von Oliver J. (skriptkiddy)


Lesenswert?

Axel Düsendieb schrieb:
> Wie unterscheide ich zwischen den zwei Ausgängen des MCP4922? immer 4
> Byte für beide Ausgänge senden?

Im Datenblatt S. 18 siehst du wie das gemacht wird. Pro Ausgang 2 Byte, 
wobei das MSB angibt, für welchen Ausgang die Daten sind.

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

@Skript Kiddy
Danke, nun habe ich es auch gefunden. Wer lesen kann......

Hast Du vieleicht ein Programmbeispiel, dass ich abändern kann? Im 
Datenblatt des Mega 32 sind ist auch ein Beispiel.

void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}

wird dann SPI_MasterTransmit zwei mal aufgerufen?

Was mache ich mit LDAC und CS?

CS auf low
SPI_MasterTransmit(erste Daten)
SPI_MasterTransmit(zweite Daten)
CS auf high
LDAC auf low
LDAC auf high

richtig?






Axel

von Oliver J. (skriptkiddy)


Lesenswert?

Axel Düsendieb schrieb:
> CS auf low
> SPI_MasterTransmit(erste Daten)
> SPI_MasterTransmit(zweite Daten)
> CS auf high
> LDAC auf low
> LDAC auf high
>
> richtig?

Genau so wirds gemacht.

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

SPI_MasterTransmit (lower Half)
SPI_MasterTransmit (Upper Half)

die Bytes so herum?

Axel

von Oliver J. (skriptkiddy)


Lesenswert?

Axel Düsendieb schrieb:
> SPI_MasterTransmit (lower Half)
> SPI_MasterTransmit (Upper Half)
>
> die Bytes so herum?

Nein anders herum.
Steht doch alles im Datenblatt.

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

OK, Danke.

Axel

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.