mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI funzt net


Autor: Christopher Willuweit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

Bin hier schon wieder am verzweifeln. Habe einen alten Sourcecode, der 
ein Byte in Bits aufteilt, und sie einzelnd seriell sendet auf SPI 
umgebaut...
folgender Sourcecode:

void SPI_MasterInit(int a)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = 0x60;
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = 0x59;
}

void lcd_cmd(unsigned char value)
{
PORT(LCD_PORT) &= ~(_BV(LCD_SD));  //command bit ->  0
PORT(LCD_PORT) |= _BV(LCD_SC);
PORT(LCD_PORT) &= ~(_BV(LCD_CS));

/* Start transmission */
SPDR = value;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}

void lcd_data(unsigned char cData)
{

PORT(LCD_PORT) &= ~(_BV(LCD_CS));  //CS to 0
  //SCLK to 0

PORT(LCD_PORT) |= _BV(LCD_SD);    //data -> 1
PORT(LCD_PORT) |= _BV(LCD_SC);    //output bit
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}

Wahrscheinlich irgendein blöder Anfängerfehler, aber ich sitz da schon 
stunden dran...
Das Display ist an das SPI angeschlossen, der Controller ist ein Mega128
ChriZi

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

welcher AVR?

Wenn SPI Master sein soll, muß SS als Output programmiert sein oder es 
fungiert als Master-Anforderung von außen.
Steht was dazu im Datenblatt.

Gruß aus Berlin
Michael

Autor: Christopher Willuweit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein ATMega128
auch mit SS=1 funzt es nicht...

ChriZi

Autor: Markus L. (lucky79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christopher Willuweit wrote:

> void SPI_MasterInit(int a)
wozu brauchst du den int a ?? (is nicht schlimm - Formfehler void würd 
reichen)

> auch mit SS=1 funzt es nicht...
mit SS = 1 kann es nicht fuzen!!

Du musst SS = 0 (Bit löschen) setzen kurz bevor du die Daten ins SPDR 
packst, sonst weiss dein Sklave (Display) nicht, dass er gemeint ist.
Nach den Daten SS = 1 um den Befehl (die Übertragung) sauber 
abzuschließen!
(Steht alles im Datenblatt)

Ein Schaltplan würd aber sicherlich etwas nützliches sein, um dir besser 
helfen zu können!

aja, stimmt die Flankenansteuerung für das Display ??
Du kannst ja einstellen ob erst runter, dann rauf oder umgekehrt und 
dann auch noch wann daten ausgegeben werden (setup) und wann übernommen 
(sample) - wenn das nicht passt versteht dich dein gegenüber leider 
nicht.

Grüße aus Österreich

Markus

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.