Forum: Mikrocontroller und Digitale Elektronik SPI Initialisierung


von Anfänger (Gast)


Lesenswert?

Hey
hab mal ne Frage zur Initialisierung des SPI. Verwende einen LPC2148 und 
programmiere in C. Ich habe nun auf meinem Evaluationboard MCB2140 ein 
digitales Poti(AD8400) angebracht, welches über SPI mit dem Controller 
verbunden ist.Controller soll als Master Poti als Slave arbeiten.Kann 
ich nun, wenn ich an das Poti ein Messgerät anschließe Werte des 
Controllers über SPI auslesen?Hat jemand eine "Beispielinitialisierung 
des SPI" für einen ähnlichen Fall?oder zufällig den gleichen...;)
Es geht mir um das Prinzip der Initialisierung des SPI und wie ich über 
diesen Daten von einem Master zu einem Slave und anderum sende.Vielen 
Dank

von 1323 (Gast)


Lesenswert?

Die Initialisierung des SPI sind ein paar Werte in ein paar Register 
schreiben. Wie die sein muessen steht im Datenblatt des Controllers.

von Anfänger (Gast)


Lesenswert?

ja okey das ist klar, aber zu der Vorgehensweise mit dem Poti....versteh 
ich das richtig, dass ich am Poti den Messwert abgreifen kann den ich 
über SPI schicke?weil das poti als ausgabe dient?

von 1324 (Gast)


Lesenswert?

Ja, das digitale Poti ist ein Ausgabegeraet, besser gesagt Stellglied, 
es gibt ja nichts direktes zum Sehen.

von Anfänger (Gast)


Lesenswert?

okey ich stell mal mein code hierrein...vll sieht ja jemand einen 
Fehler.



void SPI_Init(void)
{
  // Setup SPI Clock Counter Register
  //
  // one SPI clock will be 8 PCLK (where PCLK = CCLK)
  SPI0_PCCR = 8; // 128

  // Setup SPI Control Register
  //
  // BitEnable  = 0    => 8 Bits per transfer
  // CPHA      = 1
  // CPOL      = 1
  // MSTR      = 1    => select master mode
  // LSBF      = 0    => transfered MSB first
  // SPIE      = 0    => interrupt disable
  // BITS      = 1000  => 8 bits (but not used)
  SPI0_SPCR = 0x838;
  // after here: a write to SPI0_SPDR will start transfer
}

/****************************************************
**  Writes the specified byte on the SPI interface.
*******************************************************/

void SPI_Write(unsigned char my_value)
{
  // put given value into the output buffer register
  SPI0_SPDR = my_value;
  // wait for SPIF bit to be set to 1
  while (0 == (SPI0_SPSR & SPSR_SPIF))
  {}
  // causes the SPIF flag to get cleared again
  my_value = SPI0_SPDR;
}


egal was ich dem SPI_write für einen Wert gebe, ich bekomme immer 
Vollausschlag (3.3V ) am Mittelabgriff des Potis als Ausgabewert
kann jemand einen Fehler entdecken? wenn nicht auch gut möglich dass es 
sich um ein Hardwareproblem handelt.

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.