SPI funzt net

Gast #438772
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
Gast #438779
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
#438836
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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.