mikrocontroller.net

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


Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

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

Autor: Oliver Ju. (skriptkiddy)
Datum:

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

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

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

Autor: Oliver Ju. (skriptkiddy)
Datum:

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

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPI_MasterTransmit (lower Half)
SPI_MasterTransmit (Upper Half)

die Bytes so herum?

Axel

Autor: Oliver Ju. (skriptkiddy)
Datum:

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

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, Danke.

Axel

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.