SPI für Einsteiger

Gast #236613
Lesenswert?

Hallo zusammen,
ich möchte einen AD-Wandler(24bit-LTC2410) über die SPI-Schnittstelle
vom mega128 auslesen.
Programmieren möchte ich mit Codevision.

Kann mir einer bitte grob erklären, wie der Startvorgang in C aussieht,
um den ADC zum Senden zu bewegen?

Vielen Dank

Brillitsch
Gast #236616
Lesenswert?

1
void SPI_MasterInit(void)
2
{
3
/* Set MOSI and SCK output, all others input */
4
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
5
/* Enable SPI, Master, set clock rate fck/16 */
6
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
7
}
8
void SPI_MasterTransmit(char cData)
9
{
10
/* Start transmission */
11
SPDR = cData;
12
/* Wait for transmission complete */
13
while(!(SPSR & (1<<SPIF)))
14
;
15
}
Gast #236617
Lesenswert?

Danke für die schnellen Antworten.

Das Datenblatt und div. App.Note hab' ich ja gelesen, aber ich hab'
da wohl eine Blockade.

Konkret: Der mega128 liefert den Clock, steuert SS\(ist CE\ beim ADC)
und soll 24bit vom ADC empfangen.

Versteh ich das Codebeispiel vom Datenblatt richtig, das ich laut
Befehl: SPDR = cData; dem ADC erst ein Byte senden muss, um von ihm ein
Byte zuerhalten?

Wenn ja, ich möchte aber 24bit erhalten, muss ich dann 3x8 Einzelbit
senden?

Brillitsch
#236620
Lesenswert?

Ganz einfach: gar nichts, weil er sie nie erhält.
Der LTC2410 hat nur ein 3-Wire-Interface: /CE,SCK und SDO. Es fehlt ein
SDI (serial data in)
Somit wird MOSI nicht an den ADC angeschlossen.
Man muß nur 3 Byte senden, weil sonst die SPI-Schnittstelle keinen Takt
liefert. Der ADC ist sendebereit, sobald /CE auf low gezogen wurde.
Gast #236621
Lesenswert?

Hallo Rahul,

erst steh ich aufm Schlauch, und dann übersehe das korrekte
SPI-Interface aufm LTC.

Danke das Du mich drauf hingewiesen hast.


So, Feierabend is. Schönen Jahreswechsel.

Brillitsch

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren