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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.