SPI funzt net

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

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.

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.