mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Initialisierung


Autor: Anfänger (Gast)
Datum:

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

Autor: 1323 (Gast)
Datum:

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

Autor: Anfänger (Gast)
Datum:

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

Autor: 1324 (Gast)
Datum:

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

Autor: Anfänger (Gast)
Datum:

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

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.