Forum: Mikrocontroller und Digitale Elektronik SPI funzt net


von Christopher Willuweit (Gast)


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

von Michael U. (Gast)


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

von Christopher Willuweit (Gast)


Lesenswert?

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

ChriZi

von Markus L. (lucky79)


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

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.